TGViewer
Codesys 3.5 Обучение программированию. Codesys 3.5 Обучение программированию. @codesys4 · 269 subscribers
Post #141 214
⏱ TON в CODESYS: как работает таймер задержки включения

TON — один из самых используемых таймеров в программах ПЛК.

Задержка включения двигателя, подтверждение аварии, фильтрация кратковременных сигналов, контроль превышения температуры — во всех этих задачах часто используется именно TON.

Но иногда возникает ситуация:

«На входе уже был TRUE, а таймер почему-то не сработал».

Разберём, как TON работает на самом деле.

━━━━━━━━━━━━━━━━━━

🔹 Что делает TON?

TON — это таймер задержки включения.

Объявим экземпляр таймера:

VAR
fbTimer : TON;
xSignal : BOOL;
xAlarm : BOOL;
END_VAR


Вызовем его:

fbTimer(
IN := xSignal,
PT := T#5s
);


Основные параметры:

IN — вход запуска таймера

PT — заданное время задержки

Q — выход таймера

ET — прошедшее время

В нашем примере:

PT := T#5s


Это означает, что IN должен непрерывно оставаться в состоянии TRUE в течение 5 секунд.

━━━━━━━━━━━━━━━━━━

🔄 Что происходит после IN = TRUE?

Пока:

IN = FALSE

таймер находится в сброшенном состоянии:

Q  = FALSE
ET = T#0s


Как только:

IN = TRUE

начинается отсчёт времени.

Условно процесс выглядит так:

0 сек → ET = 0 сек
1 сек → ET = 1 сек
2 сек → ET = 2 сек
3 сек → ET = 3 сек
4 сек → ET = 4 сек
5 сек → ET = 5 сек


Пока:

ET < PT


выход:

Q = FALSE


Когда заданное время достигнуто:

ET ≥ PT


получаем:

Q = TRUE


Если IN продолжает оставаться TRUE, выход Q тоже остаётся активным.

━━━━━━━━━━━━━━━━━━

⚠️ Самая важная особенность TON

Теперь представим такую ситуацию:

xSignal = TRUE   → 4.8 сек
xSignal = FALSE → 0.1 сек
xSignal = TRUE → снова


До заданных 5 секунд не хватило всего 0.2 секунды.

Что произойдёт?

Как только:

IN = FALSE

обычный TON сбрасывается:

ET → T#0s
Q → FALSE


Когда IN снова станет TRUE, отсчёт начнётся заново.

Предыдущие 4.8 секунды таймер не запоминает.

━━━━━━━━━━━━━━━━━━

🧠 TON считает непрерывное время

Это ключевой момент.

TON не отвечает на вопрос:

«Сколько всего времени сигнал был TRUE?»

Он отвечает:

«Как долго сигнал непрерывно находится в TRUE?»

Например:

TRUE  → 3 сек
FALSE → 1 сек
TRUE → 3 сек


Суммарно сигнал был активен:

3 + 3 = 6 секунд


Но при:

PT := T#5s


выход Q не станет TRUE.

Потому что ни один непрерывный участок TRUE не длился 5 секунд.

━━━━━━━━━━━━━━━━━━

🏭 Практический пример: задержка аварии

Допустим, есть температура:

rTemperature

Нужно сформировать аварию только в том случае, если температура выше 90 °C непрерывно держится 5 секунд.

Сначала получаем условие превышения:

xHighTemp := rTemperature > 90.0;


Затем запускаем таймер:

fbHighTemp(
IN := xHighTemp,
PT := T#5s
);

xAlarm := fbHighTemp.Q;


Что произойдёт?

Если температура кратковременно поднимется выше 90 °C, например на 300 мс:

xHighTemp = TRUE


таймер начнёт отсчёт.

Но как только температура снова опустится ниже 90 °C:

xHighTemp = FALSE


таймер сбросится.

Авария не появится.

Если же температура остаётся выше 90 °C непрерывно 5 секунд:

fbHighTemp.Q = TRUE


и сформируется аварийный сигнал.

Так TON позволяет отфильтровать кратковременные выбросы.

━━━━━━━━━━━━━━━━━━

⚠️ Частая ошибка: вызывать таймер только внутри IF

Иногда встречается такой код:

IF xSignal THEN
fbTimer(
IN := TRUE,
PT := T#5s
);
END_IF


Проблема в том, что когда xSignal = FALSE, функциональный блок вообще не вызывается.

Его входы и внутреннее состояние в этом цикле не обновляются обычным способом.
More from @codesys4
  1. Oct 15, 2026document post
  2. Oct 15, 2026🎛 Интерактивный симулятор ПИД-регулятора! Хотите наглядно увидеть, как работают P, I и D…
  3. Oct 15, 2026🧠 РАЗБОР КОДА: R_TRIG ⚠️ Найдите подвох в программе! В CODESYS объявлены переменные: VAR…
  4. Oct 15, 2026🧠 РАЗБОР КОДА: R_TRIG Один экземпляр — два вызова за цикл ПЛК. Сигналы не изменяются: xA…
  5. Oct 15, 2026⚙️ FUNCTION_BLOCK в CODESYS 📘 Часть 3/3. Как избежать ошибок повторного вызова ФБ? В пред…
  6. Oct 15, 2026⚙️ FUNCTION_BLOCK в CODESYS 📘 Часть 2/3. Почему R_TRIG может выдавать ложные импульсы? В…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →