ZDVA - задвижка на два положения 
================================

Задвижка, которая открывается по времени, с ручным и автоматическим управлением.
Либо задвижка которая открывается на нужный угол.

--------------------------------------------------------------------------------¬
¦ВХОДЫ:                                                                         ¦
+--------------T----------------------------------------------------------------+
¦ Enable       ¦ Разрешает работу в автоматическом режиме                       ¦
+--------------+----------------------------------------------------------------+
¦ DoOpen       ¦ Открыть задвижку                                               ¦
+--------------+----------------------------------------------------------------+
¦ IsFullOpen   ¦ Открыть на полную при DoOpen = 1                               ¦
+--------------+----------------------------------------------------------------+
¦ CurVal       ¦ Текущее значение положения задвижки (угол)                     ¦
+--------------+----------------------------------------------------------------+
¦ Imp          ¦ По положительному фронту задвижка переоткрывается если         ¦
¦              ¦ находится в режиме авто, Enable=1 и DoOpen = 1                 ¦
+--------------+----------------------------------------------------------------+
¦ InProc       ¦ Вход Proc для установки процента открытия                      ¦
L--------------+-----------------------------------------------------------------



--------------------------------------------------------------------------------¬
¦ВЫХОДЫ:                                                                        ¦
+--------------T----------------------------------------------------------------+
¦ Output       ¦ Задвижка находится в нужном положении                          ¦
¦              ¦ Равна 1 если:                                                  ¦
¦              ¦ 1) Ручной режим (любой) даже при Alarm = 1                     ¦
¦              ¦ 2) Авто режим, Enable=1, DoOpen=0 и сработан датчик закрытия   ¦
¦              ¦ 3) Авто режим, Enable=1, DoOpen=1 и задвижка открылась как надо¦
+--------------+----------------------------------------------------------------+
¦ Flags        ¦ Флаги:                                                         ¦
¦              ¦   b0-b1 - режим выходов                                        ¦
¦              ¦     0 - Chnl1Out - закрыть; Chnl2Out - открыть                 ¦
¦              ¦     1 - Chnl1Out - открыть; Chnl2Out - закрыть                 ¦
¦              ¦     2 - Chnl1Out - закрыть; открыть = !закрыть                 ¦
¦              ¦     3 - не используется (выхода не записываются)               ¦
¦              ¦                                                                ¦
¦              ¦   b2-b3 - режим входов                                         ¦
¦              ¦     0 - Chnl1In - закрыто; Chnl2In - открыто                   ¦
¦              ¦     1 - Chnl1In - открыто; Chnl2In - закрыто                   ¦
¦              ¦     2 - Chnl1In - закрыто; открыто = !закрыто                  ¦
¦              ¦     3 - не используется (конечники не срабатывают никогда)     ¦
¦              ¦                                                                ¦
¦              ¦   b4 - Каким значением включать выход                          ¦
¦              ¦   Например: если битик равен 1, то когда надо подать           ¦
¦              ¦   управляющий сигнал на действие в выход будет записана 1      ¦
¦              ¦   При b0-b1=2 этот бит означает закрыть                        ¦
¦              ¦                                                                ¦
¦              ¦   b5 - Какое значение входа есть сработка конечника            ¦
¦              ¦   Например: если битик равен 0, то когда с платы будет         ¦
¦              ¦   получен 0, датчик будет считаться сработанным                ¦
¦              ¦   При b2-b3=2 этот бит означает состояние закрыть              ¦
¦              ¦                                                                ¦
¦              ¦   b6 - Если равен 1, тогда открытие идет не по времени, а по   ¦
¦              ¦   показаниям датчика на входе CurVal.                          ¦
¦              ¦                                                                ¦
¦              ¦   b7 - Если равен 1, тогда при автоматическом режиме работы    ¦
¦              ¦   значение Proc берется из входа, а не из выхода, при  этом    ¦
¦              ¦   значение выхода меняется на значение входа.                  ¦
¦              ¦                                                                ¦
+--------------+----------------------------------------------------------------+
¦ Sost         ¦ Состояние:                                                     ¦
¦              ¦   88 - неверный адрес (входа или выхода), либо CloseVal =      ¦
¦              ¦        OpenVal при Flag.6 = 1                                  ¦
¦              ¦   30 - первый цикл ПЛК (инициализация)                         ¦
¦              ¦                                                                ¦
¦              ¦   0 - стартовое состояние или Enable = 0 или Control = 4       ¦
¦              ¦                                                                ¦
¦              ¦ При автоматическом режиме:                                     ¦
¦              ¦   Закрытие до конченика:                                       ¦
¦              ¦   15 - команда на закрытие (при DoOpen=0)                      ¦
¦              ¦   17 - команда на закрытие (при DoOpen=0) выполнена успешно    ¦
¦              ¦   18 - команда на закрытие (при DoOpen=0) закончилась ошибкой  ¦
¦              ¦                                                                ¦
¦              ¦   Частичное открытие:                                          ¦
¦              ¦   10 - команда на закрытие (при DoOpen=1), т.е. предварительное¦ 
¦              ¦     закрытие перед будущим открытием. В случаее если Flag.6 = 1¦
¦              ¦     то идет закрытие до достижения нужного угла                ¦
¦              ¦   11 - команда на открытие (при DoOpen=1)                      ¦
¦              ¦   16 - открытие при DoOpen=1 завершилось успешно,              ¦
¦              ¦        ждем дальнейших   команд                                ¦
¦              ¦   19 - команда на открытие (при DoOpen=1) закончилась ошибкой  ¦
¦              ¦      предварительного закрытия для Flag.6 = 0 или по таймауту  ¦
¦              ¦      в открытия/закрытия при Flag.6 = 1                        ¦
¦              ¦                                                                ¦
¦              ¦   Полное открытие:                                             ¦
¦              ¦   12 - идет открытие до конечника                              ¦
¦              ¦   14 - удачно закончилось открытие до конечника                ¦
¦              ¦   13 - открытие до конечника закончилось неудачей              ¦
¦              ¦                                                                ¦
¦              ¦ При ручном режиме:                                             ¦
¦              ¦                                                                ¦
¦              ¦   Аналогично автоматическому, только значния Sost = Sost + 10  ¦
¦              ¦   (т.е. на 10 больше)                                          ¦
¦              ¦                                                                ¦
+--------------+----------------------------------------------------------------+
¦ Opened       ¦ Флаг открытия = нажат конечник (даже при Blok = 1)             ¦
+--------------+----------------------------------------------------------------+
¦ Closed       ¦ Флаг закрытия = нажат конечник (даже при Blok = 1)             ¦
+--------------+----------------------------------------------------------------+
¦ Alarm        ¦ Авария. Сигнал отправили и до положения не дошли               ¦
+--------------+----------------------------------------------------------------+
¦ Control      ¦                                                                ¦
¦              ¦   0 - автоматическое управление (Enable DoOpen Imp )           ¦
¦              ¦   1 - закрыть до конечника (ручное)                            ¦
¦              ¦   2 - открыть (ручное)                                         ¦
¦              ¦   3 - открыть до конечника (ручное)                            ¦
¦              ¦   4 и более ничего не делать (ручное)                          ¦
¦              ¦                                                                ¦
¦              ¦ Ручное управление имеет самый высокий приоритет.               ¦
¦              ¦                                                                ¦
+--------------+----------------------------------------------------------------+
¦ Blok         ¦ Блокировка датчиков положения                                  ¦
¦              ¦ Отображает как надо, но работает так будто все корректно:      ¦
¦              ¦ датчик закрытия срабатывает сразу после подачи команды на      ¦
¦              ¦ закрытие; частичное открытие срабатывает по таймеру            ¦
¦              ¦ (не сразу, а ждет), полное открытие срабатывает сразу Нажатый  ¦
¦              ¦ Blok выходы не блокирует.                                      ¦
+--------------+----------------------------------------------------------------+
¦ TimeOpen     ¦ Актуально только при Flag.6 = 0                                ¦
¦              ¦ Время выдачи сигнала открытия на выход                         ¦
¦              ¦ Через это время задвижка считается открытой, хоть конечник     ¦
¦              ¦ на открыто и не сработал. Работает при Time100Proc != 0        ¦
+--------------+----------------------------------------------------------------+
¦ MaxCloseTime ¦ Время выдачи сигнала закрытия. Если = 0, то время              ¦
¦              ¦ не учитывается                                                 ¦
+--------------+----------------------------------------------------------------+
¦ MaxOpenTime  ¦ Время выдачи сигнала открытия. Если = 0, то время              ¦
¦              ¦ не учитывается                                                 ¦
+--------------+----------------------------------------------------------------+
¦ Time100Proc  ¦ Актуально только при Flag.6 = 0                                ¦
¦              ¦ Время полного открытия задвижки.                               ¦
¦              ¦ Если Time100Proc = 0, то см. TimeOpen                          ¦
+--------------+----------------------------------------------------------------+
¦ Proc         ¦ Поцент открытия задвижки (на сколько % ее открывать)           ¦
¦              ¦                                                                ¦
¦              ¦ При Flag.6 = 0 отсчитывается от Time100Proc,                   ¦                                                                ¦
¦              ¦ если Time100Proc = 0, то для расчета времени открытия          ¦
¦              ¦ используется TimeOpen                                          ¦
¦              ¦                                                                ¦
¦              ¦ При Flag.6 = 1 отсчитывается как % между показаниями CloseVal  ¦                                                                ¦
¦              ¦ и OpenVal                                                      ¦
¦              ¦                                                                ¦
+--------------+----------------------------------------------------------------+
¦ RealProc     ¦ Актуально только при Flag.6 = 1                                ¦
¦              ¦ Это текущий % открытия (уже пересчитанный)                     ¦
¦              ¦                                                                ¦
¦              ¦ закрыто |------------| открыто                                 ¦
¦              ¦         0%          100%                                       ¦
+--------------+----------------------------------------------------------------+
¦ CloseVal     ¦ Актуально только при Flag.6 = 1                                ¦
¦              ¦ Значение "Закрыто" в единицах CurVal                           ¦
+--------------+----------------------------------------------------------------+
¦ OpenVal      ¦ Актуально только при Flag.6 = 1                                ¦
¦              ¦ Значение "Открыто" в единицах CurVal                           ¦
+--------------+----------------------------------------------------------------+
¦ Value        ¦ Значение получаемое с CurVal (не пересчитанное)                ¦
+--------------+----------------------------------------------------------------+
¦ Chnl1Out     ¦ Адрес управления 1                                             ¦
+--------------+----------------------------------------------------------------+
¦ Chnl2Out     ¦ Адрес управления 2                                             ¦
+--------------+----------------------------------------------------------------+
¦ Chnl1In      ¦ Адрес датчика положения 1                                      ¦
+--------------+----------------------------------------------------------------+
¦ Chnl2In      ¦ Адрес датчика положения 2                                      ¦
L--------------+-----------------------------------------------------------------

Для визуализации надо разрешить:
Opened   R
Closed   R
Sost     R

Control  RW
Blok     RW
Chnl'ы   RW

на Alarm цеплять сообщение об ошибке
