Цитата:
Сообщение от 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. После проведения записи переменные для отображения автоматически обновятся.