Язык fbd в codesys
Общие сведения о языке FBD¶
FBD (Function Block Diagram) – это графический язык программирования высокого уровня, обеспечивающий управление потока данных всех типов. Позволяет использовать мощные алгоритмы простым вызовом функций и функциональных блоков. Удовлетворяет непрерывным динамическим процессам. Замечательно подходит для небольших приложений и удобен для реализации сложных вещей подобно ПИД регуляторам, массивам и т. д. Данный язык может использовать большую библиотеку блоков, описание которых приведено в приложении 2. FBD заимствует символику булевой алгебры и, так как булевы символы имеют входы и выходы, которые могут быть соединены между собой, FBD является более эффективным для представления структурной информации, чем язык релейно-контактных схем.
Основные понятия и конструкции языка¶
Согласно IEC 611313, основными элементами языка FBD являются: переменные, функции, функциональные блоки и соединения.
Переменные бывают входные, выходные и входные/выходные. На рис. 1 показаны: входная переменная – «in_var», выходная переменная – «out_var» и входная/выходная переменная – «in_out_var».
Рис. 1 – Изображение переменной в языке FBD
Графическое изображение функции приведено на рис. 2. С левой стороны располагаются входы (IN1 и IN2), с правой стороны выходы (OUT).
Рис. 2 – Изображение функции в языке FBD
Аналогично, изображение функционального блока, приведённое на рис. 3, имеет с левой стороны входы (S1 и R), с правой стороны выход (Q1).
Рис. 3 – Изображение функционального блока в языке FBD
Соответственно, переменные соединяются с входными и выходными параметрами функций и функциональных блоков. Входные переменные могут быть соединены только с входными параметрами функции или функционального блока, выходные переменные – только с выходными параметрами функции или функционального блока, входные/выходные переменные – как входами, так и с выходами функции или функционального блока. Также выходной параметр одной функции или функционального блока может быть напрямую соединён с входным параметром другого.
Рис. 4 – Пример соединения переменных, функций и функциональных блоков
Все функциональные блоки могут быть вызваны с дополнительными (необязательными) формальными параметрами: EN (входом) и ENO (выходом). Пример такого функционального блока приведен на рис. 5.
Рис. 5 – Изображение элементарного функционального блока с параметрами EN/ENO
Если функциональный блок вызывается с параметрами EN/ENO и при этом значение EN равно нулю, то алгоритмы, определяемые в функциональном блоке, не будут выполняться. В этом случае значение ENO автоматически устанавливается равным 0. Если же значение EN равно 1, то алгоритмы, определяемые функциональным блоком, будут выполнены. После выполнения этих алгоритмов без ошибок значение ENO автоматически устанавливается равным 1. Если же возникает ошибка во время выполнения этих алгоритмов, то значение ENO будет установлено равным 0. Поведение функционального блока одинаково как в случае вызова функционального блока с EN = 1, так и при вызове без параметров EN/ENO.
Для более компактного соединения входов и выходов различных функций и функциональных блоков используются элементы «Соединение», показанные на рис. 6:
Рис. 6 – Изображение соединений в языке FBD
Они бывают двух видов: входное соединение и выходное выходные соединение. Основная задача соединений – передать значение из одного выхода на другой вход без прямого соединения выхода и входа. На рис. 5.7 показан пример, в котором выходное значение OUT функции BOOL_TO_INT передаётся на вход IN2 функции ADD:
Рис. 7 – Пример использования соединения на FBD диаграмме
Пример программы на языке FBD¶
На рис. 8 приведена FBD диаграмма, состоящая из следующих функциональных блоков: SR0, AND, TP0.
Рис. 8 – пример FBD диаграммы
Функциональный блок SR0 представляет собой Бистабильный SR-триггер. У него имеются входы S1, R1 и выход Q1, а так же дополнительный вход EN и выход ENO, позволяющие включать и выключать выполнение SR0. Выход Q1 с помощью соединён с входом IN1 блока AND, представляющий собой «Логическое И». Вход IN2 типа BOOL соединён с литералом «BOOL#1», который всегда положительный. Выход OUT блока AND соединён с входом IN функционального блока TP0, представляющий собой повторитель импульсов. Вход PT типа TIME, соединён с литералом «T#5s», который задаёт значение 5 секунд.
Если после запуска выполнения данного функционального блока enabled равно True и переменная S1_IN тоже True, функциональный блок SR0 начинает выполняться. На выходе OUT функционального блока AND будет значение True как только Q1 у SR0 будет равен True. Следовательно, как только OUT становится True вход IN функционального блока TP0 принимает тоже True и начинается отсчёт таймера ET (см. рис. 9).
Рис. 9 – Выполнение FBD диаграммы
Пока данный таймер не достигнет значения PT выход Q у функционального блока TP0 будет равен True. При достижении таймером ET значения PT, т.е. через 5 секунд выход Q становится False (см. рис. 10).
Рис. 10 – Выполнение FBD диаграммы
Как только вход IN функционального блока TP0 становится значения FALSE, счётчик ET сбрасывается в T#0s.
Язык функциональных блоковых диаграмм (FBD) и его применение
Написанная на данном языке программа для контроллера состоит из некого списка цепей, которые одна за другой выполняются сверху — вниз. Кроме того, здесь имеется возможность присвоения отдельным цепям меток, в этом случае станет доступно использование инструкций перехода на метку, дабы изменять последовательность исполнения цепей, и создавать условия и циклы.
Таким образом, программа, написанная на графическом языке 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 разработчик получает больше свободы, хотя код получается более длинным.
Мы планируем развивать эту тему здесь:
Structured Text
Книга «Изучаем Structured Text МЭК 61131-3»: Ссылка на книгу
Любите умные гаджеты и DIY? Станьте специалистом в сфере Internet of Things и создайте сеть умных гаджетов!
Записывайтесь в онлайн-университет от GeekBrains:
Изучить C, механизмы отладки и программирования микроконтроллеров;
Получить опыт работы с реальными проектами, в команде и самостоятельно;
Получить удостоверение и сертификат, подтверждающие полученные знания.
Starter box для первых экспериментов в подарок!
После прохождения курса в вашем портфолио будет: метостанция с функцией часов и встроенной игрой, распределенная сеть устройств, устройства регулирования температуры (ПИД-регулятор), устройство контроля влажности воздуха, система умного полива растений, устройство контроля протечки воды.
Вы получите диплом о профессиональной переподготовке и электронный сертификат, которые можно добавить в портфолио и показать работодателю.
Язык непрерывных функциональных схем CFC. Часть 1
Пять основных языков программирования (ST, SFC, FBD, LD, IL), установленных стандартом МЭК 61131-3, используются при написании программ для логических контроллеров. В дополнение к ним CODESYS предлагает язык непрерывных функциональных схем (CFC). Редактор языка и сама его структура интуитивно понятна. Для написания программ не требуется специальных знаний. Именно поэтому CFC является языком выбора для начинающих программистов.
Начиная с 1993 года стандартом IEC 61131-3 (МЭК 61131-3) определено пять основных языков (ST, SFC, FBD, LD, IL) для программирования логических контроллеров. Из них наиболее простым в изучении и удобным в работе является графический язык FBD.
Некоторые компании для облегчения программирования внедряют в свои программные продукты языки, не входящие в стандарт МЭК. Например, CODESYS использует язык непрерывных функциональных схем (CFC), как вариант языка FBD. Язык удобен для прикладных специалистов, не имеющих специальной подготовки в области информатики.
Принципиальное отличие CFC от FBD заключается в том, что в редакторе CFC размещать компоненты программы (функциональные и логические блоки) и задавать порядок их выполнения можно произвольным образом. Такие возможности позволяют легко реализовывать обратные связи, что удобно при разработке схем регулирования. При создании программ на CFC необходимо вручную выстраивать связи между элементами, в то время как на FBD соединения выполняются автоматически.
Свойства редактора CFC
Существуют две разновидности редактора CFC: стандартный (рис. 1) и страничный (рис. 2). Выбрать тип редактора можно при создании нового проекта или при добавлении POU (компонент организации программы) в уже существующий проект
Рис. 1
Рис. 2
Страничный тип редактора CFC удобен при создании проектов, содержащих большое количество последовательно выполняющихся частей программы. Постраничное размещение программы позволяет быстро переключаться между ее разделами, акцентировать внимание только на необходимых элементах, снижает риск построения ошибочных связей и делает проект интуитивно понятным. При работе программы страницы выполняются последовательно, а передача информации с одной страницы на другую осуществляется с помощью меток соединения.
Стандартный тип редактора CFC более популярен среди пользователей, так как обладает рядом преимуществ: наглядность представления кода (все блоки и связи между ними расположены на единой рабочей области), не требуется переключения между страницами, что позволяет избежать лишних действий при написании кода.
Важно помнить, что стандартный и страничный типы редактора не конвертируются один в другой.
Общие свойства блоков
Программа на языке CFC начинается с добавления блоков на рабочую область редактора. Нужный блок добавляется мышкой с панели инструментов.
Блоки имеют фиксированное значение входных и выходных контактов. Можно добавить дополнительные контакты с панели инструментов Входной и Выходной контакт или из пункта: Контакты, контекстного меню, вызываемого нажатием ПКМ на рабочей области редактора.
При работе с большим числом ФБ могут остаться не задействованными входные/выходные контакты. Для компактности программы их можно удалить. При необходимости удаленные контакты всегда можно восстановить функцией сброс контактов. Операции удаления и сброса контактов выполняются аналогично добавлению входных и выходных контактов, а также при помощи соответствующих кнопок на панели инструментов. Чтобы поменять порядок входных/выходных контактов, необходимо их удалить, а потом заново добавить в нужном порядке.
После создания блока начинается этап создания входов и выходов путем перемещения их с панели инструментов. Если блок имеет два-три входных/выходных контакта, то операция занимает мало времени. Если у блока большое число контактов, то потребуется оптимизировать процесс. Необходимо выделить входной или выходной контакт блока и начать вводить имя переменной или константу. Таким образом выход будет добавляться автоматически столько раз, сколько потребуется (рис. 3).
Существует еще один способ добавления входа/выхода блока сразу с переменной. Для этого переменные задаются в разделе программы VAR: выделяется имя переменной и перемещается к нужному входному или выходному контакту блока.
При формировании логики программы блоки добавляются, как правило, в произвольном порядке и так же строятся связи между ними. Это приводит к тому, что нумерация блоков отличается от последовательности их расположения (порядка выполнения) (рис. 4). Чтобы соблюсти очередность выполнения (рис. 5), нужно перед запуском программы нажать ПКМ на рабочем поле редактора CFC и в меню Порядок выполнения, выбрать пункт Упорядочить в соответствии с потоком данных.
Рис. 4
Рис. 5
В версии CODESYS V3.5 SP15 появилась новая опция – автоматическая нумерация блоков в соответствии с потоком данных. Теперь элементы можно добавлять на рабочую область редактора в любом порядке и как угодно перемещать. Автоматическая нумерация элементов программы установлена по умолчанию. Вместе с тем сохранена нумерация элементов в режиме заданного порядка выполнения. Переключаться между режимами можно из свойств POU на вкладке: Порядок выполнения CFC. Посмотреть номера элементов при автоматической нумерации (рис. 6) можно из пункта контекстного меню Порядок выполнения с помощью кнопки Показать порядок выполнения или с помощью этой же кнопки, расположенной на панели инструментов.
Функциональные блоки и структуры
При работе с ФБ, имеющими большое количество входов/выходов, или структурами, содержащими большое количество переменных, удобно использовать компоновщик и селектор (рис. 7), которые находятся на панели инструментов.
Компоновщик упаковывает входы ФБ или структуры, а селектор распаковывает в отдельные выходы, таким образом заменяется большое количество близко расположенных линий связи на одну. Такой подход позволяет избежать ошибок и ускорить процесс компоновки и перемещения блоков, а также экономит место на рабочей области редактора и делает код программы нагляднее.
Линии связи
Для построения линии связи между двумя элементами нужно соединить контакты двух блоков. В редакторе CFC реализован ряд полезных функций по построению линий свиязи. Функция автосоединения линий связи по умолчанию активна, ее можно включить или отключить в меню Инструменты, пункт Опции. Для автосоединения необходимо вплотную приблизить контакты элементов. Существует поддержка параллельной связи от одного элемента к многим другим (рис. 3).
Если линия связи целиком не умещается на экране монитора, нужно выделить один из контактов линии связи (зажать клавишу + нажать стрелку ), тогда рабочая область сама сдвинется к входным или выходным контактам.
Для того чтобы избежать проблем из-за наличия большого количества линий связи, в стандартном редакторе CFC используют соединительные метки (рис. 8). Единственная задача меток – заменить длинные нечитаемые линии связи. Соединительные метки можно установить с панели инструментов. Сначала добавляется метка выхода (ей автоматически присваивается идентификационный номер), затем добавляется метка входа, и ей присваивается соответствующий номер. Заменить линию связи метками можно в пункте Метка соединения контекстного меню, вызываемого нажатием ПКМ на самой линии или на соответствующем входе/выходе. Аналогичным образом можно восстановить линию из меток.
В страничном редакторе CFC нельзя добавить соединительную метку на рабочую область (заменить ими линии связи), так как они выполняют другую задачу. Соединительные метки служат входами и выходами на страницах проекта – осуществляют передачу данных с одной страницы на другую (рис. 9). Метки добавляются не на рабочей области, что улучшает наглядность проекта и экономит место непосредственно на рабочей области редактора.
Оформление и компоновка программ
В редакторе CFC существует возможность печати проекта с двумя типами подгонки – Постер и Страница, выбрать один из них можно в меню Инструменты, в пункте Опции. По умолчанию стоит печать постером. Перед печатью проекта можно выполнить его предварительный просмотр в пункте Файл.
Во второй части статьи речь пойдет о реализации условий на языке CFC; особенностях работы с элементами, охваченными обратной связью; свойствах раздела VAR_INPUT CONSTANT в ФБ; кастомизации проектов и других важных особенностях работы с CFC.
© Автоматизация и Производство, 2021. Все права защищены. Любое использование материалов допускается только с согласия редакции. За достоверность сведений, представленных в журнале, ответственность несут авторы статей.
Издание зарегистрировано Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций. Свидетельство о регистрации средств массовой информации ПИ № ФС77-68720.
Примеры простых программ для ПЛК в CodeSys на языке релейных диаграмм
Ранее по этой теме мы рассматривали несколько типовых решений в программах для ПЛК, которые могут использоваться для управления электродвигателями: Схемы пуска электродвигателя на языке лестничных диаграмм LD для ПЛК
В этой подборке рассмотрена автоматизация следующих процессов:
Автоматическая система для отбрасывания бутылок;
Автоматический выбор цвета краски;
Автоматизация вентиляционной системы.
Все программы написаны в CodeSys на языке релейных диаграмм, в англоязычном варианте это язык Ladder Diagram, сокращенно LD.
Автоматическая система для отбрасывания бутылок
Принцип работы: данная система позволяет отбрасывать упавшие бутылки, которые затрудняют процесс производства.
Схема технологического процесса:
Ленточный конвейер используется для перемещения бутылок с одной станции на другую. Но прежде чем бутылки попадут на заправочную станцию, необходимо сделать все бутылки стоящими для дальнейшего их заполнения. Упавшая бутылка на конвейере может создать проблему в следующем процессе, поэтому здесь показана простая программа для ПЛК, которая обрабатывает с конвейера упавшую бутылку.
Этот процесс осуществляется с помощью датчиков и исполнительных механизмов. Когда конвейер работает, все бутылки перемещаются с одной станции на другую для последующего процесса. Для обнаружения стоящих и упавших бутылок используются два датчика и один пневматический цилиндр для выталкивания упавшей бутылки с конвейера.
Программа на языке релейных диаграмм для ПЛК в CodeSys автоматической системы отбраковки бутылок:
Программа в режиме эмуляции:
Описание работы программы:
Нажимаем кнопку «START» тем самым питая схему. Запускается цикл и конвейер. Во второй части цепи находится два индукционных датчика «Х1» и «Х2», с помощью которых и определяется положение бутылки на конвейере. Когда бутылка упала срабатывает датчик «Х2» и его контакт разрывает цепь тем самым, не пропуская упавшую бутылку.
Когда бутылки перемещаются по конвейеру, эти датчики определяют положение бутылок независимо от того, стоят они или упали. Датчик X2 определяет нижнее положение бутылки, а датчик X1 верхнее положение бутылки. Если датчик X2 определяет бутылку, а датчик X1 не определяет, то включается пневматический привод ( Cilinder ), и он отбросит бутылку с конвейера. После этого остальные бутылки попадут на станцию розлива воды и весь цикл будет завершен.
Процесс сброса бутылки:
Автоматический выбор цвета краски
Принцип работы: в данном процессе нужно было реализовать автоматический выбор краски нужного цвета для заполнения.
Схема технологического процесса:
Здесь мы должны заполнить различные краски в банке согласно требованию. Итак, рассмотрим 3 типа краски разных цветов (желтый, синий и зеленый). Два клапана используются для подачи краски.
Селекторный переключатель используется для выбора цвета в системе, а переключатель ON/OFF используется для остановки системы.
Программа для ПЛК в CodeSys:
Описание работы программы:
Когда переключатель ВКЛ/ВЫКЛ (I2.0) находится в положении ВКЛ и нажата кнопка START, загорается лампа CYCLEON. Если цикл включен и выбрана краска желтого цвета ( YELLOWPIGMENTSELECTION ), клапан управления желтого цвета ( YELLOWCONTROLVALVE ) будет включен. Если цикл включен и выбрана краска синего цвета (BLUEPIGMENTSELECTION), клапан управления синим цветом (BLUECONTROLVALVE) будет включен. Если выбрана краска зеленого цвета (GREENPIGMENTSELECTION), оба клапана будут включены, а краска станет зеленого цвета.
Программа в режиме эмуляции (заполнение бутылки краской зеленого цвета):
Автоматизация движения механизма в функции пути
Автоматизация вентиляционной системы
Программа ПЛК для системы управления вентиляторами для промышленности.
Предположим, что вентилятор 2 и вентилятор 3 работают, и один из них выходит из строя, тогда вентилятор 1 должен включаться автоматически, т.е. в любой момент времени должны работать два вентилятора. В случае неисправности любых двух вентиляторов входное питание системы должно автоматически отключаться.
Состояние «ВКЛ» вентиляторов, а также состояние основного питания должно указываться соответствующим светодиодом. Если есть неисправность с более чем одним вентилятором, то это остсояние должно указываться мигающим светодиодом с частотой 5 Гц. Неисправность с одним вентилятором или отсутствие неисправности с вентилятором должны указываться постоянным светом на индикаторе состояния неисправности.
Это простой пример блока управления вентиляторами, используемый в промышленности.
Программа для ПЛК в CodeSys:
Когда цикл включен (CYCLEK) и неисправностей вентилятора 2 и вентилятора 3 нет, то вентилятор 2 (FAN2) и вентилятор 3 (FAN3) будут включены. Если вентилятор 2 или вентилятор 3 неисправен, то будет запущен вентилятор 1 (FAN1).
В системе, если какие-либо два вентилятора из трех неисправны, то лампа индикации неисправности (FIND) начнет мигать с частотой 5 Гц. Для этого нужно использовать специальный таймер, но чтобы не усложнять программу ограничимся пока в ней отдельным контактом. Индикаторные лампы для вентилятора 1, вентилятора 2 и вентилятора 3 включаются в соответствии с сигналом неисправности.
Программа в режиме эмуляции (случай поломки вентилятора 3):
Все приведенные выше программы являются очень простыми и в первую очередь предназначены для получения базовых знаний при изучении языка релйных диаграмм. В следующих статьях мы рассмотрим более сложные примеры.
Structured Text
Книга «Изучаем Structured Text МЭК 61131-3»: Ссылка на книгу
Любите умные гаджеты и DIY? Станьте специалистом в сфере Internet of Things и создайте сеть умных гаджетов!
Записывайтесь в онлайн-университет от GeekBrains:
Изучить C, механизмы отладки и программирования микроконтроллеров;
Получить опыт работы с реальными проектами, в команде и самостоятельно;
Получить удостоверение и сертификат, подтверждающие полученные знания.
Starter box для первых экспериментов в подарок!
После прохождения курса в вашем портфолио будет: метостанция с функцией часов и встроенной игрой, распределенная сеть устройств, устройства регулирования температуры (ПИД-регулятор), устройство контроля влажности воздуха, система умного полива растений, устройство контроля протечки воды.
Вы получите диплом о профессиональной переподготовке и электронный сертификат, которые можно добавить в портфолио и показать работодателю.