Основы языка fbd реферат

Обновлено: 30.06.2024

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

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

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

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

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

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

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

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

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

FBD (Function Block Diagram) – это графический язык программирования высокого уровня, обеспечивающий управление потока данных всех типов. Позволяет использовать мощные алгоритмы простым вызовом функций и функциональных блоков. Удовлетворяет непрерывным динамическим процессам. Замечательно подходит для небольших приложений и удобен для реализации сложных вещей подобно ПИД регуляторам, массивам и т. д. Данный язык может использовать большую библиотеку блоков, описание которых приведено в приложении 2. FBD заимствует символику булевой алгебры и, так как булевы символы имеют входы и выходы, которые могут быть соединены между собой, FBD является более эффективным для представления структурной информации, чем язык релейно-контактных схем.

Основные понятия и конструкции языка¶

Согласно IEC 61131­3, основными элементами языка FBD являются: переменные, функции, функциональные блоки и соединения.

image1

Рис. 1 – Изображение переменной в языке FBD

Графическое изображение функции приведено на рис. 2. С левой стороны располагаются вхо­ды (IN1 и IN2), с правой стороны выходы (OUT).

image2

Рис. 2 – Изображение функции в языке FBD

Аналогично, изображение функционального блока, приведённое на рис. 3, имеет с левой стороны вхо­ды (S1 и R), с правой стороны выход (Q1).

image3

Рис. 3 – Изображение функционального блока в языке FBD

image4

Рис. 4 – Пример соединения переменных, функций и функциональных блоков

Все функциональные блоки могут быть вызваны с дополнительными (необязатель­ными) формальными параметрами: EN (входом) и ENO (выходом). Пример такого функционального блока приведен на рис. 5.

image5

Рис. 5 – Изображение элементарного функционального блока с параметрами EN/ENO

Если функциональный блок вызывается с параметрами EN/ENO и при этом значе­ние EN равно нулю, то алгоритмы, определяемые в функциональном блоке, не будут вы­полняться. В этом случае значение ENO автоматически устанавлива­ется равным 0. Если же значение EN равно 1, то алгоритмы, опреде­ляемые функциональным блоком, будут выполнены. После выполнения этих алгоритмов без ошибок значение ENO автоматически устанавливается равным 1. Если же возникает ошибка во время выполнения этих алгоритмов, то значение ENO будет установлено равным 0. Поведение функционального блока одинаково как в случае вызова функционального блока с EN = 1, так и при вызове без параметров EN/ENO.

image6

Рис. 6 – Изображение соединений в языке FBD

Они бывают двух видов: входное соединение и выходное выходные соединение. Основная задача соединений – передать значение из одного выхода на другой вход без прямого соединения выхода и входа. На рис. 5.7 показан пример, в котором выходное значение OUT функции BOOL_TO_INT передаётся на вход IN2 функции ADD:

image7

Рис. 7 – Пример использования соединения на FBD диаграмме

Пример программы на языке FBD¶

На рис. 8 приведена FBD диаграмма, состоящая из следующих функциональных блоков: SR0, AND, TP0.

image8

Рис. 8 – пример FBD диаграммы

Если после запуска выполнения данного функционального блока enabled равно True и переменная S1_IN тоже True, функциональный блок SR0 начинает выполняться. На выходе OUT функционального блока AND будет значение True как только Q1 у SR0 будет равен True. Следовательно, как только OUT становится True вход IN функционального блока TP0 принимает тоже True и начинается отсчёт таймера ET (см. рис. 9).

image9

Рис. 9 – Выполнение FBD диаграммы

Пока данный таймер не достигнет значения PT выход Q у функционального блока TP0 будет равен True. При достижении таймером ET значения PT, т.е. через 5 секунд выход Q становится False (см. рис. 10).

image10

Рис. 10 – Выполнение FBD диаграммы

Ахмерова Алия Ниязовна – старший преподаватель кафедры Систем автоматизации и управления технологическими процессами Казанского национального исследовательского технологического университета.

Аннотация: В статье рассмотрены языки FBD и LD международного стандарта МЭК 61131 для программируемых логических контроллеров. Приведены факторы, влияющие на выбор языка программирования. Рассмотрена реализация программного кода одной и той же задачи на двух графических языка стандарта МЭК 61131 - LD и FBD в среде CoDeSys.

Ключевые слова: Программируемые логические контроллеры, стандарт МЭК-61131, FBD, LD, CoDeSys.

Современные ПЛК (программируемые логические контроллеры) являются ключевым элементом системы управления объектом. Для создания пользовательской программы, задающей алгоритм работы ПЛК, используются специальные языки программирования, регламентированные стандартом МЭК 61131. Так же существуют международный стандарт IEC 61131 и соответствующий европейский стандарт EN 61131. Сам стандарт включает в себя как общие понятия, которые уже применяются при программировании ПЛК, так и дополнительные новые методы программирования, а так же определяет архитектуру, параметры аппаратных средств, организацию коммуникационной подсистемы [1].

МЭК 61131 представляет собой международный стандарт, состоящий из 9 частей, для программируемых контроллеров и связанных с ними периферийных устройств.

МЭК 61131-3 является скорее руководством для программирования ПЛК, а не жестким набором правил, которые необходимо неукоснительно соблюдать.

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

На сегодняшний день существуют различные инструментальные среды разработки программ для контроллеров. К инструментальным средам программирования на языках МЭК 61131-3 относятся: ISaGRAF, CoDeSys, MULTIPROG, SIMATIC STEP 7, OpenPCS, SOFTLOGIC, Concept и др.

Рассмотрим особенности применения базовых языков программирования FBD и LD в среде CoDeSys.

Объектами языка программирования LD являются контакты, катушки и FFB (функции и функциональный блоки), с помощью которых задается структура секции ПЛК. Эти объекты взаимосвязаны через фактические параметры или связи.

Внешний вид LD-секции представлен в виде ступеней. На рисунке 1 приведен фрагмент программы управления освещением в помещении в редакторе LD в CoDeSys.

Рисунок 1. Фрагмент программы в редакторе LD.

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

Другим недостатком является то, что по мере роста объема программного кода, становится сложно читать и интерпретировать сам код из чего следует, что реализация процесса управления от и до на языке релейно-контактных схем - трудная задача [2].

На рисунке 2 приведен фрагмент программы управления освещением в помещении, реализованной уже в редакторе FBD.


Рисунок 2. Фрагмент программы в редакторе FBD.

При программировании на данном языке применяются наборы стандартных библиотек, а так же могут быть использованы собственные функциональные блоки, написанные на языке FBD, на других языках стандарта МЭК 61131-3 или же на языке С. Подобные блоки могут быть многократно использованы в разных частях программы. FBD заимствует символику булевой алгебры.

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

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

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

Также при создании программы на языке FBD требуется предварительная проработка программы в виде четкого прописывания алгоритма работы перед тем, как начать писать код, так как потом будет достаточно сложно внести изменения [2].

Вывод: Каждый из выше рассмотренных языков имеет свои достоинства и недостатки. Если необходимо решить задачу с применением цифровых входов/выходов или же реализовать алгоритм управления для базовых процессов, то подходят оба языка. В то же время LD обеспечивает легкость смены кода впоследствии, в отличие от FBD. Последний, в свою очередь, подходит для работы с непрерывными процессами.

Язык FBD (Function Block Diagram) – графический язык программирования высокого уровня, обеспечивающий управление потоками данных всех типов. Позволяет использовать очень мощ­ные алгоритмы простым вызовом функций и функциональных блоков. Удовлетворяет непрерывным динамическим процессам. Замечателен для небольших приложений. Хорош для сложных ве­щей подобно ПИД регуляторам, массивам и т. д. Имеет большую библиотеку блоков. FBD заимствует символику булевой алгебры и, так как булевы символы имеют входы и выходы, которые могут быть соединены между собой, FBD является более эффективным для представления структурной информации, чем язык релейно-контактных схем.

Объекты языка FBD:

EFB (Elementary Function Block) – элементарные функции и элементарные функциональные блоки; они находятся в библиоте­ках. Логика обработки в EFB (программа) написана на языке С и не может быть изменена в редакторе FBD. Изменять можно только параметры блоков;

DFB (Derived Function Block) – функции и функциональные блоки пользователя; они конструируются пользователем из EFB;

UDEFB (User Defined Elementary Function Block) – разработан­ные пользователем на языке С; они оформляются как объекты библиотек.

Для EFB, DFB и UDEFB принято общее обозначение – FFB (Functions/Function Block). Каждый из перечисленных объектов представляет собой подпро­грамму, которая помещается в одну из библиотек, используемых при разработке программы работы ПЛК. Таким образом обеспечи­вается возможность вызова и хранения FFB в форме библиотек.

Разработка программы для ПЛК осуществляется с помощью гра­фического редактора FBD посредством формирования блок-схемы из перечисленных выше FFB, которые объединяются друг с другом ли­бо посредством внешних (фактических) параметров FFB (перемен­ные, соответствующие входам и выходам FFB), т. е. таблично, либо непосредственно линиями связи – графическими связями. Редактиро­вание обычно выполняется с помощью мыши или клавиатуры.

Последовательность (очередность) обработки отдельных FFB в программе (в каждой FBD-секции) определяется потоком данных внутри секции.

Теоретически каждая секция может включать любое число FFB и, соответственно, любое число входов и выходов. Однако жела­тельно разделить сложную программу на ряд логических единиц, т. е. на различные секции.

В дополнение к перечисленным выше объектам языка FBD ре­дактор позволяет поместить текст (комментарий) в секцию FBD. На рисунке 8.1 приведен общий вид секции FBD.


Рисунок 8.1 – Представление секции FBD

Элементарные функции и функциональные блоки – ЕFВ

Элементарные функции (EF) не имеют внутренних состояний. Если входные значения одинаковы, значение выхода будет одинаковым для всех вызовов функции (например, сложение двух значений дает одинаковый результат при каждом вызове).

Элементарная функция представляется графически как рамка со входами и одним выходом. Эти входы всегда располагаются слева от рамки, а выход справа.

Название функции, например, тип функции, изображается в центре рамки.

Номер выполнения функции показан справа от типа функции.

Счетчик функции показан над рамкой. Счетчик функции это порядковый номер функции в текущей секции. Счетчики функции не могут изменяться.


Рисунок 8.2 – Графическое изображение элементарной функции

Графическое изображение элементарной функции приведено на рис. 8.2.

Функции не имеют внутренних состояний (условий) – это ком­бинационные схемы. Одним и тем же значениям входных величин будут соответствовать одни и те же значения величин на выходе для всех (неоднократных) исполнений функций. Например, функ­ция сложения двух величин обеспечивает тот же самый результат при каждом (неоднократном) исполнении.

Элементарные функциональные блоки (EFB) имеют внутренние состояния. Если входы имеют одинаковые значения, значение выхода может быть разным для каждого выполнения (например, в счетчике, значение выхода увеличивается на 1).

Функциональные блоки могут иметь более одного выхода.

Название функционального блока, например, тип функционального блока, изображается в центре рамки.

Номер выполнения функционального блока показан справа от типа функционального блока. Имя экземпляра показано над рамкой. Имя экземпляра является уникальным идентификатором для функционального блока в проекте. Имя экземпляра создается автоматически и имеет следующую структуру: FBI_n

FBI = Экземпляр Функционального Блока

n = порядковый номер функционального блока в проекте

Это автоматически генерируемое имя может быть изменено для наглядности. Имя экземпляра (максимум 32 символа) должно быть уникальным в пределах всего проекта и не является чувствительным к регистру. Имя экземпляра должно соответствовать общим соглашениям об именовании.

Графическое изображение элементарного функционального блока приведено на рис. 8.3. С левой стороны располагаются вхо­ды, с правой – выходы.


Рисунок 8.3 – Графическое изображение элементарного функционального блока

Все FFB могут быть вызваны с дополнительными (необязатель­ными) формальными параметрами: EN (входом) и ENO (выходом).

Конфигурирование (включение или выключение) параметров EN и ENO осуществляется в диалоговом окне Property (свойства) FFB, которое вызывается посредством команд Object, Property (Объекты, Свойства), или двойным нажатием левой клавиши (ЛК) мыши на изображении FFB.

Если FFB вызывается с параметрами EN/ENO и при этом значе­ние EN равно нулю, то алгоритмы, определяемые FFB, не будут вы­полняться. В этом случае значение ENO автоматически устанавлива­ется равным 0. Если же значение EN равно 1, то алгоритмы, опреде­ляемые FFB, будут выполнены. После выполнения этих алгоритмов без ошибок значение ENO автоматически устанавливается равным 1. Если же возникает ошибка во время выполнения этих алгоритмов, то значение ENO будет установлено равным 0.

Поведение FFB одинаково как в случае вызова FFB с EN = 1, так и при вызове без параметров EN/ENO.

Несвязанным входам FFB назначается по умолчанию значение ”0”.

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

Используйте команду меню Objects → View FFB execution order, чтобы просмотреть порядок обработки. Это выполняется с помощью отображения номера выполнения (номер в круглых скобках) после имени экземпляра или номера функции (рисунок 8.4).


Рисунок 8.4 – Порядок обработки

Целенаправленное реверсирование в порядке обработки двух FFB может быть произведено с командой меню Objects → Reverse FFB execution order, но только, если потоковое правило будет не нарушено (рисунок 7.6 и 7.7).


Рисунок 8.5 – Изменение порядка обработки двух сетей, размещенных в контуре

На рисунке 8.5 показано как обмен достигается переключением двух FFB, которые связаны через переменную обратной связи контура.


Рисунок 8.6 – Изменение порядка обработки FFB

На рисунке 8.6 показано изменение порядка обработки FFB (или сетей), которые обрабатываются согласно порядку размещения.

Операция замены позволяет создание (постепенно, в случае необходимости, если вставляются несколько FFB) другого привилегированного порядка обработки.

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

Конфигурирование контуров.

Конфигурирование контуров исключительно через связи не позволяется (рисунок 8.7), потому что не имеется никакой опции для чистого определения потока данных (выход одного FFB является входом следующего FFB, его выход в свою очередь является входом первого).


Рисунок 8.7 – Неразрешенный контур через связи

Такая логика должна быть решена с помощью фактических параметров так, чтобы чистое определение потока данных было возможно (рисунки 8.8 и 8.9)


Рисунок 8.8 – Разрешенный контур (вариант 1)


Рисунок 8.9 – Разрешенный контур (вариант 2)

Позволяются также контуры через несколько фактических параметров. С такими контурами, порядок обработки может управляться с обратным ходом через несколько выполнений (рисунок 8.10).


Рисунок 8.10 – Контур через фактические переменные

Отображение POU

Соединительные линии

Порядок выполнения FBD

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

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

Инверсия логических сигналов

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

Соединители и обратные связи

Соединители (connectors) представляют собой поименованное, соединение, которое можно разорвать и перенести в следующую цепь. Такой прием может понадобиться при ограниченной ширине окна редактора FBD.

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

Для создания обратной связи должна использоваться явно объявленная переменная.

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

Метки, переходы и возврат

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

Метка ставится в начале любой цепи, являясь, по сути, названием данной цепи. Цепь может содержать только одну метку. Имена меток подчинены общим правилам наименования идентификаторов МЭК. Графический редактор автоматически нумерует цепи диаграммы. Эта нумерация применяется исключительно для документирования и не может заменять метки.

Переход обязательно связан с логической переменной и выполняется, если переменная имеет значение ИСТИНА. Для создания безусловного перехода используется константа ИСТИНА, связанная с переходом.

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

Выражения ST в FBD

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

Имеется бак, в который поступает жидкость, и насос для откачки этой жидкости. Бак имеет нижний датчик и верхний датчик уровня жидкости (датчик замыкается и переходит в состояние 1, когда контакты датчика покрыты жидкостью). Имеется реле, запускающее мотор насоса. Требуется реализовать следующий алгоритм управления насосом.

1. При срабатывании датчика верхнего уровня жидкости через 3 секунды включается мотор.

2. Он работает, пока уровень жидкости не уменьшился до уровня нижнего датчика, затем мотор отключается.

Читайте также: