Язык программирования fbd самоучитель

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

Написанная на данном языке программа для контроллера состоит из некого списка цепей, которые одна за другой выполняются сверху — вниз. Кроме того, здесь имеется возможность присвоения отдельным цепям меток, в этом случае станет доступно использование инструкций перехода на метку, дабы изменять последовательность исполнения цепей, и создавать условия и циклы.

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

Отдельный блок несет на себе конкретную функцию (логическое «и», «не», счетчик и т. д.), при этом один блок может иметь несколько выходов и входов. Изначально значения переменных задаются константами или со специальных входов, а выходы их связываются дальше с другими переменными программы или с выходами ПЛК.

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

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

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

Рассмотрим кусочек программы, написанной на языке FBD: В умножить на 4, затем поделить на А, и записать результат в переменную result. В псевдокоде это будет выглядеть так: result := B*4/A. Возможно также добавление к блокам специальных управляющих входов EN и выходов ENO, для управления вызовами отдельных блоков: логический ноль, поданный на вход EN, запретит вызов данного блока, а выход ENO в случае ошибки сообщит о ней, и прервет тем самым выполнение цепи до конца.

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

Читайте также:  Моя любимая страница в контакте

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

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

Или модификация CFC (Continuous Function Chart), позволяющая установить порядок выполнения диаграмм не просто последовательной цепочкой, а по усмотрению разработчика ПО. С CFC разработчик получает больше свободы, хотя код получается более длинным.

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

Написанная на данном языке программа для контроллера состоит из некого списка цепей, которые одна за другой выполняются сверху — вниз. Кроме того, здесь имеется возможность присвоения отдельным цепям меток, в этом случае станет доступно использование инструкций перехода на метку, дабы изменять последовательность исполнения цепей, и создавать условия и циклы.

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

Отдельный блок несет на себе конкретную функцию (логическое «и», «не», счетчик и т. д.), при этом один блок может иметь несколько выходов и входов. Изначально значения переменных задаются константами или со специальных входов, а выходы их связываются дальше с другими переменными программы или с выходами ПЛК.

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

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

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

Читайте также:  Net use не найдено сетевое имя

Рассмотрим кусочек программы, написанной на языке FBD: В умножить на 4, затем поделить на А, и записать результат в переменную result. В псевдокоде это будет выглядеть так: result := B*4/A. Возможно также добавление к блокам специальных управляющих входов EN и выходов ENO, для управления вызовами отдельных блоков: логический ноль, поданный на вход EN, запретит вызов данного блока, а выход ENO в случае ошибки сообщит о ней, и прервет тем самым выполнение цепи до конца.

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

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

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

Или модификация CFC (Continuous Function Chart), позволяющая установить порядок выполнения диаграмм не просто последовательной цепочкой, а по усмотрению разработчика ПО. С CFC разработчик получает больше свободы, хотя код получается более длинным.

Длиннопост. Речь пойдёт о программировании промышленных логических контроллеров.

Всю свою рабочую жизнь я занимался наладкой автоматических систем управления. Сначала это были только котельные и тепловые пункты, потом ещё разные газоиспользующие установки, а потом дело дошло и до автоматизированных производственных конвейеров, промышленных роботов и прочих прекрасных вещей. Использовал я всякие разные контроллеры. Это были Овен, Сименс, Дельта, Сенека. Просто восьмибитные микроконтроллеры и stm32.

Я всячески избегал FBD. CoDeSys позволял писать программы на паскале-подобном языке (ST). Это было близко и понятно. Хотя я и разбирался в принципиальных электронных схемах, я всё равно не любил использование FBD, уже хотя бы за то, что некоторые вещи просто не знал как реализовать. Использование графических языков всегда занимало массу времени, результат получался ниже среднего.

Где-то год назад я столкнулся с производителем Segnetics. Некоторые их контроллеры можно (сильно извратившись) программировать на плюсах. Однако, для этого надо пройти, как минимум, чистилище, а то и пару кругов ада. Поскольку я не хотел повышать уровень красноглазия – решил использовать стандартные методы, предоставляемые производителем. Нужно было делать несколько проектов для этих контроллеров.

Поначалу раздражало абсолютно всё в этом их SMLogix. Лишь через месяц-другой я начал привыкать. Ещё через месяц – одобрять. Дальше больше. Не могу сказать, что я "подсел" на FBD, но моё отношение к программированию контроллеров изменилось.

Читайте также:  Виды технологий для подключения к сети интернет

К счастью, у меня была возможность получать многие ответы от одного из сотрудников технической поддержки сегнетикса. Это оказался программист, способный сделать на фбд всё, что угодно(спойлер: юзер с самым большим количеством сообщений на их форуме).

После того, как я выполнил несколько реальных проектов на их контроллерах, пришло понимание, почему в лоджике нет возможности писать код внутри блока текстовым языком. Дело не в том, могут они это разрешить или не могут. Дело в том, что это не нужно. Составляя программу на фбд, программист не может прострелить себе ногу. А вот текстовые языки, в большинстве случаев, позволяют это сделать в пару строк, а то и в одну. А ещё бывает, что нога простреливается по незнанию, неумению, невнимательности, и ещё тысяча причин.

Самое главное, на мой взгляд, это знать, какими средствами (блоками) решаются те или иные задачи. Как это делать эффективно и к каким побочным эффектам это приводит. При тщательном подходе и продумыванию структуры проекта – вообще никаких неожиданностей не возникает. Всё будет работать именно так, как запроектировано.

Крутые примеры у меня есть. Приводить их здесь, конечно, не буду. Скажу только, что делал несколько проектов для их сенсорного контроллера. У заказчика были высокие требования к интерфейсу. Это было особенно "болезненно" для меня, так как я никогда не делал серьёзных интерфейсов ранее. Максимум менюшка со списками. А здесь нужно было и анимацию сделать, и всякие жестовые штуки (свайпы, пинчи и прочая вот эта ерунда).

Теперь скажу и о негативной стороне. В частности, когда нет заводской "из коробки" поддержки жестов – приходится танцевать с бубном в этом fbd. Не сказал бы, что реализация нормального "драйвера тач скрина" на фбд невозможна. Да, это не просто, но это выполнимо, и в конечном итоге, работает адекватно. В целом, новый продукт хоть и понравился, но софт заточен под старое. Что ж, лично я буду надеяться, что они-таки выпустят что-то новое, в плане приклада.

В итоге, вся вот эта простыня, написанная выше, написана с целью донести одну мысль: если есть задача программирования ПЛК и подобных задач, без всякой сложной математики, работы с базами данных и прочее – FBD подходит идеально. Время разработки программы сокращается, заработок в час растёт. А когда объект налажен и работает без сбоев – все довольны.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector