Производство по чертежам Подбор аналогов Цены производителя Оригинальная продукция в короткие сроки
INNERпроизводство и поставка промышленных комплектующих и оборудования
Бесплатно Личный кабинет — избранное и расчёты ★ Регистрация →
Новинка Симуляторы и тренажёры — ЧПУ, допуски, ПИД Попробовать →
Правовая информация →

INNER
Контакты

Детекторы фронта R_TRIG и F_TRIG

  • 14.07.2026
  • Познавательное

Детекторы фронта R_TRIG и F_TRIG — это стандартные функциональные блоки языков программирования ПЛК по МЭК 61131-3, которые отслеживают изменение логического сигнала. R_TRIG срабатывает по переднему (нарастающему) фронту, когда сигнал переходит из 0 в 1; F_TRIG — по заднему (спадающему) фронту, при переходе из 1 в 0. В момент фронта выход блока становится истинным ровно на один рабочий цикл контроллера. Ниже разобрано, как работают R_TRIG и F_TRIG, чем передний фронт отличается от заднего, зачем детекторы фронта нужны в программах ПЛК и как их применяют для обработки кнопок и счёта событий.

Программа ПЛК выполняется циклически, поэтому уровневый сигнал — например, удерживаемая кнопка — остаётся истинным множество циклов подряд. Детектор фронта позволяет отреагировать на само изменение сигнала, а не на его уровень, то есть выполнить действие однократно.

Содержание статьи
ПЛК-программирование

Передний и задний фронт

Фронт — это момент изменения логического сигнала. Различают два вида:

Передний фронт
переход сигнала из 0 в 1 (нарастающий фронт); его детектирует R_TRIG
Задний фронт
переход сигнала из 1 в 0 (спадающий фронт); его детектирует F_TRIG

У обоих блоков один логический вход CLK (отслеживаемый сигнал) и один логический выход Q (признак фронта). Разница только в том, какой переход считается фронтом.

Выход Q становится истинным ровно на один рабочий цикл ПЛК в момент фронта, а на следующем цикле автоматически сбрасывается в 0 — даже если входной сигнал остаётся неизменным.

Наверх

Зачем нужны детекторы фронта

Контроллер работает по кругу: считывает входы, выполняет программу, обновляет выходы — и снова сначала. Один такой проход называется рабочим циклом (сканированием); его длительность обычно составляет от единиц до десятков миллисекунд и зависит от контроллера и объёма программы.

Если реагировать на уровень сигнала, то удерживаемая кнопка будет истинной сотни раз подряд, и привязанное к ней действие выполнится на каждом цикле. Это приводит к «дребезгу логики»: счётчик набивает лишние значения, операция запускается многократно, флаг переключается туда-обратно. Детектор фронта решает проблему, выделяя единственный цикл, в котором произошло изменение.

Блок детекции фронта нужно вызывать в каждом рабочем цикле. Если поместить его в ветвь условия, которая иногда не выполняется, блок может пропустить фронт, потому что сравнение с предыдущим состоянием перестанет обновляться каждый цикл.

Наверх

Как устроены R_TRIG и F_TRIG

R_TRIG и F_TRIG — это функциональные блоки, а не функции: между вызовами они хранят внутреннее состояние — предыдущее значение входа. Именно сравнение текущего входа с сохранённым предыдущим и даёт признак фронта.

Внутренняя логика детектора переднего фронта по стандарту записывается так: Q := CLK AND NOT M; затем M := CLK;, где M — внутренняя память (предыдущее состояние входа). Выход истинен, только когда вход равен 1, а на прошлом цикле был 0. Детектор заднего фронта устроен зеркально: он выдаёт единицу, когда вход стал 0, а на прошлом цикле был 1.

Поскольку блок хранит состояние, ему требуется собственный экземпляр (instance). Для каждого отслеживаемого сигнала объявляют отдельный экземпляр R_TRIG или F_TRIG. Использование одного экземпляра сразу для нескольких сигналов — типичная ошибка: состояния конфликтуют, и фронты определяются неверно.

Поведение в самом первом цикле после запуска зависит от того, как инициализирована внутренняя память блока в конкретной среде программирования. Если начальное состояние критично (например, вход уже активен на старте), это следует проверять по документации на используемую систему.

Наверх

Типовые задачи

Детекторы фронта применяют везде, где нужно отреагировать на событие однократно, а не удерживать реакцию, пока держится сигнал.

ЗадачаБлокЧто даёт
Реакция на нажатие кнопкиR_TRIGОдно действие на нажатие независимо от длительности удержания
Реакция на отпускание кнопкиF_TRIGДействие в момент отпускания
Счёт событий или импульсовR_TRIGОдин импульс на вход счётчика за каждое событие
Запуск операции по командеR_TRIGОднократный старт вместо повторных запусков каждый цикл
Переключение флага (триггер)R_TRIGСмена состояния по нажатию, а не постоянное переключение
Наверх

Счёт событий и обработка кнопок

Счёт нажатий

Чтобы посчитать нажатия кнопки, сигнал кнопки подают на вход CLK блока R_TRIG, а выход Q — на счётный вход счётчика (например, прибавляющего счётчика CTU).

Сигнал кнопки → R_TRIG.CLK; выход R_TRIG.Q → счётный вход счётчика. Тогда счётчик увеличивается на единицу за каждое нажатие. Без детектора фронта счётчик прибавлял бы по единице на каждом цикле, пока кнопка удерживается, и результат оказался бы бессмысленным.

Нажатие и отпускание

R_TRIG по сигналу кнопки даёт реакцию на нажатие, F_TRIG — на отпускание. Это позволяет, например, по одной и той же кнопке запускать действие при нажатии и завершать при отпускании.

Детектор фронта не устраняет дребезг механических контактов кнопки. Если контакт «звенит» при замыкании, фронтов может оказаться несколько. Подавление дребезга — отдельная задача, которую решают аппаратно или программно (например, фильтром или таймером выдержки), а уже к очищенному сигналу применяют детектор фронта.

Наверх

Эквиваленты в языке релейных схем

Блоки R_TRIG и F_TRIG используют в текстовом языке структурированного текста (ST) и в языке функциональных блоковых диаграмм (FBD). В языке релейно-контактных схем (LD) тем же целям служат контакты детекции фронта: контакт положительного фронта (обозначается P) и контакт отрицательного фронта (обозначается N). Логика у них та же — импульс на один цикл при соответствующем переходе сигнала; различается только форма записи в конкретном языке программирования.

Наверх
Что такое R_TRIG и F_TRIG?

Это стандартные функциональные блоки МЭК 61131-3 для детекции фронта сигнала в ПЛК. R_TRIG определяет передний фронт (переход 0→1), F_TRIG — задний фронт (переход 1→0). При обнаружении фронта выход Q становится истинным на один рабочий цикл.

Чем передний фронт отличается от заднего?

Передний (нарастающий) фронт — это переход сигнала из 0 в 1, например момент нажатия кнопки. Задний (спадающий) фронт — переход из 1 в 0, например момент отпускания. R_TRIG реагирует на передний фронт, F_TRIG — на задний.

Почему выход держится только один цикл?

Блок сравнивает текущее значение входа с сохранённым предыдущим. Условие фронта выполняется лишь в том цикле, когда значение изменилось; на следующем цикле предыдущее состояние обновляется, и выход сбрасывается. Так гарантируется однократная реакция на событие.

Зачем вообще нужны детекторы фронта?

Программа ПЛК циклична, и уровневый сигнал остаётся истинным много циклов подряд. Без детектора фронта привязанное действие повторялось бы каждый цикл. Детектор выделяет единственный момент изменения, что нужно для счёта событий, обработки кнопок, однократного запуска операций и переключения флагов.

Как посчитать количество нажатий кнопки?

Сигнал кнопки подают на вход CLK блока R_TRIG, а выход Q — на счётный вход счётчика. Счётчик увеличивается на единицу за каждое нажатие. Если завести кнопку на счётчик напрямую, он будет прибавлять на каждом цикле удержания.

Почему для каждого сигнала нужен отдельный экземпляр?

R_TRIG и F_TRIG — функциональные блоки с внутренней памятью предыдущего состояния. Если использовать один экземпляр для нескольких сигналов, их состояния смешаются и фронты будут определяться неверно. Поэтому на каждый отслеживаемый сигнал объявляют свой экземпляр.

Убирает ли R_TRIG дребезг контактов кнопки?

Нет. Детектор фронта реагирует на любой переход, в том числе на ложные из-за дребезга. Подавление дребезга выполняют отдельно — аппаратно или программно (фильтром, таймером выдержки), а детектор фронта применяют уже к очищенному сигналу.

Статья носит ознакомительный характер и не заменяет техническую документацию на используемый контроллер и среду программирования. Конкретный синтаксис, набор стандартных блоков и их поведение при инициализации могут отличаться в разных системах программирования; при разработке следует руководствоваться документацией производителя и действующими стандартами. Автор и издатель не несут ответственности за возможные последствия использования приведённых сведений.

Источники

  1. ГОСТ Р МЭК 61131-3-2016 — Контроллеры программируемые. Часть 3. Языки программирования (идентичен IEC 61131-3:2013).
  2. John K.-H., Tiegelkamp M. IEC 61131-3: Programming Industrial Automation Systems. — Springer (учебник по языкам программирования ПЛК).
  3. Техническая документация систем программирования ПЛК по МЭК 61131-3 — описания стандартных функциональных блоков R_TRIG и F_TRIG.

© Компания Иннер Инжиниринг. Все права защищены.

Появились вопросы?

Вы можете задать любой вопрос на тему нашей продукции или работы нашего сайта.