В этой части рассмотрим вывод и запись уставок. Для этого было создан макрос "screen 2" (2 шт)
Входы:
- enable - активизация окна (делает возможным редактирование и вывод на экран.
- UP - команда для перемещения курсора вверх
- down - команда для перемещения курсора вниз
Выходы
- limit_up - уставка - верхняя граница диапазона
- limit_dwn - уставка - нижняя граница диапазона
- use_interval - флаг "использовать интервал"
- lock - флаг "редактирование уставки" (нужен для блокировки перехода в другое окно)
Заглянем внутрь этого макроса
Макрос можно разделить на две основные части:
1. Перемещение курсора
2. Макросы строк (1 строка - 1 уставка)
Рассмотрим по порядку
Перемещение курсора реализовано на двунаправленном счетчике
При поступлении сигнала "enable" счетчик сбрасывается в ноль, активная строка становится "0+1", если есть сигналы "not lock", "not lock1", "not lock2", то при нажатии "UP" счетчик увеличивается на единицу, при нажатии "down" счетчик уменьшается на единицу. К значению счетчика прибавляется единица и значение отправляется дальше в программу (на входы макросов "screen 1...3"). Ниже скрин справки к счетчику. Про счетчики можно прочитать здесь.
Рассмотрим теперь макрос SCREEN1 изнутри
Входы
- enable - активизация окна (делает возможным редактирование и вывод на экран).
- asci - нужен для блока INPUT, берется с блока KEYBOARD.
- string - номер текущей строки
- N_strtring - номер строки курсора
Выходы
- not lock - нет редактирования
- value - вывод значения в программу
Рассмотрим для начала работу блоков screen(str), INPUTnumber, screen(real), KEYBOARD
Курсором у нас будет символ ">", в блоке названия уставки сделаем две строки
Одна без стрелочки, вторая со стрелочкой. Когда строка активна - выводим со стрелочкой. Вывод текущего значения выводим с помощью screen(real)
Теперь нужно организовать редактирование уставки, читаем описание
Для осуществления ввода нам еще понадобится блок KEYBOARD
Если экран активен, и выбрана эта строка, то блок INPUT воспринимает слово ascii, как только начинается редактирование, отключаем вывод на экран (иначе будет затирать вводимое значение), после завершения ввода, выход sinc принимает значение "1", по фронту этого сигнала делаем запись в энергонезависимую память. При редактировании not_lock, принимает значение "0" и блокирует перемещение курсора.
Остальные строки работают аналогично.
При выводе чисел также будет полезно использовать форматирование вывода
При проектировании экранов, я обычно беру клетчатый листок бумаги, и прорисовываю по символам :), чтобы расставить правильно координаты и длины строк.
Было бы не плохо сделать видео работающей программы, но пока нет контроллера под рукой (и мне мой голос дико не нравится)
ссылка на программу есть в части 1.