Fbd язык программирования: Пишем задачки на FBD. Пятнашки и Симпсон / Хабр

Содержание

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

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

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

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

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

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

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

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

По ходу цепи порядок выполнения блоков соответствует порядку их соединения, а результат выполнения цепи либо подается на выход ПЛК, либо записывается в какую-то внутреннюю переменную.

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

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

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

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

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

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

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

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

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

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

В процессе программирования на языке FBD применяются как стандартные блоки из библиотек, так и блоки, сами написанные на FBD или на иных языках стандарта МЭК 61131-3.

Блок представляет собой элемент программы, своего рода подпрограмму, функциональный блок или функцию (логическое «НЕ», «ИЛИ», «И», таймер, счетчик, триггер, математическая операция, обработка аналогового сигнала и т. д.).

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

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

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

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

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

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

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

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

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

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

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

Нужно было делать несколько проектов для этих контроллеров.

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

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

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

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

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

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

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

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

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

                                     

ⓘ FBD

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

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

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

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

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

Та же самая функция на псевдокоде:

result:= 2 *A / B

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

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

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

Одним из вариантов FBD является язык программирования CFC C ontinuous F unction C hart. Он позволяет произвольно задавать порядок выполнения блоков. Диаграммы CFC дают программисту большую свободу действий, но платой за это является несколько большая вероятность допустить ошибку и более объемный код.

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

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 (англ. 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

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

Язык программирования fbd, блочная диаграмма

Шаг 4. Преобразование гистограммы с накоплением в блочную диаграмму

Скрытие нижнего ряда данных

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

  1. Выберите нижнюю часть столбцов.

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

  2. Щелкните Формат > Текущий фрагмент > Формат выделенного фрагмента. В правой части появится панель Формат.

  3. На вкладке Заливка панели Формат выберите пункт Нет заливки.

    Нижний ряд данных будет скрыт.

Создание усов для построения блочной диаграммы

Далее нужно заменить верхний и второй снизу ряды (выделены на рисунки темно-синим и оранжевым) линиями (усами).

  1. Выберите верхний ряд данных.

  2. На вкладке Заливка панели Формат выберите пункт Нет заливки.

  3. На ленте щелкните Конструктор > Добавить элемент диаграммы > Предел погрешностей > Стандартное отклонение.

  4. Выберите один из нарисованных пределов погрешностей.

  5. Откройте вкладку Параметры предела погрешностей и в области Формат задайте следующие параметры:

    • В разделе Направление установите переключатель Минус.

    • Для параметра Конечный стиль задайте значение Без точки.

    • Для параметра Величина погрешности укажите процент, равный 100.

  6. Повторите предыдущие действия для второго снизу ряда данных.

    Гистограмма с накоплением теперь должна напоминать блочную диаграмму.

Закрашивание центральных областей

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

  1. Выберите верхнюю часть блочной диаграммы.

  2. На вкладке заливКа _Амп_ Line в палитре Формат нажмите кнопку сплошная заливка.

  3. Выберите цвет заливки.

  4. Щелкните Сплошная линия на этой же вкладке.

  5. Выберите цвет контура, а также ширину штриха.

  6. Задайте те же значения для других областей блочной диаграммы.

    В результате должна получиться блочная диаграмма.

К началу страницы

Расширение файла FBD


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

Посещение этой страницы должно помочь Вам ответить конкретно на эти, или похожие вопросы:

  • Как открыть файл с расширением FBD?
  • Как провести конвертирование файла FBD в другой формат?
  • Что такое расширение формата файлов FBD?
  • Какие программы обслуживают файл FBD?

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

Что еще может вызвать проблемы?

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

Вы хотите помочь?

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

Язык функциональных блоковых диаграмм (FBD) и его применение

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

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

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

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

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

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

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

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

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

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

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

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

Смотрите также по этой теме: Языки программирования ПЛК и программная платформа автоматизации CoDeSys

Мы планируем развивать эту тему здесь:

Обучение применению и программированию ПЛК

Андрей Повный

%d1%8f%d0%b7%d1%8b%d0%ba%20fbd — с русского на все языки

Все языкиАнглийскийРусскийКитайскийНемецкийФранцузскийИспанскийШведскийИтальянскийЛатинскийФинскийКазахскийГреческийУзбекскийВаллийскийАрабскийБелорусскийСуахилиИвритНорвежскийПортугальскийВенгерскийТурецкийИндонезийскийПольскийКомиЭстонскийЛатышскийНидерландскийДатскийАлбанскийХорватскийНауатльАрмянскийУкраинскийЯпонскийСанскритТайскийИрландскийТатарскийСловацкийСловенскийТувинскийУрдуФарерскийИдишМакедонскийКаталанскийБашкирскийЧешскийКорейскийГрузинскийРумынский, МолдавскийЯкутскийКиргизскийТибетскийИсландскийБолгарскийСербскийВьетнамскийАзербайджанскийБаскскийХиндиМаориКечуаАканАймараГаитянскийМонгольскийПалиМайяЛитовскийШорскийКрымскотатарскийЭсперантоИнгушскийСеверносаамскийВерхнелужицкийЧеченскийШумерскийГэльскийОсетинскийЧеркесскийАдыгейскийПерсидскийАйнский языкКхмерскийДревнерусский языкЦерковнославянский (Старославянский)МикенскийКвеньяЮпийскийАфрикаансПапьяментоПенджабскийТагальскийМокшанскийКриВарайскийКурдскийЭльзасскийАбхазскийАрагонскийАрумынскийАстурийскийЭрзянскийКомиМарийскийЧувашскийСефардскийУдмурдскийВепсскийАлтайскийДолганскийКарачаевскийКумыкскийНогайскийОсманскийТофаларскийТуркменскийУйгурскийУрумскийМаньчжурскийБурятскийОрокскийЭвенкийскийГуараниТаджикскийИнупиакМалайскийТвиЛингалаБагобоЙорубаСилезскийЛюксембургскийЧерокиШайенскогоКлингонский

 

Все языкиАнглийскийТатарскийКазахскийУкраинскийВенгерскийТаджикскийНемецкийИвритНорвежскийКитайскийФранцузскийИтальянскийПортугальскийТурецкийПольскийАрабскийДатскийИспанскийЛатинскийГреческийСловенскийЛатышскийФинскийПерсидскийНидерландскийШведскийЯпонскийЭстонскийЧеченскийКарачаевскийСловацкийБелорусскийЧешскийАрмянскийАзербайджанскийУзбекскийШорскийРусскийЭсперантоКрымскотатарскийСуахилиЛитовскийТайскийОсетинскийАдыгейскийЯкутскийАйнский языкЦерковнославянский (Старославянский)ИсландскийИндонезийскийАварскийМонгольскийИдишИнгушскийЭрзянскийКорейскийИжорскийМарийскийМокшанскийУдмурдскийВодскийВепсскийАлтайскийЧувашскийКумыкскийТуркменскийУйгурскийУрумскийЭвенкийскийБашкирскийБаскский

Язык функциональных блоковых диаграмм (Тема) | ПЛК

ПЛК

 

Язык функциональных блоков (Function Block Diagrams) позволяет создать программу прак­тически любой сложности на основе стандартных функциональных блоков (арифметические, тригонометричес­кие, логические блоки, РID-регуляторы, блоки, описывающие некоторые законы управления, мультиплексоры и т.д.). Все программирова­ние сводится к «склеиванию» готовых компонентов (блоков). Каждый функциональный блок представляет собой прямоугольник, внутри которого имеется обозначение функции, выполняемой блоком.

При программировании используются следующие формальные правила языка FBD:

1)      Функциональные блоки могут располагаться произвольно в поле программы;

