Поправил скрипт, поправил неточности в библиотеке
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
(*
|
||||
===============================================================================
|
||||
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
|
||||
Reference in New Issue
Block a user