3. Язык fbd на примере α-контроллера ф. Mitsubishi. Примеры: микроволновая печь или стиральная машина-автомат.
Контроллер программируется на языке FBD. При этом пользователь может программировать контроллер двумя способами:
— с использованием кнопок панели и встроенного дисплея контроллера;
— составить программу на компьютере в среде AL-PCS/WIN под Windows и пересылать программу в контроллер через COM- порт.
Программирование контроллера в среде AL-PCS/WIN
После запуска появляется стандартное окно Windows-приложения. Для создания новой программы для контроллера выполним команду Файл/ Новый. При этом система запрашивает серию контроллера и количество входов и выходов.
Для нашего случая подходит серия AL2 и 6 входов и 4 выхода. Установите соответствующие флажки и нажмите на кнопку ОК. При этом появляется окно, где составляется программа:
Р
ядом с этим окном появляется меню функциональных блоков. Как видно, это меню организовано как многостраничное окно. Назначение страниц этого окно следующее:
IN и OUT — входные и выходные сигналы
FUNC – функциональные блоки
LOGIC — логические блоки
USER – пользовательские блоки.
Составление программы сводится к размещению функциональных блоков на окне и их взаимному соединению. Все это напоминает составление структурной схемы или соединение микросхем на электрической схеме.
После размещения блока, если дважды щелкнуть на нем появляется окно свойств блока. Окно свойств блока содержит разные поля для ввода параметров блока. Например, для блока Delay в окне свойств задается время задержки сигнала.
Описание функциональных блоков
Блок Boolean – Логическая функция
Блок имеет до четырех входов и один выход. Состояние выхода определяется логической функцией, которая задается в окне свойств. Аргументами логической функции являются входные сигналы блока, которые обозначаются как I01 … I04.
Блок Set / Reset.
Блок имеет два входа (Set и Reset) и один выход. Он действует как RS – триггер. Таблица истинности этого блока совпадает с таблицей истинности RS – триггера за исключением состояния, когда R=S=1. В этом случае состояние выхода определяется внутренним параметром Приоритет.
Значение этого параметра определяется двумя переключателями:
Установить приоритет, т.е. когда R=S=1, на выходе Q=1.
Сбросить приоритет, т.е. когда R=S=1, на выходе Q=0.
Таблица 7.1. Таблица истинности триггерной ячейкиВходы Выходы
1 1 Без изменения
0 0 Не определено
3. Блок Delay.
Блок задерживает входной сигнал. Время задержки сигнала по переднему и заднему фронтам устанавливается индивидуально (в окне свойств).

Вход Clear имеет больший приоритет, чем вход I и выход принудительно переводит на логический 0.
Выход WC слово состояния определяет время задержки по переднему фронту.
4. Блок One Shot.
При появлении переднего фронта входного сигнала на выходе появляется импульс определенной длины. Длительность импульса определяется параметром блока.

Вход Clear переводит выход в состояние логического нуля.
Выход WC выводит заданную длину импульса.
5. Блок Pulse.
Имеет один вход и один выход. На выходе появляются короткие импульсы в моменты появления переднего и/или заднего фронтов входного сигнала.

Моменты появления импульса на выходе определяется в окне свойств с помощью следующих переключателей:
- По переднему фронту
- По заднему фронту
- По обоим фронтам.
Блок действует как Т-триггер. По переднему фронту входного сигнала выход переходит на противоположное состояние.

Если вход Cl (clear — очистить) равен логической 1 – выход принудительно устанавливается на логический 0. Параметров нет.
7. Блок Flicker (мерцание)
Если на входе блока лог. 1, то на выходе появляются импульсы. Длительность импульсов в состоянии лог. 1 и лог. 0 устанавливаются индивидуально.

Параметр количество циклов может принимать три значения:
а) Счетчик времени – импульсы продолжаются в течение установленного времени.
в) Счетчик циклов – на выходе появится установленное количество импульсов.
с) Непрерывный – импульсы продолжатся непрерывно.
Выход WC – выводит длительность логической 1.
2.2 Программирование на языке функционально – блоковых диаграмм фбд (fbd)
ФБД – это язык программирования, который по способу формирования программы контроллера напоминает процесс составления схемы под конкретную техническую задачу. Когда полностью сформулирована задача, разработчик начинает продумывать, как он может её реализовать. Он анализирует сигналы, которые действуют на входах и должны быть обеспечены на выходах, решает:
- что,
- в какой последовательности и
- какими средствами (применением усилителей, преобразователей формы кривой: интеграторов или дифференциаторов, счётчиков, временных компонентов и т. д.)
надо сделать с этими сигналами, чтобы работа будущей «схемы» соответствовала требованиям задания.
Язык ФБД – это набор программно реализованных блоков, каждый из которых предназначен для выполнения какой – то определённой функции по преобразованию сигнала. Если подобрать достаточное количество функционально подходящих блоков и соединить их между собой соответствующим образом, получится программа работы контроллера. Что характерно: и в реальной схеме, и в программе на ФБД по линиям соединения узлов (блоков) можно проследить от начала и до самого конца всю последовательность преобразования сигнала. В программе, написанной на языке РКС, этого не удастся сделать.
Чтобы пояснить сам принцип программирования на ФБД, обратимся к простому примеру. Общеизвестен принцип измерения частоты следования импульсов. Если измеряемая частота мала ( период колебаний Tх относительно продолжителен), то удобно подсчитать число импульсов N известной частоты fсч = 1 / Tсч, которые проходят на вход счётчика за время полупериода измеряемой частоты (рис.2.9,а). Из простых и очевидных соотношений понятен механизм пересчёта результатов в значения измеряемой частоты: fх =1 / Tх ; Tх / 2 = N×Tсч ; Tх = 2N × Tсч; f х =1 / (2N × Tсч) .
Если измеряемая частота сигнала высокая (период короткий), этот способ измерения применить «один в один», т.е. без поправки на изменившиеся условия, вряд ли получится: при малой длительности измеряемого периода Tх частота импульсов заполнения должна быть неприемлемо высокой. Поэтому поступают иначе: формируют интервал наблюдения заранее известной длительности Tи и заполняют его импульсами измеряемой частоты fх (рис. 2.9,б). Так как Tи = M × Tх , то fх = 1 / Tх = M / Tи . Принципы измерения в обоих случаях очень похожи. Меняется лишь содержание того, что чем заполняется: специально сгенерированными импульсами fсч измеряемый интервал Tх, как в первом случае, или формируемый интервал наблюдения Tи импульсами измеряемой частоты fх , как на рис.2.9,б.

Пример программирования на языке фбд
Задача: средствами языка ФБД запрограммировать получение интервала наблюдения длительностью 10 секунд. Следует предусмотреть один дискретный вход для активизации программы и два дискретных выхода для получения отметок времени со сдвигом на полпериода друг относительно друга.
Выполнение. Перед тем, как начать что–то делать, целесообразно при всём многообразии вариантов решения остановиться на каком–то одном. Пусть для нашего примера выбранный способ решения задачи соответствует временным диаграммам на рисунке 2.10.
Входным сигналом (диагр.1) программа запускается. Формируемая непрерывная последовательность импульсов (диагр.2) поступает на счётчик (диагр.3). Временные параметры генерируемых импульсов (2) и устанавливаемый коэффициент счёта счётчика должны допускать настраиваемость программы на получение интервала наблюдения 10 секунд.
После достижения установленного коэффициента счёта надо предусмотреть мероприятия для сброса счётчика в исходное состояние. Здесь могут оказаться полезными функции укорочения импульсов, задержки появления сигнала, чтобы можно было разнести по времени действия сигналы счёта и сброса (диагр.4 и 5). Выходные сигналы (диагр.6 и 7) выдаются в виде инвертированных импульсов. Их форма кривой получается путём преобразования, похожего на деление частоты импульсов (диагр.4) вдвое с помощью элемента, работающего как D – триггер. Если формирование интервала наблюдения выполнять в соответствии с рис. 2.10, то на языке ФБД в среде α – Programming это могло бы быть представлено как на рис. 2.11. Очень легко устанавливается соответствие между временными диаграммами и программой. На каждой строке диаграмм справа проставлены номера выходных сигналов блоков, на которых эти сигналы получены.

