Управление задвижкой/ клапаном
Ребят, думаю, как реализовать процесс управления задвижкой/клапаном на открытие/закрытие соответственно, именно на языке ST. Так как только начинаю изучать этот язык. Промежуточного положения быть не должно, и к примеру, по истечению 10 секунд, он должен автоматически выключаться/закрываться (не важно). Что-то написал, наставьте на верный путь, уважаемые! Буду очень благодарен, ибо запутался!
PROGRAM PLC_PRG
VAR
Zadvizh_ON: BOOL
timer: TOF (*задержка выключения*)
END_VAR
IF Zadvizh_ON then
Zadvizh_ON:= True;
OUT:= True;
ELSE
Zadvizh_ON:= False;
OUT:= False;
END_IF;
timer(IN := Zadvizh_ON, PT := T#10s);
OUT:=timer.Q
Заджвика местного и дистанцинного режима
Начал писать код для задвижки https://ibb.co/1Rbmscw выглядит для оператора. Сам код находится ниже. Код запускается без проблем, но он не работает. Почему я не знаю. Помогите пожалуйста.
FUNCTION_BLOCK GateValve
VAR_INPUT
//--------------------------------------------------------------------
bPermit :BOOL; (*Разрешение*)
bInterlock :BOOL; (*Блокировка*)
bProtect :BOOL; (*Защита*)
//--------------------------------------------------------------------
bManualControl :BOOL; (*Местное управление*)
bRemoteControl :BOOL; (*Дистанционное управление*)
//--------------------------------------------------------------------
bValveOpenIN :BOOL; (*Задвижка открывается*)
bValveCloseIN :BOOL; (*Задвижка закрывается*)
bValveFailureIN :BOOL; (*Задвижка авария*)
bValveOpenedIN :BOOL; (*Задвижка открыта*)
bValveClosedIN :BOOL; (*Задвижка закрыта*)
//--------------------------------------------------------------------
bMonitor :BOOL; (*Активация мониторинга запуска/останова*)
tMonTimeOpen :TIME; (*Время мониторинга запуска*)
tMonTimeClose :TIME; (*Время мониторинга останова*)
bFbkOpen :BOOL; (*Cтатус запуска*)
bFbkClose :BOOL; (*Cтатус останова*)
END_VAR
VAR_OUTPUT
//--------------------------------------------------------------------
bError :BOOL; (*Неисправность общая*)
bErrorFbkOpen :BOOL; (*Неисправность запуска*)
bErrorFbkClose :BOOL; (*Неисправность останова*)
//--------------------------------------------------------------------
bValveOpenOUT :BOOL; (*Открыть задвижку*)
bValveCloseOUT :BOOL; (*Закрыть задвижку*)
bValveStopOUT :BOOL; (*Остановка*)
//--------------------------------------------------------------------
TON_MonRun_ET :TIME; (*Отсчет таймера мон-га запуска*)
TON_MonStop_ET :TIME; (*Отсчет таймера мон-га останова*)
END_VAR
VAR
//--------------------------------------------------------------------
TON_MonitorRun :TON; (*Таймер мониторинга запуска*)
TON_MonitorStop :TON; (*Таймер мониторинга останова*)
END_VAR
//---------------------------------------- Проверка безопасного состояния ------------------------------------
IF bValveOpenIN AND bValveCloseIN THEN
bPermit := TRUE;
END_IF
//----------------------------------------- Открытие задвижки (В дистанционном режиме) ---------------------------
IF bPermit AND NOT bInterlock AND NOT bProtect AND NOT bValveOpenedIN AND NOT bValveFailureIN AND bRemoteControl THEN
bValveOpenOUT := TRUE;
bValveCloseOUT := FALSE;
ELSE
bRemoteControl := FALSE;
bManualControl := TRUE;
END_IF
//------------------------------------------ Закрытие задвижки (В дистанционном режиме) --------------------------
IF bPermit AND NOT bInterlock AND NOT bProtect AND NOT bValveClosedIN AND NOT bValveFailureIN AND bRemoteControl THEN
bValveOpenOUT := FALSE;
bValveCloseOUT := TRUE;
ELSE
bRemoteControl := FALSE;
bManualControl := TRUE;
END_IF
//------------------------------------------ Таймер открытия задвижки ----------------------------------------
TON_MonitorRun ( IN := bValveOpenIN AND bMonitor AND NOT bFbkOpen,
PT := tMonTimeOpen,
Q => bErrorFbkOpen,
ET => TON_MonRun_ET);
//------------------------------------------ Таймер закрытия задвижки ----------------------------------------
TON_MonitorStop ( IN := bValveCloseIN AND bMonitor AND NOT bFbkClose,
PT := tMonTimeClose,
Q => bErrorFbkClose,
ET => TON_MonStop_ET);