(* =============================================================================== Project : PLC_Library Device : - Path : Общие Name : TOF_RST Type : FUNCTION_BLOCK =============================================================================== *) FUNCTION_BLOCK TOF_RST (* Таймер выключения (TOF) с возможностью принудительного сброса RST. При снятии IN выход Q остается TRUE еще в течение PT. RST немедленно сбрасывает выход и таймер вне зависимости от IN. *) VAR_INPUT IN: BOOL; // Управляющий сигнал PT: TIME; // Время задержки выключения RST: BOOL; // Принудительный сброс END_VAR VAR_OUTPUT Q: BOOL; // Выход ET: TIME; // Время работы таймера END_VAR VAR _ton: TON; prevIN: BOOL; // предыдущее состояние IN для детектирования фронта timerRunning: BOOL; // TRUE — идёт отсчёт задержки END_VAR (*----- IMPLEMENTATION -----*) // Принудительный сброс — наивысший приоритет IF RST THEN Q := FALSE; timerRunning := FALSE; prevIN := FALSE; // после RST не ловим задний фронт _ton(IN := FALSE, PT := PT); ET := _ton.ET; RETURN; END_IF // Передний фронт IN — отменяем задержку IF IN AND NOT prevIN THEN timerRunning := FALSE; END_IF // Задний фронт IN — запускаем задержку IF NOT IN AND prevIN THEN timerRunning := TRUE; END_IF prevIN := IN; // Запуск/работа таймера _ton(IN := timerRunning, PT := PT); ET := _ton.ET; // Логика выхода IF IN THEN Q := TRUE; timerRunning := FALSE; ELSIF timerRunning THEN IF _ton.Q THEN Q := FALSE; timerRunning := FALSE; ELSE Q := TRUE; END_IF ELSE Q := FALSE; END_IF END_FUNCTION_BLOCK