fbTimer(
IN := xSignal,
PT := T#5s
);
А затем использовать его выход:
IF fbTimer.Q THEN
xAlarm := TRUE;
END_IF
Так алгоритм легко читать:
xSignal определяет состояние входа таймера на каждом цикле ПЛК.━━━━━━━━━━━━━━━━━━
🔎 Для чего нужен ET?
ET показывает текущее прошедшее время.Например:
fbTimer.ET
может иметь значения:
T#500ms
T#2s
T#4s
T#5s
Это удобно использовать для:
• диагностики программы
• отображения времени на HMI
• индикации процесса задержки
• анализа работы алгоритма
• отладки
Например, оператору можно показать:
«Авария будет подтверждена через 2.3 секунды».
Для основной логики обычно используют
Q, а ET — как дополнительную информацию.━━━━━━━━━━━━━━━━━━
📌 Коротко: алгоритм TON
Если:
IN = FALSEполучаем:
ET = T#0s
Q = FALSE
Если:
IN = TRUEначинается отсчёт.
Пока:
ET < PT
получаем:
Q = FALSEКогда:
ET ≥ PT
получаем:
Q = TRUEЕсли после этого:
IN = FALSEтаймер снова сбрасывается.
━━━━━━━━━━━━━━━━━━
💡 Где TON используется на практике?
Очень часто:
• задержка формирования аварии
• фильтрация кратковременных сигналов
• задержка включения оборудования
• контроль устойчивого состояния датчика
• контроль длительного превышения параметра
• ожидание перед переходом на следующий шаг алгоритма
• антидребезг дискретных сигналов
• задержка разрешения операции
Главный вопрос при выборе
TON:«Нужно ли мне убедиться, что условие непрерывно выполняется заданное время?»
Если да —
TON обычно подходит.━━━━━━━━━━━━━━━━━━
🧠 Запомните
TON — это не просто команда:«подождать 5 секунд».
Это проверка:
«Оставался ли вход IN непрерывно в TRUE в течение заданного времени PT?»
Даже кратковременный переход
IN в FALSE приводит к сбросу отсчёта.И именно поэтому таймер иногда кажется «неработающим», хотя на самом деле работает совершенно правильно.
━━━━━━━━━━━━━━━━━━
❓ Проверим себя
Пусть задано:
PT := T#5s
Сигнал ведёт себя так:
TRUE → 4.9 сек
FALSE → 0.1 сек
TRUE → 4.9 сек
Станет ли
Q = TRUE хотя бы на одном цикле?💬 Напишите свой ответ в комментариях 👇
#CODESYS #ПЛК #АСУТП #StructuredText #ST #ПрограммированиеПЛК #Автоматизация