2)      Не может быть несоединенных входов и выходов функционального блока;

3)      Соединение блоков может выполняться также при помощи ссылок с определен­ными именами;

4)      Функциональные блоки выполняются слева направо, сверху вниз;

5)      На входе функционального блока может быть константное выражение, любая внутренняя или входная переменная контроллера; выходная переменная;

6)      На выходе блока может быть любая внутренняя или выходная переменная ПЛК.

Далее в таблице представлены основные функциональные блоки языка FBD.

 

Таблица 1. Некоторые функциональные блоки языка FBD

Наименование

Обозначение

Описание

1. Функции двоичного типа

NOT

Логическое отрицание

AND

Логическая

конъюнкция

OR

Логическая

дизъюнкция

XOR

Исключающее ИЛИ

SET

Присвоение

переменной

RESET

Обнуление переменной

2. Функции управления

RETURN

Возврат из

подпрограммы

GOTO

Безусловный переход

CALL

Вызов подпрограммы

TSTART

 

TSTOP

 

GSTART

 

GSTOP

 

3. Арифметические функции

ADD

Сложение

SUB

Вычитание

DIV

Деление

MUL

Умножение

4. Функции сравнения

=

Равно

<>

Не равно

>

Больше

<

Меньше

= >

Больше или равно

< =

Меньше или равно

5. Математические функции

ABS

Модуль

EXPT

Экспонента

LOG

Логарифм

SQRT

Корень

6. Тригонометрические

ACOS

Арккосинус

ASIN

Арксинус

ATAN

Арктангенс

COS

Косинус

SIN

Синус

TAN

Тангенс

 

Далее в таблице приведены примеры реализации некоторых операций на языке FBD.

 

Таблица 2. Примеры программирования на языке FBD

Выполняемая операция

Изображение

Описание

Обнаружение перепада сигнала In

 

 

Двоичная переменная Out примет зна­чение TRUE тогда и только тогда, ко­гда переменная In изменит свое состо­яние

П-регулятор

 

 

 

Рассогласование между текущим зна­чением величины Val и заданием Ref домножается на коэффициент Km и используется в качестве управляюще­го воздействия

Ограничение нижнего предела делителя In

 

 

 

