Язык программирования fbd для чайников: Fbd — Википедия – НТБ МАЛИ :: Ошибка 404

Общие сведения о языке FBD — Документация Beremiz

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

Согласно IEC 61131­3, основными элементами языка 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 диаграмме

На рис. 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.

FLProg – альтернативная среда программирования Arduino. Описание проекта


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

Начнем по порядку.
Программа FLProg позволяет создавать прошивки для плат Arduino с помощью графических языков FBD и LAD, которые являются стандартом в области программирования промышленных контроллеров.
Описание языка FBD

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


Описание языка LAD

Ladder Diagram (LD, LAD, РКС) — язык релейной (лестничной) логики. Синтаксис языка удобен для замены логических схем, выполненных на релейной технике. Язык ориентирован на инженеров по автоматизации, работающих на промышленных предприятиях. Обеспечивает наглядный интерфейс логики работы контроллера, облегчающий не только задачи собственно программирования и ввода в эксплуатацию, но и быстрый поиск неполадок в подключаемом к контроллеру оборудовании. Программа на языке релейной логики имеет наглядный и интуитивно понятный инженерам-электрикам графический интерфейс, представляющий логические операции, как электрическую цепь с замкнутыми и разомкнутыми контактами. Протекание или отсутствие тока в этой цепи соответствует результату логической операции (истина — если ток течет; ложь — если ток не течет). Основными элементами языка являются контакты, которые можно образно уподобить паре контактов реле или кнопки. Пара контактов отождествляется с логической переменной, а состояние этой пары — со значением переменной. Различаются нормально замкнутые и нормально разомкнутые контактные элементы, которые можно сопоставить с нормально замкнутыми и нормально разомкнутыми кнопками в электрических цепях.


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

Вид окна программы в режиме языка FBD

Вид окна программы в режиме языка LAD

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

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

При работе с программой пользователю нет необходимости заниматься написанием кода, контролем за использованием входов – выходов, проверкой уникальности имен и согласованностью типов данных. За всем этим следит программа. Так же она проверяет корректность проекта целиком и указывает на наличие ошибок.
Для работы с внешними устройствами создано несколько вспомогательных инструментов. Это инструмент инициализации и настройки часов реального времени, инструменты для чтения адресов устройств на шинах OneWire и I2C а так же инструмент для чтения и сохранения кодов кнопок на ИК пульте. Все определённые данные можно сохранить в виде файла и в последующем использовать в программе.

Список функциональных блоков существующих на сегодняшний день в языке FBD
Базовые элементы

[XOR]
[AND]
[OR]
[Bounce]
Специальные блоки

[Scale]
Тригеры

[SR]
[TT]
[RS]
[Rtrig]
Таймеры

[Generator]
[Timer]
Счетчики

[Counter]
[SpeedCounter]
Математика

[SUM(+)]
[MUL(*)]
[DIV(/)]
[SUB(-)]
Алгебра

[SIN]
[COS]
[TAN]
[ABS]
[SQ]
[SQRT]
[MIN]
[MAX]
[POW]
[RANDOM]
Сравнение

[Comparator]
Com — Порт

Send
SendVariable
ReceiveVariable
Переключатель

[SWITCH]
[MUX]
[DMS]
Моторы

ServoMotor
StepMotor
Часы реального времени

[Alarm]
[GetTime]
[SetTime]
Дисплеи

Дисплей на чипе НD44780
Подсветка дисплея на чипе НD44780 I2C
Блок декодирования семи сегментного индикатора
Строки

Сложение строк
Датчики

[Ultrasonic HC-SR04]
[DHT11, DHT21, DHT22]
[DS18x2x]
[IR Ressive]
[BMP-085]
SD карта

Запись переменной на SD карту
Выгрузка файла с SD карты
Конвертация типов

Преобразование строк
Преобразование Float в Integer
Микросхемы расширений

Расширитель выводов 74HC595
Операции с битами

Шифратор
Дешифратор
Чтение бита
Запись бита
Разное

Матричная клавиатура

Список функциональных блоков существующих на сегодняшний день в языке LAD
Базовые блоки

Контакт
Катушка
Защита от дребезга
Выделение переднего фронта
Специальные реле

Двустабильное реле
Реле времени
Генератор
Реле сравнения
Алгебра

SIN
COS
TAN
ABS
MAX
MIN
SQ
SQRT
POW
RANDOM
Аналоговые блоки

Масштабирование
Математика
Счетчик
Аналоговый переключатель
Переключатель много к одному
Переключатель один ко многим
Аналоговый вход контроллера
Аналоговый выход контроллера
Вход аналогового соеденителя
Выход аналогового соединителя
Скоростной счетчик
ComPort

Передача в ComPort
Передача переменной через ComPort
Прием переменной через ComPort
Моторы

Сервомотор
Шаговый двигатель
Часы реального времени

Получить данные
Будильник
Установка времени
Дисплеи

Дисплей на чипе HD44780
Блок управления подсветкой дисплея на чипе HD4480 I2C
Блок декодирования семи сегментного индикатора
Строки

Сложение строк
Датчики

Ультразвуковой дальномер HC-SR04
Датчик температуры и влажности DHT11 (DHT21, DHT22)
Датчик температуры DS18x2x
IR Ressive
BMP-085
SD карта

Запись переменной на SD карту
Выгрузка файла с SD карты
Конвертирование типов

Конвертация строк
Преобразование Float в Integer
Микросхемы расширений

Расширитель выводов 74HC595
Операции с битами

Шифратор
Дешифратор
Чтение бита
Запись бита
Разное

Матричная клавиатура.

Список оборудования применяемого в проекте на сегодняшний день.

В следующих публикациях я расскажу о сайте проекта и перспективах развития проекта.

Создание проектов в программе FLProg. Урок первый / FLProg corporate blog / Habr

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

У программистов в качестве первого урока принято использовать “Hello World”, у программистов микроконтроллеров помигать светодиодом, ну а у электриков и электронщиков собрать схему управления контактором. Поскольку основными пользователями программы как раз они и являются, собирать на первом уроке будем как раз данную схему.

Стандартная схема управление контактором

Заменим эту схему контроллером Ардуино. Оставим в стороне вопросы помехозащищённости и экранировки. Эта тема для отдельного и очень большого разговора. Наша цель — создать в программе FLProg соответствующую логику. Поэтому накидаем тестовую схему подключения.

Роль контактора в данной тестовой схеме выполняет светодиод «Контактор». Теперь попробуем запрограммировать контроллер.
Запускаем программу FLProg, нажимаем кнопку «Создать новый проект».

Откроется окно выбора контроллера и языка программирования проекта.

Для создания проекта можно использовать любой из двух языков программирования (FBD и LAD) являющимися стандартами в области программирования промышленных контроллеров. В этом уроке мы создадим проекты на обоих языках.

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

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


В данном списке выбираем нужный контроллер.

Выбранный для проекта контроллер можно сменить в любой момент.

Для начала создадим проект на языке LAD.

Язык LAD

Ladder Diagram (LD, LAD, РКС) – язык релейной (лестничной) логики. Синтаксис языка удобен для замены логических схем, выполненных на релейной технике. Язык ориентирован на специалистов по автоматизации, работающих на промышленных предприятиях. Обеспечивает наглядный интерфейс логики работы контроллера, облегчающий не только задачи собственно программирования и ввода в эксплуатацию, но и быстрый поиск неполадок в подключаемом к контроллеру оборудовании. Программа на языке релейной логики имеет наглядный и интуитивно понятный инженерам-электрикам графический интерфейс, представляющий логические операции, как электрическую цепь с замкнутыми и разомкнутыми контактами. Протекание или отсутствие тока в этой цепи соответствует результату логической операции (истина — если ток течет; ложь — если ток не течет). Основными элементами языка являются контакты, которые можно образно уподобить паре контактов реле или кнопки. Пара контактов отождествляется с логической переменной, а состояние этой пары — со значением переменной. Различаются нормально замкнутые и нормально разомкнутые контактные элементы, которые можно сопоставить с нормально замкнутыми и нормально разомкнутыми кнопками в электрических цепях.

Рабочее окно программы FLProg на языке FBD состоит из нескольких полей:

  1. Основное меню программы
  2. Дерево проекта (в данном уроке оно не используется, его рассмотрим в последующих уроках)
  3. Дерево установленного оборудования. В нём представлено оборудование (промежуточные реле, реле времени, генераторы…), которое используется в проекте. В новом проекте в нём присутствуют только входы и выходы контроллера.
  4. Библиотека блоков. В ней находится оборудование, которое возможно применить в проекте. В данном уроке нас будет интересовать только папка «Базовые блоки»
  5. Область схемы, в которой и будет собственно рисоваться схема. Схема в FLProg представляет собой набор плат с оборудованием.

Для начала вытащим на область схемы контакты кнопок. Это возможно сделать двумя путями.

  • Перетащить соответствующий вход из папки «Свободные входы–выходы контроллера» дерева установленного оборудования на область схемы
  • Перетащить блок «Контакт» из папки «Базовые элементы» библиотеки блоков.

