TGViewer
Codesys 3.5 Обучение программированию. Codesys 3.5 Обучение программированию. @codesys4 · 270 subscribers
Post #166 60
⚙️ FUNCTION_BLOCK в CODESYS
📘 Часть 3/3. Как избежать ошибок повторного вызова ФБ?

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

Теперь разберём правильное решение.

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

✅ Отдельный экземпляр для каждого сигнала

Если необходимо обнаруживать передний фронт двух независимых сигналов, создаём два экземпляра:

VAR
fbTrigA : R_TRIG;
fbTrigB : R_TRIG;

xA : BOOL;
xB : BOOL;
END_VAR


Вызываем их отдельно:

fbTrigA(CLK := xA);
fbTrigB(CLK := xB);


Теперь каждый экземпляр хранит собственное предыдущее состояние входа.

fbTrigA отслеживает xA.

fbTrigB отслеживает xB.

Сигналы не влияют друг на друга через внутреннюю память триггера.

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

🏭 Где это особенно важно?

Повторные вызовы могут создавать проблемы при использовании:

• таймеров TON, TOF, TP
• триггеров R_TRIG, F_TRIG
• счётчиков CTU, CTD
• автоматов состояний
• блоков управления оборудованием
• блоков обмена по Modbus
• собственных ФБ с внутренней памятью

Особенно внимательно нужно относиться к экземплярам, используемым в нескольких частях программы.

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

🔧 Можно ли вызывать один ФБ несколько раз?

Да, можно!

Сам по себе повторный вызов не запрещён.

Иногда такое поведение используется намеренно.

Но важно понимать:

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

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

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

💡 Практическая рекомендация

Для обычных циклических ФБ полезно придерживаться правила:

Один экземпляр — один вызов за цикл задачи.

Это не обязательное требование языка, а рекомендация по организации программы.

Так проще:

• контролировать последовательность выполнения
• диагностировать ошибки
• анализировать внутреннее состояние
• сопровождать программу
• изменять алгоритм

Если один алгоритм нужен нескольким независимым объектам, создавайте отдельные экземпляры ФБ.

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

📌 Главное

FUNCTION_BLOCK — программный объект с собственной памятью.

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

Два вызова одного ФБ ≠ два независимых ФБ.

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

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

💬 Вопрос к инженерам

Сталкивались ли вы с ситуациями, когда один экземпляр ФБ вызывался из нескольких мест программы?

Какие ошибки это вызывало?

Поделитесь опытом в комментариях 👇

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

📤 Поделитесь статьёй!

Если материал оказался полезным, перешлите все три части друзьям и коллегам, которые программируют ПЛК.

🔁 Репостните материал в профильный чат или канал — возможно, он поможет другим инженерам избежать ошибок.

📚 Больше материалов по CODESYS:
https://t.me/codesys4

#CODESYS #ПЛК #АСУТП #StructuredText #FUNCTION_BLOCK
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 📘 Часть 2/3. Почему R_TRIG может выдавать ложные импульсы? В…
  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 →