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

65 lines
1.8 KiB
Smalltalk
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(*
===============================================================================
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