В результате на схеме появится УГО (условно – графическое обозначение) контакта. В случае перетаскивания его из дерева установленного оборудования контакт окажется сразу привязанным к цифровому входу – выходу платы. Если блок контакта был вытащен из библиотеки элементов, он будет абстрактным контактом без какой – либо привязки.

И любом случае контакты необходимо параметрировать. Для этого делаем двойной клик на контакте. Открывается окно редактирования блока.

В первую очередь на закладке «Параметры» выбирается привязка контакта к выходу платы (если контакт выбран в библиотеке блоков).
После этого появляются новые параметры. «Зашита от дребезга» и «Подтягивающий резистор». Поскольку в соответствии со схемой кнопки подключены к GND, ставим галочку «Подтягивающий резистор». «Зашиту от дребезга» можете не устанавливать, в этой схеме в ней нет необходимости.

На закладке «Надпись к блоку» пишем название кнопки, что бы оно отображалось на схеме.

На закладке «Информация» можно посмотреть информацию о данном устройстве.

Таким же способом вытаскиваем остальные кнопки и контакты реле перегрузки.

После этого перетаскиваем из библиотеки блоков устройство «Катушка». Так же двойной клик на нём и открывается окно параметрирования катушки.

Назначаем катушку промежуточным реле «К1» дважды кликнув на соответствующем пункте списка.
Теперь надо выставить состояние контактов.
В программе FLProg состояние контакта соответствует уровню на привязанном входе платы. Если на входе платы 0 – контакты разомкнуты, если 5В – замкнуты. Поскольку кнопки в соответствии со схемой подключены к GND и включены встроенные подтягивающие резисторы, при замкнутой кнопке на входе платы будет 0, а при отпущенной кнопке 5В. В соответствии с этими правилами выставляем соответствие контактов. Это можно так же сделать двумя путями.

  • Дважды кликнув на контакт и выбрав нужное состояние в редакторе блока
  • Кликнуть правой кнопкой по контакту и в выпавшем меню выбрать нужный пункт.

Должно получиться вот такое состояние контактов (противоположное типовой схеме по описанной ранее причине)

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

Для создания блок-контакта контактора можно перетащить контакт К1 из дерева установленного оборудования на схему.

В результате должна получиться вот такая схема. Я думаю, любой электрик поймёт её работу (с учётом инвертирования состояния контактов привязанных к входам платы Ардуино).

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

Откроется окно редактирования заголовка платы.

Зелёный кружок в заголовке обозначает, что плата корректна и ошибочных блоков на ней нет. В случае наличия таких блоков он будет красным.
Теперь создадим ещё одну плату, нажав на кнопку «Добавить плату»

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

Катушки с привязанными выходами платы соотносятся так: при включении катушки в проекте на выходе платы Ардуино будет 5В при выключении 0
Затем перетаскиваем из дерева установленного оборудования необходимые контакты (два контакта промежуточного реле, и контакт входа реле перегрузки), после чего рисуем необходимую схему и называем плату «Управление выходами».

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

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

Язык FBD

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

Создадим новый проект на языке FBD.

Поля 1, 2, 4, 5 в окна программы аналогичны полям на языке LAD. Поле 3 здесь содержит дерево тэгов (входов, выходов и переменных). Здесь нет предварительно созданных входов, их нужно создавать при необходимости. Для создания нового входа нужно нажать кнопку «Добавить вход» или дважды кликнуть по пункту «Добавить вход» в дереве тэгов.

Откроется окно создания входа

Выбираем цифровой, появляются новые параметры. Записываем название входа, выбираем нужный вход платы Ардуино, и ставим галочку «Включить подтягивающий резистор».

Таким же образом добавляем все необходимые входы

Затем создаем переменную, отвечающую за состояние контактора. Для этого либо нажимаем на кнопку «Добавить переменную» либо делаем двойной клик на пункте «Добавить переменную» в дереве тэгов.

Открывается окно настройки переменной

Выбираем тип переменной Boolean и заполняем параметры

Блоки входа на языке FBD соответствуют реальным выходам платы, следующим образом. Когда на реальном входе 0 – на выходе блока – False, когда на входе платы 5B на выходе блока True.
Для запоминания состояния контактора используем RS триггер. Его надо перетащить из папки «Триггеры» библиотеки блоков на рабочее поле схемы.

RS-триггер

RS-триггер, или SR-триггер — триггер, который сохраняет своё предыдущее состояние при нулевых входах и меняет своё выходное состояние при подаче на один из его входов единицы.
При подаче единицы на вход S (от англ. Set — установить) выходное состояние становится равным логической единице. А при подаче единицы на вход R (от англ. Reset — сбросить) выходное состояние становится равным логическому нулю.
При логическом нуле на обоих входах на выходе удерживается последнее состояние. При логических единицах на обоих входах в случае RS триггера выход устанавливается в логический ноль, а в случае SR триггера в логическую единицу.

Для того что бы включился контактор необходимо подать на вход S сигнал со входа «Пуск». Для этого перетаскиваем из дерева тэгов вход «ПУСК» на рабочую область схемы. Если вспомнить о том, что при нажатии кнопки Пуск на вход платы подаётся логический 0, то понятно, что необходимо инвертировать сигнал с кнопки. Для этого наведём курсор на вход S триггера и кликнем правой кнопкой мыши. В открывшимся меню в пункт выберем «Инвертировать»

После чего соединяем вход S триггера с выходом блока входа «Пуск». Создание соединения происходит, так же как и в языке LAD.

Остановка контактора происходит если:
Нажата кнопка «СТОП» (лог.1 на блоке входа «Стоп» ) ИЛИ нажата кнопка «АВАРИЙНЫЙ СТОП» (лог.1 на блоке входа «Аварийный стоп» ) ИЛИ сработало тепловое реле (лог.1 на блоке входа «КТ1» ). Значит, нам нужен блок ИЛИ с тремя входами.

Перетаскиваем его из библиотеки блоков из папки «Базовые блоки».

По умолчанию у блока ИЛИ два входа. Для того что бы добавить третий, выделяем блок и нажимаем кнопку «Добавить вход».

Переносим необходимые входы из дерева тэгов и соединяем со входами блока ИЛИ. А выход блока ИЛИ соединяем с входом R триггера.
Затем забираем из дерева тэгов переменную «Состояние контактора» и выход триггера соединяем со входом этой переменной. Должна получиться такая схема:

На этом закончим первую плату и назовём ее, как и на LADе – «Плата управления».
После чего создадим новую плату и сразу назовём её «Управление выходами».
Далее создадим выходы платы в соответствии со схемой. Для этого надо кликнуть на кнопку «Добавить выход» дли сделать двойной клик на пункте «Добавить выход» в дереве тэгов. Выходы создаём цифрового типа.

Перетащим на вторую плату созданные выходы, вход КТ1 и переменную «Состояние контактора» Затем соединим блоки в соответствии со схемой. Необходимые воды блоков инвертируем.

Обратите внимание, что при перетаскивании на схему блоков входа, выхода или переменной изначально у них нет входов или выходов. Они появляются при подведении курсора к блоку в месте их будущего расположения.
С созданием схем закончили. Теперь надо залить программу в контроллер. Для этого нажимаем кнопку «Компилировать проект».

В результате открывается окно Arduino-IDE с открытым скетчем, в который была преобразована созданная схема.

В программе Arduino-IDE выбирается плата, порт и производится заливка в контроллер скетча.

Язык функциональных блоков — fbd

Язык программирования FBD (Function Block Diagram) является составной частью стандарта IEC-61131 и так же входит в стандарт IEC-61499.

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

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

Основными объектами языка FBD являются элементарные функции и элементарные функциональные блоки (ФБ). Они находятся в библиотеке, логика их работы (программа) написана на языке С и не может быть изменена в редакторе FBD (изменять можно только их параметры). Кроме них можно использовать функции и ФБ пользователя, которые конструируются пользователем из элементов языка FBD.

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

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

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

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

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

РеализацияFbDвIsaGraf6

Главные элементы FBD

Функциональный блок

Функция

Элементы FBD

Переменные

Блоки

Переходы

Возвраты

Комментарии

Метки

Цепи

Вертикальная шина

Обмотки

Прямая обмотка

Инверсная обмотка

Включающая обмотка (Set) и Выключающая обмотка (Reset)

Контакты

Прямой контакт

Инверсный контакт

Импульсный контакт (Передний фронт)

Импульсный контакт (Задний фронт)

Функциональные блоки

Управление тревогами

Булевские операции

SR — триггер

RS — триггер

Определение переднего фронта

Определение заднего фронта

Блок сравнения

Счетчики

Счет вверх

Счет вниз

Счет вверх-вниз

Управление процессами

Вычисление среднего

Генератор импульсов

Гистерезис

Интегратор

Генератор сигналов

Стек чисел

Удаленные коммуникации

Таймеры