Программа обеспечивает деление переменной Sampl на значение переменной Val. Переменная делителя Val снизу ограничена значением Vmin. Переменная Error принимает значение TRUE, если Val < Vmin

 

Введение в программирование функциональных блоков в RSLogix 5000

Введение в программирование функциональных блоков

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

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

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

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

Что такое функциональная блок-схема?

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

Блок-схема технологического процесса для производства бензола (Turton et al., 2012)

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

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

Предварительные требования

  • Это руководство не предполагает никаких предварительных знаний о функциональных блоках. Однако мы рассмотрим большинство блоков инструкций за более короткое время, чем в большинстве инструкций релейной логики. По большей части они работают точно так же, как и их аналоги в релейной логике; см. материалы по релейной логике.
  • Основные сведения о релейной логике
  • Studio 5000 v30.11
  • ПЛК CompactLogix - 1769-L24ER-QB1B

Основы функциональных блок-схем

Давайте рассмотрим базовый пример функционального блока, чтобы понять основы языка.Команда программирования ADD PLC берет два операнда, складывает их и сохраняет результат в выходном регистре. Напоминаем, что вот пример инструкции ADD, запрограммированной в релейной логике:

Инструкция ADD примет значение «Integer1», добавит его к «Integer2» и сохранит результат (143) в «OutputRegister». То же самое можно ожидать от функциональной блок-схемы этой инструкции. Однако компоновка другая. Вот та же инструкция, реализованная в FBD:

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

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

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

На диаграмме выше мы смотрим на тот же блок ADD. Однако теперь у нас есть два дополнительных блока: BOR и MUL. Кроме того, мы можем также заметить два тройных соединения, привязанных к «Integer2» и «OutputRegister». В схемах функциональных блоков пользователь может направлять значения регистров в несколько пунктов назначения.

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

Инструкция BOR представляет собой логическую операцию «логическое ИЛИ». Эта функция берется из функций логического элемента и оценивается как истина, когда любой из входов равен 1 или логическому ВЫСОКОМУ уровню.

Примечание: соединения к функциональному блоку BOR и от него отмечены точками, а соединения на других блоках - сплошными. Кроме того, на каждом входе и выходе этого блока есть точка, а также на входе «EnableIN» блока MUL.Это сделано специально; эти соединения представляют собой логические значения, а сплошные линии представляют собой целые числа. RSLogix и Studio 5000 не позволят пользователю направлять неверные типы данных в инструкции и из них.

Инструкции схемы пользовательских функциональных блоков

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

Инструкции по программированию функциональных блок-схем

В релейной логике мы различали условные и исполнительные блоки.Проще говоря, условия, расположенные в левой части цепочки, должны быть истинными, чтобы исполнительные блоки могли вносить изменения, указанные в них. В схемах функциональных блоков эта парадигма неочевидна, поскольку пользователь может создавать сложные макеты, и блоки становятся взаимосвязанными. Однако блоки по-прежнему можно рассматривать как условные или исполняемые. На диаграмме выше инструкция BOR использовалась для оценки состояния четырех входов, а инструкция MUL использовалась для изменения выходного регистра на основе значений входов.

Инструкции по манипулированию логическими битами

Манипулирование логическими битами включает в себя проверку условий входных битов и установку выхода на основе логики, определенной инструкцией. Это действие выполняется с помощью инструкций XIC, XIO в паре с ветвями цепочки. В схемах функциональных блоков это требует использования инструкций BAND, BOR, BXOR и BNOT. Давайте подробно рассмотрим каждый из них и обсудим возможные применения каждого из них.

Техническое примечание - Расширенные настройки FBD в RSLogix 5000

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

Чтобы получить доступ к меню настроек функционального блока в RSLogix 5000, щелкните поле «...» в верхнем левом углу функции.

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

На приведенном выше снимке экрана показано меню настроек для инструкции BAND, показанной выше.Вход «EnableIn» выбран для отображения «скрытой» настройки по умолчанию, которая может использоваться для включения или отключения инструкции на основе определенного значения тега. Другими словами, если флажок «vis» установлен для строки «EnableIn», бит «EnableIn» появится в инструкции и разрешит динамическую привязку логического значения. По умолчанию это значение установлено на 1, чтобы всегда выполнять инструкцию.

Функциональная блок-схема BAND Инструкция

Команда BAND принимает фиксированное количество входов, обрабатывает их все с помощью логического оператора AND и устанавливает выходной бит в 0 или 1 в зависимости от состояния входов.

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

Команда BAND конфигурируется для приема от одного до восьми (8) входов, которые будут преобразованы в один выходной бит. В таблице ниже показан результат обработки двух входов (LocalBOOL [1] и LocalBOOL [2]) в выход LocalBOOL [0]

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

Важное примечание: Как упоминалось выше, можно получить доступ к настройкам инструкций и настроить ДИАПАЗОН на прием до 8 различных входов. Это позволяет пользователю использовать одну инструкцию для одновременной оценки нескольких входных данных. Если необходимо оценить дополнительные входные данные, несколько инструкций можно связать вместе.

Типичный вариант использования инструкции BAND

