На, студент, тусуйся:
Описание работы программы: трехступенчатое реле уровня используется как конечный автомат; для различения процессов заполнения и опустошения введена булевая переменная. На стадии заполнения работают таймеры, ограничивающие затопление системы при выходе из строя реле уровня. Также введены дополнительные блокировки, нивелирующие колебания уровня при заполнении и перемешивании.
Таблица сигналов/переменных:
Код:
1 Start дискретная глобальная %IX0.0
2 LvlA дискретная глобальная %IX0.1
3 LvlB дискретная глобальная %IX0.2
4 LvlC дискретная глобальная %QX2.0.0
5 VE1 дискретная глобальная %QX2.0.1
6 VE2 дискретная глобальная %QX2.0.2
7 VE3 дискретная глобальная %QX2.0.3
8 Draining дискретная локальная
TW:
Код:
FUNCTION_BLOCK TW
(*
Watchdog timer
Q is FALSE, PT milliseconds after IN had a rising edge
*)
VAR_INPUT
IN: BOOL; (* starts timer with rising edge, resets timer with falling edge *)
PT: TIME; (* time to pass before Q is reset *)
END_VAR
VAR_OUTPUT
Q: BOOL; (* is FALSE, PT milliseconds after IN had a rising edge *)
ET: TIME; (* elapsed time *)
END_VAR
VAR
M: BOOL; (* internal variable *)
StartTime: TIME; (* internal variable *)
END_VAR
IF IN AND NOT M THEN
StartTime := TIME();
M := TRUE;
END_IF
IF NOT IN AND M THEN
M := FALSE;
StartTime := TIME();
END_IF
Q := IN AND (TIME() - StartTime) < PT;
ET := SEL(IN, T#0s, MIN(TIME() - StartTime, PT));