Files
PLC_Library/plc_src/POU/Общие/TP_RST.st
T

61 lines
1.5 KiB
Smalltalk

(*
===============================================================================
Project : PLC_Library
Device : -
Path : Общие
Name : TP_RST
Type : FUNCTION_BLOCK
Exported : 2026-07-31 11:16:16
===============================================================================
*)
FUNCTION_BLOCK TP_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