Оператор BAND может использоваться для проверки определенных условий запуска части оборудования.Представьте себе, что у упаковщика ящиков есть несколько дверей с предохранительными выключателями на них. Несмотря на то, что для фиксации реле необходима цепь с рейтингом безопасности, программист ПЛК будет использовать ДИАПАЗОН, чтобы убедиться, что все двери закрыты, перед установкой бита «Ready_To_Run». Другими словами, перед запуском машины должны быть выполнены передняя защитная дверца, задняя защитная дверца, защитные устройства привода и другие условия. Как только этот бит установлен, оператор может подать команду пуска с помощью кнопки или HMI.

Функциональная блок-схема BOR Инструкция

Инструкция BOR, или логическое ИЛИ, служит той же цели, что и инструкция BAND. Однако BOR будет оценивать входные данные на основе логического оператора ИЛИ. В этом случае, если какой-либо из входов установлен на логическую «1», выход будет установлен на «1». Вот таблица истинности, которая используется для оценки состояния выхода:

Инструкция BOR будет принимать то же количество входов, что и BAND. Вот реализация на диаграммах функциональных блоков в RSLogix 5000.

Типичный вариант использования инструкции BOR

Инструкция BOR используется в случаях, когда любой активный вход должен запускать условие. Давайте посмотрим на то же приложение, что и выше: упаковщик ящиков. Ящик-упаковщик переводится в режим «Ход» и производит упаковку ящиков. Во время рассмотрения дела происходит ошибка. Ожидаемое действие - остановка машины. В этом случае логика, которую следует ожидать, состоит в том, что процедура будет отслеживать ЛЮБУЮ возникшую ошибку. Если дверь открыта ИЛИ если коробка отсутствует ИЛИ если давление низкое ИЛИ возникает какое-либо другое ненормальное состояние, машина неисправна, останавливается и отображается соответствующий аварийный сигнал.

Функциональная блок-схема BXOR Инструкция

BXOR, или логическая эксклюзивная инструкция ИЛИ, принимает два входа и устанавливает выход на основе набора условий. Эта логическая инструкция будет иметь значение ИСТИНА, если входы имеют разные значения. Другими словами, вы можете ожидать от этой инструкции следующую операцию или таблицу истинности:

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

Вот реализация этой инструкции в Studio 5000, а также ответ вывода, основанный на изменениях входных значений:

Типичный вариант использования инструкции BXOR

По правде В таблице выше, BXOR предоставит программисту ПЛК информацию, когда один вход активен, а другой - нет.Это важно в приложениях, в которых используется дифференциальная обратная связь. Например, рассмотрим технологический клапан с датчиками, которые определяют открытое и закрытое положение. Когда клапан находится в ОТКРЫТОМ положении, датчик 1 должен показывать «ВЫСОКИЙ», а датчик 2 - «низкий». В противоположной уставке датчик 1 должен показывать «НИЗКИЙ», а датчик 2 - «ВЫСОКИЙ». Если оба датчика показывают «ВЫСОКИЙ» или «НИЗКИЙ», клапан находится в неизвестном неисправном состоянии. Команда BXOR может использоваться для обнаружения такого состояния и подачи сигнала тревоги.

Примечание. В приведенном выше приложении программист ПЛК использовал бы таймер TON, чтобы удостовериться, что клапану предоставлено достаточно времени для перехода между двумя состояниями. В противном случае программа ПЛК может выйти из строя сразу во время перехода.

Инструкция функциональной блок-схемы BNOT

Инструкция функциональной блок-схемы BNOT принимает входное значение и изменяет его на противоположное значение. Если входной сигнал «ВЫСОКИЙ», выход будет установлен на «НИЗКИЙ». Точно так же, если вход «НИЗКИЙ», выход будет установлен на «ВЫСОКИЙ».

В Studio 5000 инструкция может быть реализована как таковая:

Общий вариант использования инструкции BNOT

Инструкция BNOT может быть реализована в релейной логике посредством использования цепочки XIO и OTE. Оценивая состояние определенного бита и устанавливая его на противоположное, программист может создать сценарий двойных условий. Например, когда бит «MachineRunning» установлен в 1, машина действительно работает. Программист ПЛК может выбрать непрерывное использование XIO бита MachineRunning, чтобы убедиться, что он НЕ работает.Однако это невозможно при программировании диаграмм функциональных блоков. Программист должен будет создать инструкцию BNOT и установить тег «MachineStopped» на значение, противоположное MachineRunning.

Команды математических функциональных блок-схем

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

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

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

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

Заключение

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

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

Функциональная блок-схема - обзор

РАБОЧИЙ ПРИМЕР

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

На Рисунке 7 показана типичная программа промышленной автоматизации в графической форме. Он осуществляет наблюдение и регулирование давления. Программа представлена ​​в виде стандартных функциональных блоков, как определено в директиве VDI / VDE 3696 (1995). Аналоговое значение измерения, управляемая переменная, получается функциональным блоком типа IN_A из входного канала с адресом INADR и масштабируется в диапазоне от XMIN до XMAX до физической величины с единицей XUNIT.Управляемая переменная подается в функциональный блок типа C, выполняющий пропорционально-интегрально-дифференциальное (ПИД) регулирование в соответствии с параметрами управления KP, TN и TV. Результирующая регулирующая переменная преобразуется в аналоговое значение с помощью выходного функционального блока типа OUT_A и переключается на канал, адресованный OUTADR. Кроме того, контролируемая переменная также контролируется с помощью двух экземпляров типа стандартного функционального блока концевого выключателя SAM, чтобы она находилась в пределах, заданных параметрами LS и HS.Если управляемая переменная находится за пределами этого диапазона, один из выходов QS двух экземпляров SAM становится логически истинным и, следовательно, выходом функционального блока типа ИЛИ. Это, в свою очередь, приводит к тому, что функциональный блок сигнализации типа AM и сохранения сообщений создает запись о сигнале тревоги по времени. Входам стандартных функциональных блоков, входящих в состав программы, которые не подаются ни внешне видимыми входами самой программы, ни внутренне выходами других стандартных функциональных блоков, присваиваются постоянные значения.

Рисунок 7. Программа регулирования и контроля давления

Представление списка цепей приведенного выше примера программы, сгенерированного служебной программой инструмента схематического ввода OrCAD, показано на рисунке 8. Списки цепей представляют собой текстовые представления, которые полностью эквивалентны: кроме геометрических аспектов - к оригинальным чертежам.

Рисунок 8. Представление списка цепей примера программы

Объектный код интерпретатора, окончательно полученный путем автоматического преобразования представления списка цепей примерной программы, показан на рисунке 9.Он показывает (читаемую) версию на ассемблере. Из различных типов функциональных блоков, представленных в примере, C, SAM и AM имеют внутренние переменные состояния (а именно, C имеет 3, а два других типа - по 1).

Рисунок 9. Представление объектного кода примера программы

Объектный код, перечисленный на рисунке 9, показывает, что все вызовы экземпляров функциональных блоков, происходящие в программе, напрямую отображаются на вызовы процедур. Каждый из них начинается с инструкции GET, которая передает идентификацию (например,g., ID-C) соответствующего блока из соответствующего места в ПЗУ интерпретатору. Затем входные параметры предоставляются путем чтения соответствующих ячеек ПЗУ (для констант) или ОЗУ (для параметров программы и промежуточных значений). Наконец, если они есть, значения переменных внутреннего состояния процедуры считываются из соответствующих ячеек RAM. Существует набор соответственно помеченных (например, RAM-loc-B2-isv i ) ячеек для каждого экземпляра функционального блока с внутренними состояниями.Когда интерпретатор получил все эти данные, он выполняет процедуру и возвращает, если таковые имеются, значения выходных параметров и / или переменных внутреннего состояния, которые затем сохраняются в соответствующих ячейках ОЗУ. Связь между выходом одного функционального блока и входом другого реализуется инструкциями PUT и GET: первая сохраняет выходное значение в ячейке ОЗУ для временного значения (например, TMP-X), а вторая загружая его оттуда. Другими словами, каждый узел в списке цепей вызывает ровно одну передачу от интерпретатора к ячейке RAM и одну или несколько передач оттуда к интерпретатору.Детали реализации различных процедур являются частью встроенного ПО архитектуры и, таким образом, остаются невидимыми.

Согласно описанной выше структуре объектных программ интерпретатора, процесс обратного преобразования - дизассемблирование и декомпиляция объектного кода - оказывается очень простым. Чтобы выполнить обратную трансляцию, сначала ищутся инструкции STEP, которые четко отделяют друг от друга различные (последовательные) шаги, содержащиеся в программе. Код между двумя инструкциями STEP соответствует одной функциональной блок-схеме.Затем интерпретируется первая инструкция GET. Он определяет функциональный блок, который нужно нарисовать в функциональной блок-схеме, которую нужно настроить. Сравнивая последующие GET с описанием функционального блока, содержащимся в используемой библиотеке, можно легко проверить правильность передачи параметров. Более того, для каждого такого GET, который соответствует правильному параметру (а не внутренней переменной состояния), на диаграмме рисуется ссылка. Есть два типа ссылок. Во-первых, это соединения программных входов или констант со входами функциональных блоков или от выходов функциональных блоков к программным выходам.Во-вторых, это полусоединения, а именно, от выходов функциональных блоков до названных точек соединения на схеме, то есть узлов списка цепей, или от таких точек к входам функциональных блоков. Когда диаграмма будет полностью нарисована, названия этих точек можно удалить. Что касается переменных внутреннего состояния, необходимо проверить, что соответствующие ячейки ОЗУ правильно инициализированы, и что новые значения, полученные в результате выполнения функционального блока, записываются точно в те же места, откуда внутренние состояния были прочитаны в курсе. вызова блока.Процесс идентификации функционального блока и проверки передачи параметров, а также отрисовка символа для блока и соответствующих соединений повторяется до тех пор, пока не будет достигнута инструкция STEP, которая завершает шаг и, таким образом, соответствующую диаграмму функционального блока.

