Показать сообщение отдельно
Старый 20.04.2015, 09:13   #28
Max2114
Senior Member
 
Регистрация: Jun 2007
Адрес: Tyumen
Сообщения: 2 052
Благодарил(а): 20 раз(а)
Поблагодарили: 21 раз(а) в 21 сообщениях
По умолчанию Ответ: Расписание по интерфейсу

Цитата:
Сообщение от Max2114 Посмотреть сообщение
Появилась необходимость задавать расписание работы по интерфейсу... очень сильная необходимость. Кто-нибудь уже реализовывал такое?
Я вижу такие пути:
1. Написать новый макрос расписания и вставлять его самостоятельно в проект. Пока концепцию не придумал.
2. Сделать механизм корректирования существующего расписания со скады.
По какому пути лучше пойти?
PS Возможно Арсений или кто-нибудь другой поделится своими мыслями или наработками
В итоге пошел по второму пути. Только вот расписание из текущего конструктора работает хитрым образом и его откорректировать не получилось. Пришлось взять расписание более старой версии. Прикладываю программу, и описание работы, может еще кому пригодится:
Имеем 4 входные переменные и 4 выходные. Все переменные типа 16-ти битовый целочисленный (int).
Bit_input_schedule - упакованные в слово два бита. Бит 0 - Если выставляем его в "1" - включается разрешение производить корректировку расписания из скада-системы. При этом расписание должно быть закрыто на экране контроллера. Иначе редактирование запрещено.
Бит 1 - импульс записи. При установке его в 1 происходит перезапись выбранного параметра в память контроллера. Для последующей перезаписи этот бит необходимо сбросить в 0 и опять установить в 1.

Адрес - Задается день недели. 0 - понедельник, 1 - вторник и т.д.

Курсор - задается положение курсора для редактирования переменной. 0 - время первой точки, 1 - уставка Т первой точки, 2 - занчение "пуск/стоп" первой точки, 3 - время второй точки и т.д.

Int - Задаем значение переменной для записи в память. Формат переменных:
Время - ЧЧММ (где ЧЧ - часы, ММ - минуты) задается единым числом (к примеру 2210 = 22:10).
Уставка Т - задается в грудсах цельсия
Пуск/стоп - задаем "1" если точка типа "Пуск" и 0 если точка типа "стоп".

Переменные для чтения:
Время Текущее заданное в выбранной точке время.
Уставка уставка температуры в текущей точки
Выкл/вкл - упакованное слово состояний точек выбранного дня. 0 - стоп, 1 - пуск. в итоге если 2 точки пуск а 2 стоп то будет так: 0011(Bin)=3(dec).
Выкл/вкл_bit - состояние текущей выбранной точки (пуск/стоп) 0 - стоп, 1 - пуск.

Принцип работы с расписанием:
Со скады переменной "адрес" выбираем нужный день. При этом в поля для отображения данных выкидываем значения переменных для чтения. При изменении дня недели автоматически будут изменяться и значения этих переменных.
Переменной "курсор" выбираем переменную для редактирования. С помощью этой переменной также перемещаемся по точкам внутри одного дня недели. 0 - время первой точки, 1 - уставка Т первой точки, 2 - пуск/стоп первой точки, 3 - время второй точки и т.д.
С помощью переменной "int" задаем значение выбранного параметра расписания. Для записи посылаем импульс в бит 1 слова Bit_input_schedule. После проведения записи переменные для отображения автоматически обновятся.
Вложения
Тип файла: rar Тест_расписание_скада.rar (701.0 Кбайт, 123 просмотров)
Max2114 вне форума   Ответить с цитированием
Благодарность от: