R_TRIG и F_TRIG: детекторы фронта в ПЛК — АСУ ТП: сообщество инженеров

R_TRIG и F_TRIG: детекторы фронта в ПЛК

Коротко о статье

Статья объясняет работу стандартных блоков МЭК 61131-3 R_TRIG и F_TRIG, которые выдают импульс длительностью один цикл ПЛК при смене состояния входного сигнала. Из неё можно взять правила вызова блоков в ST и FBD и типовые ошибки применения.

Главное
  • R_TRIG срабатывает при переходе входа из 0 в 1, F_TRIG — при переходе из 1 в 0.
  • У обоих блоков есть вход CLK и выход Q, а между вызовами сохраняется предыдущее состояние CLK.
  • В ST блок вызывается через объявленный экземпляр, в FBD — размещается на схеме с подключением CLK и Q.
  • Применяются для пуска/стопа, счёта импульсов, однократного запуска операции и фиксации событий.
  • Выход Q активен один цикл, поэтому для запоминания события после детектора ставят RS-триггер.
  • Нельзя использовать один экземпляр на два сигнала и вызывать блок внутри условия IF.
Термины и технологии
  • МЭК 61131-3
  • R_TRIG
  • F_TRIG
  • CLK
  • Q
  • ST
  • FBD
  • RS-триггер

Кому полезно: Инженеры АСУ ТП, программирующие ПЛК на ST и FBD

По теме на сайте

Выжимка составлена редакцией сайта с помощью ИИ по тексту статьи.

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

В цикле ПЛК программа выполняется многократно, и любое логическое условие остаётся истинным столько, сколько держится сигнал. Если подать это условие напрямую на счётчик, счёт будет расти каждый цикл. Детектор фронта решает эту проблему: он сравнивает текущее значение входа с сохранённым значением из предыдущего цикла и выдаёт Q = TRUE ровно один цикл — в момент изменения [8].

R_TRIG (rising trigger) срабатывает на переходе 0 → 1, F_TRIG (falling trigger) — на переходе 1 → 0. У обоих блоков вход CLK и выход Q. Внутри хранится переменная M — предыдущее состояние CLK. Логика R_TRIG: Q := CLK AND NOT M; затем M := CLK. Логика F_TRIG: Q := NOT CLK AND M; затем M := CLK. Именно сохранение M между вызовами и даёт привязку к фронту, а не к уровню.

На ST блоки вызываются как экземпляры: объявляете переменную типа R_TRIG, затем в теле программы пишете R_TRIG_1(CLK := Start); и используете R_TRIG_1.Q. Экземпляр обязателен — если вызвать блок без него, состояние M негде хранить. На FBD блок просто ставится на схему, вход CLK соединяется с сигналом, выход Q идёт дальше на счётчик, триггер или таймер [1][3][6].

Типовое применение: пуск/стоп, счёт импульсов от кнопки или датчика, однократный запуск операции по появлению сигнала, фиксация события для архива или аларма. В учебных примерах CODESYS детекторы фронта часто стоят в одной схеме с RS-триггером и таймерами [6].

Частая ошибка — использовать выход Q детектора как удержание. Q активен только один цикл, поэтому для запоминания события нужен RS-триггер после детектора. Вторая ошибка — один экземпляр блока на два разных сигнала: состояние M перезапишется, и фронт будет определяться неверно. На каждый сигнал — свой экземпляр. Третья — вызов блока внутри условия IF, из-за чего M обновляется не каждый цикл и фронт теряется.

Материалы сайта по теме

Частые вопросы

Чем R_TRIG отличается от обычного контакта в LAD?

Контакт пропускает сигнал, пока он истинен, то есть много циклов. R_TRIG даёт импульс только на один цикл — в момент появления сигнала.

Почему счётчик считает больше одного раза за нажатие кнопки?

Скорее всего, на вход счётчика подан уровень сигнала, а не выход детектора фронта. Поставьте R_TRIG перед счётчиком.

Нужно ли объявлять экземпляр блока вручную?

Да. R_TRIG и F_TRIG хранят предыдущее состояние, поэтому в ST объявляется переменная типа R_TRIG, и вызов идёт через неё.

Можно ли написать детектор фронта самому?

Да, это две строки на ST: Q := CLK AND NOT M; M := CLK; для переднего фронта. Свой блок удобен, если нужна нестандартная логика [3].

Где взять R_TRIG в CODESYS?

В библиотеке стандартных блоков, в разделе триггеров. На FBD перетаскивается на схему, на ST вызывается как экземпляр.

Остались вопросы?Спросите ИИ-помощника сайта — он ответит по нашим статьям, видеоурокам и книгам.

Оставьте комментарий

Войти

Зарегистрироваться

Сбросить пароль

Пожалуйста, введите ваше имя пользователя или эл. адрес, вы получите письмо со ссылкой для сброса пароля.

Прокрутить вверх