Что такое функциональные блоки ПЛК и как их классифицирует МЭК 61131-3?

Согласно стандарту IEC 61131-3 существует разница между функцией и функциональным блоком при программировании ПЛК.Основное отличие касается внутренней памяти. Так, например, функцию можно описать как что-то вроде уравнения или формулы, которая принимает входные данные и вычисляет выходное значение. Более того, он всегда возвращает одно и то же выходное значение для одних и тех же входов. Напротив, функциональный блок полагается на внутреннюю память. Таким образом, можно иметь другое выходное значение с теми же входами, потому что в памяти хранится другое значение, которое влияет на окончательное выходное значение.

Функциональные блоки составляют основу языка программирования ПЛК для функциональных блок-схем (FBD), одного из пяти языков, указанных в стандарте, остальные являются двумя текстовыми языками [IL (Список инструкций) и ST (Структурированный текст)] и тремя графическими. языки, помимо FBD, включая LD (Ladder Diagram) и SFC (Sequential Function Charts).

Пример функциональной блок-схемы, на которой показаны типичные функциональные блоки, соединенные вместе. (Источник изображения: Википедия.)

В FBD функциональные блоки описывают функцию между входными и выходными переменными. Входы и выходы блоков соединяются между собой через соединения или линии в среде программирования. Блок представляет ту или иную функцию; например, это может быть элементарная функция, такая как ПЕРЕМЕЩЕНИЕ или СРАВНЕНИЕ, или типичная логическая функция, такая как логическое И или логическое ИЛИ.

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

Более подробную информацию о функциональных блоках и стандартах IEC 61131-3 можно найти на веб-сайте Open PLC.

На веб-сайте ISA также есть информация о стандарте IEC 61131-3.

Руководство для начинающих по языкам программирования ПЛК

Какие языки программирования ПЛК самые популярные? IEC (Международная электротехническая комиссия) официально признает пять языков программирования ПЛК в стандарте IEC61131-3.Это лестничная диаграмма (LD), функциональный блок (FBD), структурированный текст (ST), список инструкций (IL) и последовательная функциональная диаграмма (SFC). В этой статье мы рассмотрим каждый из пяти языков программирования ПЛК, чтобы помочь вам определить, что лучше всего подходит для вашего следующего проекта промышленной автоматизации.

TL; DR: популярные языки программирования ПЛК
  • Лестничная диаграмма (LD)
  • Функциональный блок (FBD)
  • Структурированный текст (ST)
  • Список инструкций (IL)
  • Последовательная функциональная схема (SFC)

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

1. Релейная диаграмма (LD) или лестничная логика

Первый язык МЭК 61131-3 - это лестничная диаграмма (LD), которую обычно называют лестничной логикой. Это самый популярный язык ПЛК, поскольку он был разработан для замены проводных релейных систем управления.Если вы хотите выучить какой-либо из языков, я настоятельно рекомендую начать с языка лестничных диаграмм, потому что его легко читать, комментировать и отлаживать, пока ваша система подключена к сети. У лестничных диаграмм есть ограничения, потому что вы можете использовать только определенные блоки. Кроме того, это не очень хорошо для управления движением; однако вы можете обойтись написанием большинства ваших систем управления, используя только релейные диаграммы.

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

2. Схема функциональных блоков (FBD)

Второй по популярности язык программирования ПЛК называется функциональной блок-схемой (FBD). В схеме функциональных блоков программные блоки соединяются вместе для создания программы.Многие из тех же команд, что и в релейной логике, используются в FBD, но их часто легче читать и осмыслять. Дополнительным преимуществом использования функциональной блок-схемы является то, что вы можете объединить множество строк кода в один блок.

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

3. Структурированный текст (ST)

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

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

4. Список инструкций (IL)

Далее идет список инструкций (IL). Этот язык программирования состоит из многих строк кода, по одной инструкции на строку. Он читается сверху вниз и слева направо. Список инструкций очень прост для чтения, потому что каждая строка выполняется последовательно.После того, как вы выучите мнемонические коды (Load = LD, Start = ST и т. Д.), Instruction List станет отличным языком, который можно добавить в свой арсенал, потому что вы можете создавать компактный и критичный по времени код в соответствии с требованиями вашего приложения.

С другой стороны, список инструкций может быть сложнее для отладки и устранения ошибок, чем некоторые другие языки. Он также немного ограничен, когда дело доходит до структурирования кода, потому что «GOTO» - это почти все, что вы можете сделать, чтобы выйти из списка и запустить дополнительные команды.

5. Последовательная функциональная схема (SFC)

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

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

Как выбрать язык программирования ПЛК для изучения?

Ответ на этот вопрос будет зависеть от нескольких вещей:

  1. Какой язык в настоящее время используется на вашем рабочем месте или в лаборатории;
  2. Приложение, которое вы разрабатываете;
  3. Марка вашего ПЛК и пакеты программного обеспечения, к которым у вас есть доступ; и
  4. Сценарий вашей карьеры.