Язык программирования FBD

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

На практике чаще всего применяется графический язык программирования FBD.

Важная FBD состоит в том, чтобы детерминировать время исполнения задач и полностью исключить возможность зацикливания при ожидании какого-либо события. Это и есть основная составляющая идеологии этого языка программирования.

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

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

Преимущества языка FBD

Основными преимуществами применяемого в ПЛК языка программирования:
 — простота;
 — наглядность;
 — четкая последовательность;
 — легкая структура команд;
 — надежный и быстрый код.

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

ПЛК Siemens

Программируемые контроллеры, которые используются на промышленных предприятиях в нашей стране, выполнены на базеSiemens с программным обеспечением Simatik STEP 7. Это последняя версия, которая разработана под операционную систему Windows и значительно увеличивает возможности специалиста разработчика программы для автоматизированного производства. Подробно о том, как осуществляется программирование siemens simatic s7 будет интересно для того, кто намерен перейти от теории к практике. Для того, чтобы больше узнать о видео курсе нажмите здесь, и вам будет представлена полная информация о возможностях обучения. Видеокурс сегодня популярен у специалистов, которые желают освоить тонкости и нюансы программирования и отладки системы ПЛК для автоматизированного производства. Результатом станет открытие, что программирование ПЛК – это увлекательное занятие при работе с реальным оборудованием, особенно, когда есть понимание процесса и грамотный подход к каждому этапу.

Светофор на ПЛК – все языки МЭК 61131-3 / Habr

В прошлой статье Светофор на ПЛК – 30 блоков программа для ПЛК светофора была написана только на FBD.
Новая программа использует все 5 языков стандарта МЭК 61131-3.

Первая секция на IL.
Это похожий на ассемблер язык.
В секции всего 2 строки:
LD — загрузка значения в аккумулятор
S — установка переменное в true, если в аккумуляторе true, иначе переменная не изменяется.

Генератор импульсов периодом 0,5 секунды написан на FBD, как и в предыдущей версии.

Основная секция написана на SFC. Как мне кажется, это самый сложный для применения язык в стандарте МЭК 61131-3.
Программа состоит из шагов и переходов.
При запуске программы выполняется шаг Init.
Следующий шаг выполняется, если усовие перехода за ним истинно. Шаг может быть выполнен с задержкой, время шага может быть ограничено.
На рисунке ниже только однин переход содержит условие. Остальные переходы выполняются всегда.
В конце цепочки выполняется безусловный переход на метку WaitPeople.

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

При выполнении каждого шага выполняется опеределенное действие. В моей программе задано выполнение секции на языке ST.

В проекте добавлена переменная uState, соответсвующая состоянию светофора.
Вот содержимое всех секций, выполнемых по шагам:

Секция на ST в зависимости от состояния uState записывает значение на булевские переменные, которые потом будут переписаны на выходы. Это можно было сделать в секциях stStep_1..stStep_8, но тогда бы вы не увидели оператора CASE и не поняли бы, что ST — самый близкий для программиста язык из стандарта МЭК 61131-3. Так же в этой секции введена защита от программных ошибок в виде мигающего желтого при неопределенном состоянии.

Язык LD близок к схемам релейной логики. Основа LD — контакты и катушки. На схеме видно, что слева расположен проводник, от которого «напряжение» (true) распростроняется направо по ответвлениям.
Нормально разомкнутый контакт (похож на конденсатор) замыкается, если привязанная к нему переменная истинна.
Нормально замкнутый контакт (похож на конденсатор со слэшем внутри) замыкается, если привязанная к нему переменная ложна.
Катушка (2 скобки) пропускает «напряжение» через себя и переписывает его значение (false или true) в привязанную к ней переменную.
В программе данная секция используется для того, чтобы переписать промежуточные переменные в переменные, привязанные к выходам, с защитой от программной ошибки. Зеленый свет загарается только если нет красного на данном светофоре и зеленого на другом светофоре.

Результат работы программы:

Применение всех 5 языков в одной программе не оправдано. Но в реальных проектах иногда приходится применять одновременно 2..3 языка. Чаще всего я использую ST, реже FBD, еще реже IL. SFC и LD в реальных проектах мне применять не приходилось.

UPD. Сделал исправление — убрал лишний ноль из названия стандарта по замечанию RouR

UPD2. Небольшое изменение в описании LD.

FBD — это… Что такое FBD?

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

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

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

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

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

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

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

Существует много практических реализаций языка FBD с определенными расширениями или ограничениями.

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

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

См. также

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

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

Литература

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

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

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