При включении I 01 начинает генерировать импульсы блок FLICKER. В окне описания блока заданы длительности импульса ON и паузы OFF между ними, каждая из которых равна 100ms. При таком задании период равен 200 ms, что соответствует частоте 5 Гц, т.е. получению 5 импульсов в секунду. Чтобы обеспечить общую длительность интервала 10 секунд, в счётчик COUNTER надо ввести коэффициент счёта 50. Все эти вводимые величины показаны на вкладках, представляющих собой фрагменты окон описания блоков FLICKER и COUNTER.


Пока счётчик не закончил очередной счёт, его выходной сигнал B 02 имеет уровень OFF, и для того, чтобы начать формирование выходного импульса, начиная с первого полупериода, установка триггера (B 03) осуществляется через инвертор (B 04). Выходной сигнал R — S триггера (B 03) делится по частоте вдвое элементом ALT (B 07), представляющим собой аналог D – триггера. Блоки задержки (B 05) и «дифференцирования» (B 06) применены для сброса счётчика в нулевое состояние.
По рассмотренному примеру можно сформулировать принцип программирования методом функциональных блоковых диаграмм. В решаемой задаче условно выделяются типовые процедуры по преобразованию сигнала, последовательное выполнение которых позволяет получить требуемое выходное воздействие, которое контроллер должен оказать на управляемое устройство объекта. Затем по этим типовым операциям подбираются программно реализованные средой программирования блоки, ориентированные на выполнение этих операций. В результате соответствующего соединения блоков между собой получается готовая программа работы контроллера.
Любая задача может быть решена различными способами, более или менее удачными. Программы могут отличаться набором использованных блоков, их количеством, степенью оправданности их применения. Например, задача, решаемая программой на рис. 2.11, может быть запрограммирована гораздо проще, и принять вид, изображённый на рис. 2.12.

