Язык функциональных блоковых диаграмм править

FBD (англ. Function Block Diagram) — графический язык программирования стандарта МЭК 61131-3. Предназначен для программирования программируемых логических контроллеров (ПЛК). Программа образуется из списка цепей, выполняемых последовательно сверху вниз. Цепи могут иметь метки. Инструкция перехода на метку позволяет изменять последовательность выполнения цепей для программирования условий и циклов.

При программировании используются наборы библиотечных блоков и собственные блоки, также написанные на FBD или других языках МЭК 61131-3. Блок (элемент) — это подпрограмма, функция или функциональный блок (И, ИЛИ, НЕ, триггеры, таймеры, счётчики, блоки обработки аналогового сигнала, математические операции и др.).

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

Пример фрагмента программы на FBD:Переменную A разделить на переменную B, результат деления умножить на 2 и записать в переменную result:

        ┌───────┐
        │       │        ┌───────┐
A───────┤       │        │  *    │
        │  /    ├────────┤       ├───result  
        │       │        │       │
B ──────┤       │    2 ──┤       │
        │       │        └───────┘
        └───────┘

Та же самая функция на псевдокоде:

result := 2*(A/B);

При необходимости управления вызовом блоков в них добавляются специальные входы EN (enable) и выходы ENO. Логический ноль на входе EN запрещает вызов блока. Выход ENO используется для индикации ошибки в блоке и позволяет прекратить вычисление остатка цепи.

Язык FBD прост в изучении, нагляден и удобен для прикладных специалистов, не имеющих специальной подготовки в области информатики. Жесткая последовательность выполнения приводит к простой внутренней структуре команд, которая транслируется в быстрый и надежный код. FBD четко отражает взаимосвязь входов и выходов диаграммы. При условии качественной проработки алгоритма с позиции передачи сигналов, его представление в виде FBD диаграммы получается нагляднее чем в текстовых языках программирования[1].

Существует много практических реализаций языка FBD с определенными расширениями или ограничениями. Имеет место практика, при которой различными организациями могут разрабатываться специализированные версии FBD, в том числе оптимизированные для определённых типов программируемых-логических контроллеров. Таким примером может служить язык Canny Function Diagram (CFD), а также расширение языка FBD в среде CoDeSys добавляющее в него методологию объектно-ориентированного программирования[2].

Одним из вариантов FBD является язык программирования CFC (Continuous Function Chart). Он позволяет произвольно задавать порядок выполнения блоков. Диаграммы CFC дают программисту большую свободу действий, но платой за это является несколько большая вероятность допустить ошибку и более объемный код.

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

См. также править

Языки программирования стандарта МЭК 61131-3:

  • LD — Релейно-Контактные Схемы
  • IL — Список Инструкций
  • SFC — Последовательностные Функциональные Диаграммы
  • ST — Структурированный Текст

Ссылки править

Литература править

  • Петров И. В. Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования / Под ред. проф. В. П. Дьяконова . — М.: СОЛОН-Пресс, 2004. — 256 c. ISBN 5-98003-079-4.
  • Минаев И. Г. и др. Программируемые логические контроллеры в автоматизированных системах управления / И. Г. Минаев, В. М. Шарапов, В. В. Самойленко, Д. Г. Ушкур. 2-е изд., перераб. и доп. — Ставрополь: АГРУС, 2010. — 128 с. ISBN 978-5-9596-0670-1.

Примечания править

  1. Лоскутов А. Б., Лоскутов А. А. Зырин Н. В., Шумский Д. В. Программирование ПЛК в CoDeSys / Нижний Новгород: НГТУ. 2018. С. 34—35.
  2. Хесс Д. Объектно-ориентированные расширения МЭК 61131-3 // СТА. 2006. №2. С. 90—92 Архивная копия от 24 января 2022 на Wayback Machine