Зачем
Таймеры (TON, TOF, TP) и счётчики в ПЛК: чем отличаются и как применять. Готовые блоки МЭК 61131-3 для задержек, выбега и счёта на конвейере.
Готовые кирпичи вместо изобретения велосипеда
МЭК 61131-3 даёт стандартную библиотеку функциональных блоков — их поддерживают все среды. Это «детальки», которые ты вставляешь и настраиваешь. Самые ходовые — таймеры и счётчики.
Три таймера
| Блок | Что делает | Аналогия |
|---|---|---|
| TON | задержка включения: выход станет TRUE через заданное время после появления входа | «подумай N секунд, потом включи» |
| TOF | задержка выключения: выход остаётся TRUE ещё N секунд после пропадания входа | «выключайся не сразу, а погодя» |
| TP | импульс фиксированной длины при появлении входа | «дай ровно N секунд импульс» |
У таймера два главных параметра: вход IN (запуск) и PT (preset time — заданное время), а на выходе Q (сработал) и ET (elapsed time — сколько прошло).
Разобранный пример
TOF на выбеге насоса. Насос охлаждает двигатель, и после команды «стоп» его надо покрутить ещё 30 секунд, чтобы снять остаточное тепло. Заводим команду «насос» через TOF с PT := T#30S: пока команда есть — насос крутится; убрали команду — TOF держит выход ещё 30 секунд, потом гасит. Без таймера насос встал бы мгновенно. Это классический приём.
Счётчики
| Блок | Вход счёта | Сброс/загрузка | Что делает |
|---|---|---|---|
| CTU | CU (фронт) |
R (reset) |
счётчик вверх: +1 на каждый фронт CU, Q = TRUE при достижении заданного PV |
| CTD | CD (фронт) |
LD (load) |
счётчик вниз: −1 на каждый фронт, считает от загруженного значения к нулю |
Счётчиками считают детали на конвейере, циклы оборудования, срабатывания — что угодно дискретное. Как и у таймера, у счётчика есть текущее значение — CV (current value) — которое можно вывести на мнемосхему или прочитать в программе.
Разобранный пример
CTU считает коробки на конвейере. Фотодатчик на выходе линии упаковки даёт короткий импульс на каждую прошедшую коробку — заводим этот импульс на вход CU счётчика CTU с PV := 100. Каждая коробка — фронт — счётчик +1. Дошли до 100 — Q становится TRUE, программа подаёт сигнал «паллета готова» и вызывает сброс через вход R, обнуляя CV для следующей партии.
Опасно
Механическая кнопка или концевик при срабатывании физически дребезжит — контакт несколько раз замыкается и размыкается за доли секунды, прежде чем встать окончательно. Заведённый напрямую на CU счётчика, дребезг даёт вместо одного фронта несколько — счётчик насчитает лишние коробки или циклы, и расхождение с реальностью вскроется не сразу, а через смену. Для точного счёта используй бездребезговые датчики (фотодатчик, индуктивный датчик) там, где это возможно, либо программный фильтр (антидребезг: засчитывать фронт не чаще, чем раз в N миллисекунд). Механическую кнопку для счёта товарных единиц на конвейере не ставь.
Важно
Таймеры и счётчики — это блоки с памятью (экземпляры): каждый таймер в программе нужно объявить отдельной переменной-экземпляром. Два места в коде не могут пользоваться одним таймером — они «затрут» друг другу время. Правило: один физический отсчёт = один экземпляр таймера или счётчика.
Проверь себя
- Чем TON отличается от TOF?
- Каким таймером сделать «выбег» насоса 30 секунд после стопа?
- Что хранят выходы Q и ET у таймера?
- Почему нельзя напрямую заводить механическую кнопку на вход счёта CTU, если важна точность подсчёта?
Документы и ресурсы
Обязательные
- Норматив ГОСТ Р МЭК 61131-3-2016 — стандартные функциональные блоки (TON, TOF, TP, CTU, CTD) описания стандартных блоков TON, TOF, TP, CTU и CTD — их входы и выходы сверяй по первоисточнику
Рекомендуемые
Практическое задание
Спроектируй (на бумаге или в симуляторе) логику с таймерами для автоматических ворот склада:
- по сигналу датчика машины ворота открываются;
- после того как машина проехала (датчик пропал), ворота ждут 5 секунд и закрываются — каким таймером это сделать?
- мигающая лампа во время движения ворот: сделай мигание периодом 1 секунда из двух таймеров TON (подсказка: один запускает другой, второй сбрасывает первый — получится генератор импульсов).
Нарисуй временну́ю диаграмму: сигнал датчика → команда «закрыть» → работа лампы. Укажи PT каждого таймера.
Отмечайте прогресс — заведите бесплатный аккаунт. Уже есть? Войти.