(* =============================================================================== Project : PLC_Library Device : - Path : Общие Name : TP_RST Type : FUNCTION_BLOCK =============================================================================== *) FUNCTION_BLOCK TP_RST (* Формирователь одиночного импульса (TP) длительностью PT с возможностью принудительного сброса RST. Повторный передний фронт IN во время выполнения импульса игнорируется. RST немедленно прерывает выполняющийся импульс. *) 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; _ton(IN := FALSE, PT := PT); ET := _ton.ET; RETURN; END_IF // Передний фронт IN — запускаем импульс (только если не идёт уже) IF IN AND NOT prevIN AND NOT timerRunning THEN timerRunning := TRUE; END_IF prevIN := IN; // Таймер вызывается каждый цикл _ton(IN := timerRunning, PT := PT); ET := _ton.ET; // Логика выхода IF timerRunning THEN IF _ton.Q THEN Q := FALSE; timerRunning := FALSE; ELSE Q := TRUE; END_IF ELSE Q := FALSE; END_IF END_FUNCTION_BLOCK