Давайте рассмотрим каждый из этих моментов более подробно.

1. Какой язык ПЛК используется на вашем рабочем месте

Как правило, если вы работаете на заводе или в лаборатории с ПЛК, уже существует универсальный язык, который должен использовать каждый. В большинстве случаев это лестничная диаграмма, независимо от приложения. Если вы занимаетесь ПЛК, потому что этого требует ваша работа, я настоятельно рекомендую выяснить, какой язык (а) уже используется в оборудовании, а затем сначала ознакомиться с ними.Нет смысла изучать ST, если все ваши машины работают с LD.

2. Приложение для автоматизации, которое вы разрабатываете

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

3. Марка используемого вами ПЛК

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

4. Ваш карьерный путь

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

Места для изучения программирования ПЛК

Существует множество ресурсов для изучения программирования ПЛК, включая обучение поставщиков, онлайн-курсы и YouTube.Я обнаружил, что обучение поставщиков (например, обучение Rockwell ControlLogix) очень полезно, но только в том случае, если вы посещаете его в том порядке, в котором они должны проходить. Обучение поставщиков может стоить тысячи долларов, поэтому, если вы хотите профинансировать собственный план разработки PLC, я рекомендую несколько курсов Udemy, чтобы вы начали.

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

Поддержка такого содержания

Какие языки программирования поддерживаются в RemoteConnect x70 Logic Editor?

Какие языки программирования поддерживаются в RemoteConnect x70 Logic Editor ?
Для платформ устройств SCADAPack x70 доступны следующие логические языки IEC 61131-3:
· Функциональная блок-схема (FBD)
· Структурированный текст (ST)
· Релейная диаграмма (LD)
· Список инструкций (IL)
· Последовательная функция Chart (SFC)
Устройства SCADAPack x70 не поддерживают логическое программирование LL984.

Функциональная блок-схема (FBD):
Редактор FBD используется для графического программирования функциональных блоков в соответствии с IEC 61131-3.
Функциональная блок-схема - это графический язык, используемый для построения сложных процедур из библиотеки функций.
Стандартные библиотечные функции, такие как математика и логика, могут быть объединены с пользовательскими библиотечными функциями, такими как управление последовательным портом, ПИД-регуляторы и для создания прикладных программ функциональных блок-схем.

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

Релейная диаграмма (LD):
Релейная диаграмма - это графический язык, объединяющий контакты и катушки для построения логических дискретных процедур управления. Этот язык идентичен релейной логике, используемой многими программируемыми Logic RTU.
Структура программы LD соответствует ступени для переключения реле.
Левая шина питания расположена в левой части редактора LD.
Эта левая шина питания соответствует фазе (L-провод) ступени.
При программировании LD, как и в цепочке, "обрабатываются" только объекты LD, которые связаны с источником питания, соединенным с левой шиной питания.
Правая шина питания соответствует нейтральному проводу.
Все контакты и входы FFB должны быть прямо или косвенно связаны с левой шиной питания, а все катушки и выходы FFB должны быть прямо или косвенно связаны с правой шиной питания, чтобы обеспечить протекание тока.
Группа связанных объектов, которые не связаны с другими объектами (кроме шин питания), называется сетью или звеном.

Список инструкций (IL):
Список инструкций (IL) - один из 5 языков, поддерживаемых начальными версиями стандарта IEC 61131-3, он разработан для программируемых логических контроллеров (ПЛК) и RTU, это низкоуровневый язык и напоминает ассемблер.
Программа IL (список инструкций) состоит из списка операторов, которые последовательно выполняются контроллером.
Используя эти операторы, вы можете вызывать функциональные блоки, функции и процедуры условно или безоговорочно, обрабатывать назначения и переходы условно или безоговорочно внутри раздела.

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

Современные языки программирования и потребность в экспертах

Марсель Луман

Менеджер по технологиям

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

Старый стандарт: IEC 61131-3

Давайте возьмем проблему за рога. В отрасли не хватает специалистов по языкам программирования IEC 61131-3. IEC 61131 - это открытый международный стандарт для программируемых логических контроллеров (ПЛК).Часть 3 (IEC 61131-3) стандарта касается основных программных архитектур и языков программирования. Он определяет три графических языка программирования, релейную диаграмму (LD), функциональную блок-схему (FBD) и последовательную функциональную схему (SFC), а также текстовые языки программирования, структурированный текст (ST) и список инструкций (IL, не рекомендуется в 2013 г. выпуск 3-го издания).

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

Вот заходи поиграть.Он очень похож на высокоуровневые языки программирования, такие как Python и C. Он предоставляет условные операторы (IF ... THEN, CASE) и строки, заканчивающиеся точкой с запятой. Так проще проводить расчеты и анализ данных, и это помогает писать компактные, более быстрые программы для более сложных рабочих нагрузок. Недостатком является то, что следовать по пути в программе ST и устранять неполадки без знания ST практически невозможно. В результате инженеры по управлению, как правило, используют ST за кулисами, инкапсулированные в виде функций или функциональных блоков и являющиеся черными ящиками для пользователей, встраивающих их в свою графическую программу ПЛК.Это устраняет сложность основной программы ПЛК, но позволяет инженеру писать код более эффективно.

Новые эксперты

Итак, как мне привлечь программистов в мою компанию? Большинство из них ничего не знают о языках программирования IEC 61131-3, и объявление о вакансии, в котором это требуется, вероятно, не привлечет их внимания. В связи с тенденцией развития Интернета вещей, анализа данных машин и их хранения в облаке, классических языков программирования для автоматизации уже недостаточно.Здесь в игру вступают современные языки программирования. Они более универсальны, гибки и предназначены для решения сложных задач. Одного из них часто хорошо знает студент технического курса, и это ваши потенциальные сотрудники. Для этого нужны новые разработчики с разными навыками.

Языки высокого уровня как новые возможности

Возникает вопрос: какие языки программирования изучают в школе и какие языки сегодня наиболее популярны? Последнее исследование используемых языков программирования в университетах было проведено некоторое время назад.. Согласно исследованию Ассоциации вычислительной техники (ACM) [i], опубликованному в 2014 году, для восьми из десяти ведущих ИТ-институтов США язык программирования Python находится на вершине учебной программы. Исследование также показывает переход от Java к Python за годы до 2014 г. По статистике Redmonk [ii] Python уже занял лидирующую позицию по сравнению с Java, а в рейтинге Tiobe [iii] Python большими шагами движется к вершине.


Графика: RedMonk

Заключение

В заключение есть много возможностей восполнить нехватку инженеров по автоматизации.Некоторые языки программирования легко понять и поддерживать, не будучи опытным разработчиком, а другие предназначены для опытных профессионалов. Но чтобы получить максимальную отдачу от современных ПЛК, таких как PLCnext Control, рекомендуется использовать языки высокого уровня, такие как C ++, C # или Java, и сочетать их с обычной разработкой IEC 61131. поиск новых разработчиков, которые, вероятно, не являются экспертами в системах автоматизации и языках программирования IEC 61131-3. Они могут адаптировать свои знания, работая со своими предпочтительными языками программирования и используя весь потенциал технологии PLCnext.

[i] https://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-u-s-universities/fulltext

[ii] https://redmonk.com/sogrady/2020/02/28/language-rankings-1-20/

[iii] https://www.tiobe.com/tiobe-index/

Программирование ПЛК: функциональная блок-схема, список инструкций и лестничная диаграмма

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

К счастью, IEC 61131-3 (Международная электротехническая комиссия) стандартизировал несколько языков программирования ПЛК в 1993 году: список инструкций (IL), релейная диаграмма (LD), функциональная блок-схема (FBD), структурированный текст (ST) и последовательная функция. диаграмма (SFC). В этой статье мы рассмотрим первые три.

RIA15 Индикатор с питанием от контура для 4..,20 мА или HART®

Список инструкций

Если мы запрограммировали микроконтроллеры на ассемблере, IL покажется знакомым. Один из самых простых языков программирования ПЛК (по крайней мере, теоретически), IL движется шаг за шагом и упрощает ввод ряда простых математических функций.

Как и сборка, IL состоит из множества строк кода, одна строка для одной операции. У этих операций может быть три модификатора.Модификатор «N» отменяет результат, «C» делает его условным, а «(» задерживает его. Этот список операторов и модификаторов даст нам представление о том, что мы можем сделать.

Предоставлено инженером на диске

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

Однако у IL слабая семантика и отсутствие структуры кода. Если неаккуратный человек напишет код, у другого человека могут возникнуть проблемы с его чтением. Отсутствие визуальной структуры также может затруднить определение того, что программа должна делать или почему она не делает то, что должна. А сложные вычисления сложно настроить.

Чтобы узнать о HART, вы можете прочитать статью Visaya об основах связи HART

Лестничная диаграмма

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

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

Предоставлено программируемыми логическими контроллерами
W. Bolton

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

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

Здесь вы можете увидеть простую программу с релейной диаграммой.

Предоставлено PLC Academy
В этом видео вы можете увидеть простую лестничную логику

iDTM-EDD (EU) Professional HART / FF DTM от CodeWrights

DTM с официальной библиотекой DD всех DD, зарегистрированных в FieldComm Group

Функциональная блок-схема

Как и LD, FBD нагляден и интуитивно понятен для тех, кто работает с электричеством.Для тех, кто привык к логическим выражениям и цифровым системам, FBD будет более интуитивно понятным, чем лестница. Это тоже похоже на схему подключения. Однако здесь мы «соединяем» блоки вместе, в то время как LD имеет больше логики реле. В FBD у вас есть входы слева от функциональных блоков и выходы справа.

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

Чтобы узнать о Profinet, вы можете прочитать статью Visaya здесь

Предоставлено программируемыми логическими контроллерами
W.Bolton

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

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

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