Поправил скрипт, поправил неточности в библиотеке
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
(*
|
||||
===============================================================================
|
||||
Project : PLC_Library
|
||||
Device : -
|
||||
Path : Общие
|
||||
Name : TOF_RST
|
||||
Type : FUNCTION_BLOCK
|
||||
Exported : 2026-07-31 11:16:16
|
||||
===============================================================================
|
||||
*)
|
||||
|
||||
FUNCTION_BLOCK TOF_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; // после 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
|
||||
Reference in New Issue
Block a user