По сравнению с рис.2.11 в полях задания длительностей импульса и паузы блока FLICKER вместо единиц введены коэффициенты 100. После умножения их на 100ms = 0,1s получаются длительности импульса и паузы как раз равными требуемым 10 секундам. В этом варианте экономится объём занимаемой памяти, программа просто выглядит, легко читается.
Чтобы минимизировать излишества, допускаемые при составлении программ, надо знать назначение блоков, особенностей их применения в тех или иных условиях.
10. Язык функциональных блок-схем – 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. Несколько связей могут быть соединены с FFB выходом. Пункты любого такого соединения отмечаются жирной точкой. Входы/выходы, которые будут соединены, должны иметь соответствующие типы данных. Связи могут быть отредактированы в режиме Выбора. Перекрывание с другими объектами разрешается. Связи не могут использоваться для конфигурации контуров, потому что не возможно ясно определить порядок обработки в секции. Контуры должны решаться с помощью фактических параметров.
Несвязанным входам 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 строится из компонентов, отображаемых на схеме прямоугольниками. Входы POU изображаются слева от прямоугольника, выходы справа. Внутри прямоугольника указывается тип POU и наименования входов и выходов. Для экземпляра функционального блока его наименование указывается сверху, над прямоугольником. В графических системах программирования прямоугольник компонента может содержать картинку, отражающую его тип.
Соединительные линии
Прямоугольники POU в FBD соединены линиями связи. Соединения имеют направленность слева направо. Вход блока может быть соединен с выходом блока, расположенного слева от него. Помимо этого, вход может быть соединен с переменной или константой. Соединение должно связывать переменные или входы и выходы одного типа. В отличие от компонента переменная изображается на диаграмме без прямоугольной рамки. Ширина соединительной линии в FBD роли не играет. Стандарт допускает использование соединительных линий разной ширины и стиля для соединений разного типа.
Порядок выполнения FBD
Выполнение FBD-цепей идет слева направо, сверху вниз. Блоки, расположенные левее, выполняются раньше. Блок начинает вычисляться только после вычисления значений всех его входов. Дальнейшие вычисления не будут продолжены до вычисления значений на всех выходах. Другими словами, значения на всех выходах графического блока появляются одновременно. Вычисление цепи считается законченным только после вычисления значений на выходах всех входящих в нее элементов.
В некоторых системах программирования пользователь имеет возможность свободно передвигать блоки с сохранением связей. В этом случае ориентироваться нужно исходя из порядка соединений.
Инверсия логических сигналов
Инверсия логического сигнала в FBD изображается в виде окружности на соединении, перед входом или переменной. Инверсия не является свойством самого блока и может быть легко добавлена или отменена непосредственно в диаграмме.
Соединители и обратные связи
Соединители (connectors) представляют собой поименованное, соединение, которое можно разорвать и перенести в следующую цепь. Такой прием может понадобиться при ограниченной ширине окна редактора FBD.
Стандарт не запрещает соединения, идущие с выхода блока на свой вход или вход ранее исполняемых блоков. Обратная связь не образует цикл, подобный FOR, просто некоторое вычисленное значение поступит на вход при следующем вызове диаграммы. Фактически это означает неявное создание переменной, которая сохраняет свое значение между вызовами диаграммы. Для устранения неоднозначности необходимо присвоить безопасное начальное значение переменной обратной связи. Но как это сделать для переменной, которая не объявлена в явной форме?
Для создания обратной связи должна использоваться явно объявленная переменная.
При необходимости переноса или разветвления соединения в другие цепи также необходимо использовать промежуточные локальные переменные.
Метки, переходы и возврат
Порядок выполнения FBD-цепей диаграммы можно принудительно изменять, используя метки и переходы, точно так же, как и в релейных схемах.
Метка ставится в начале любой цепи, являясь, по сути, названием данной цепи. Цепь может содержать только одну метку. Имена меток подчинены общим правилам наименования идентификаторов МЭК. Графический редактор автоматически нумерует цепи диаграммы. Эта нумерация применяется исключительно для документирования и не может заменять метки.
Переход обязательно связан с логической переменной и выполняется, если переменная имеет значение ИСТИНА. Для создания безусловного перехода используется константа ИСТИНА, связанная с переходом.
Оператор возврата RETURN можно использовать в FBD так же, как и переход на метку, т. е. в связке с логической переменной. Возврат приводит к немедленному окончанию работы программного компонента и возврату на верхний уровень вложений. Для основной программы это начало рабочего цикла ПЛК.
Выражения ST в FBD
Некоторые системы программирования позволяют записывать выражения ST на входе графических блоков. Такой прием расширяет стандартный FBD и часто оказывается достаточно удобным. Компактная форма представления выражений облегчает запись и чтение функциональных диаграмм.
Имеется бак, в который поступает жидкость, и насос для откачки этой жидкости. Бак имеет нижний датчик и верхний датчик уровня жидкости (датчик замыкается и переходит в состояние 1, когда контакты датчика покрыты жидкостью). Имеется реле, запускающее мотор насоса. Требуется реализовать следующий алгоритм управления насосом.
1. При срабатывании датчика верхнего уровня жидкости через 3 секунды включается мотор.
2. Он работает, пока уровень жидкости не уменьшился до уровня нижнего датчика, затем мотор отключается.
Обозначения контактов и обмоток реле:
vu – датчик верхнего уровня
nu – датчик нижнего уровня
zd – реле запуска мотора насоса
На рисунке 8.11 приведено решение данной задачи.

Рисунок 8.11 – Решение на языке FBD к примеру
Программирование FBD
Иногда нужно, чтобы система управления тем или иным оборудованием была автоматизированной, и тогда на помощь приходят программируемые интеллектуальные реле. Они позволяют значительно упростить схемы управления электрооборудованием, повысить их надежность и гибкость. Как правило, для программирования интеллектуального реле используется специализированное ПО: LD, FBD и др. В этом уроке мы подробно разберем программирование FBD.
Для успешного освоения материала рекомендуем вам изучить следующие понятия:
Аппарат защиты
Устройство для защиты электрических цепей, электрооборудования, машин и других агрегатов от перегрузок. Автоматически отключает защищаемую электрическую цепь при ненормальных режимах работы
Булева алгебра
Раздел математики, изучающий логические значения высказываний (истинность или ложность) и логические операции над ними
Микропроцессор
Устройство обработки цифровой и аналоговой информации
Таблица истинности
Таблица, описывающая значения логической функции при всех возможных значениях ее аргументов
Видеолекция
Области применения интеллектуального реле

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