Поправил скрипт, поправил неточности в библиотеке

This commit is contained in:
2026-07-31 11:20:45 +03:00
parent d3da512178
commit 3d52fdec57
44 changed files with 1956 additions and 51 deletions
+68
View File
@@ -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