TGViewer
Codesys 3.5 Обучение программированию. Codesys 3.5 Обучение программированию. @codesys4 · 269 subscribers
Post #165 52
⚙️ FUNCTION_BLOCK в CODESYS
📘 Часть 2/3. Почему R_TRIG может выдавать ложные импульсы?

В первой части мы выяснили, что повторные вызовы одного экземпляра ФБ используют общую внутреннюю память.

Теперь рассмотрим ошибку, которую бывает непросто обнаружить при отладке.

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

🧠 Один R_TRIG для двух сигналов

Объявим:

VAR
fbTrig : R_TRIG;
xA : BOOL;
xB : BOOL;
END_VAR


И вызовем один экземпляр для двух сигналов:

fbTrig(CLK := xA);
fbTrig(CLK := xB);


На первый взгляд кажется, что мы просто проверяем два сигнала.

Но R_TRIG хранит предыдущее состояние входа CLK.

Поэтому второй вызов использует память, которая уже изменилась после первого.

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

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

Пусть:

xA = TRUE
xB = FALSE


Перед первым вызовом внутренняя память триггера содержит FALSE.

Первый вызов:

fbTrig(CLK := xA);


Обнаруживается переход:

FALSE → TRUE


Поэтому:

fbTrig.Q = TRUE


Но затем выполняется второй вызов:

fbTrig(CLK := xB);


Теперь вход равен FALSE.

После этого:

fbTrig.Q = FALSE


Если проверить выход после обоих вызовов:

IF fbTrig.Q THEN
// Обработка события
END_IF;


условие не выполнится.

Импульс, сформированный первым вызовом, уже исчез!

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

⚠️ А теперь самое интересное

Предположим, сигналы не меняются:

xA = TRUE
xB = FALSE


В каждом цикле выполняются два вызова.

1️⃣ Первый получает TRUE после предыдущего FALSE и формирует импульс.

2️⃣ Второй получает FALSE и обновляет внутреннюю память.

На следующем цикле ситуация повторяется.

В результате R_TRIG формирует импульс при каждом первом вызове, хотя xA всё время остаётся TRUE.

Это серьёзная логическая ошибка!

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

📌 Вывод

Один экземпляр R_TRIG нельзя использовать как два независимых триггера.

Каждый вызов изменяет его внутреннее состояние.

➡️ В следующей части: как правильно обрабатывать независимые сигналы и какие правила стоит соблюдать при работе с ФБ.

#CODESYS #ПЛК #StructuredText #R_TRIG
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: почему повторный вызов может изменить результат? 📘 Часть 1/2…
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 →