программирование ПЛКуроки

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

Опубликовано
CoDeSys и ОВЕН

Мы продолжаем изучать программирование ПЛК ОВЕН в универсальной среде программирования CoDeSys. В этой публикации описаны языки программирования, используемые в проектах CoDeSys. С предыдущей публикацией по программированию ПЛК, посвященной знакомству с типами данных, используемыми в проекте, и принципами объявления переменных CoDeSys, можно ознакомиться здесь.

Среда программирования CoDeSys поддерживает весь спектр стандартизированных языков программирования (стандарт IEC61131-3, МЭК 61131-3), а именно: 

  • LD (Ladder Diagram, релейно-контактные схемы) — графический язык, представляющий собой программную реализацию электрических схем на базе электромагнитных реле.
  • FBD (Function Block Diagram, функциональные блоковые диаграммы) — графический язык, представляющий собой набор связанных функциональных блоков, каждый из которых выражает некую подпрограмму.
  • SFC (Sequential Function Chart, последовательностные функциональные диаграммы) — графический высокоуровневый язык, созданный на базе математического аппарата сетей Петри и описывающий последовательность состояний и условий переходов.
  • ST (Structured Text, структурированный текст) — текстовый Паскалеподобный язык программирования.
  • IL (Instruction List, список инструкций) — текстовый ассембероподобный язык программирования.

Кроме того, CoDeSys включает поддержку, основанного на FBD, редактора Continuous Function Chart (CFC).

Диаграммы SFC

Sequential Function Chart (последовательные функциональные схемы) — графический язык, предназначенный для написания программ последовательного управления технологическим процессом, описывающий его в форме близкой к диаграмме состояний. Аналогом может служить сеть Петри с разноцветными фишками. В каждом состоянии система выполняет действия (подпрограммы) с определенными модификаторами.

Сеть Петри

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

Пример сети Петри
Пример сети Петри. Белыми кружками обозначены позиции, полосками — переходы, чёрными кружками — метки.

Графическая диаграмма SFC

В отличие от сетей Петри дуги в SFC имеют выраженную направленность сверху вниз и отражаются прямыми линиями. Позиции в SFC называют шагами или этапами. На диаграмме они отражаются в виде прямоугольников. Задать несколько стартовых шагов в SFC нельзя. Только один шаг диаграммы является начальным.

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

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

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

Основные элементы языка SFC

Основными элементами языка являются:

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

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

Язык IL (Instruction List) — список инструкций. Это типичный ассемблер с аккумулятором и переходами по меткам. Набор инструкций стандартизован и не зависит от конкретной целевой платформы. Поскольку IL самый простой в реализации язык, он получил очень широкое распространение до принятия стандарта МЭК. Язык IL позволяет работать с любыми типами данных, вызывать функции и функциональные блоки, реализованные на любом языке. Таким образом, на IL можно реализовать алгоритм любой сложности, хотя текст будет достаточно громоздким.

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

Метка:ОператорОперандКомментарий

Метка инструкции не является обязательной, она ставится только там, где нужно. Оператор присутствует обязательно. Операнд необходим почти всегда. Комментарий — необязательное поле, записывается в конце строки. Ставить комментарии между полями инструкции нельзя. Пример IL-программы:

Метка1:LDx(*пример IL*)
MULA
ADDB
STY
Пример реализации на IL линейного преобразование (масштабирование сигнала) вида Y(x)=A*x+B

Аккумулятор IL является универсальным контейнером, способным сохранять значения переменных любого типа. Команды сравнения сравнивают значение операнда и аккумулятора, результат сравнения ИСТИНА или ЛОЖЬ вновь помещается в аккумулятор.

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

Более подробно рассмотрим модификаторы и операторы языка IL в следующих уроках.

Структурированный текст ST

Язык ST (Structured Text) — это язык высокого уровня. Синтаксически ST представляет собой несколько адаптированный язык Паскаль. Вместо процедур Паскаля в ST используются компоненты программ стандарта МЭК.

Удобен для написания больших программ и работы с аналоговыми сигналами и числами с плавающей точкой.

Основой ST-программы служат выражения. Результат вычисления выражения присваивается переменной при помощи оператора «:=», как и в Паскале. Каждое выражение обязательно заканчивается точкой с запятой «;». Выражение состоит из переменных констант и функций, разделенных операторами:

iVarl := 1 + iVar2 / ABS(iVar2);

Стандартные операторы в выражениях ST имеют символьное представление, например математические действия: +, *, /, операции сравнения и т. д.

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

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

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

Тип выражения определяется типом результата вычислений.

Приоритет операций

Вычисление выражения происходит в соответствии с правилами приоритета операций. Первыми выполняются операции с наивысшим приоритетом.

В порядке уменьшения приоритета операции располагаются так:

  • выражение в скобках;
  • вызов функции;
  • степень ЕХРТ;
  • замена знака (-);
  • отрицание NOT умножение, деление и деление по модулю MOD;
  • сложение и вычитание (+, -);
  • операции сравнения (<, >, <=, >=);
  • равенство (=);
  • неравенство (<>);
  • логические операции AND, XOR и OR.

Пустое выражение состоит из точки с запятой «;».

Управление порядком выполнения кода

С помощью языка ST можно реализовать все виды управления порядком выполнения кода:

  • последовательное выполнение кода;
  • ветвление (с помощью оператора выбора IF-THEN);
  • циклическое (с помощью операторов циклов с предусловием (WHILE) и постусловием (REPEAT), а также цикла с перечислением (FOR)).
Пример реализации на языке ST
Пример реализации на языке ST вычисления максимума в массиве

Более подробно рассмотрим операторы языка ST в следующих уроках.

Существует расширенный стандарт IEC 61131-3, который вносит элементы объектно-ориентированного программирования путём расширения возможностей функциональных блоков (наследование, свойства, методы, интерфейсы). Также расширенный стандарт предполагает введение новых типов данных, таких как указатели, объединения, строки с двумя байтами на символ, ссылки и прочее.

Релейные диаграммы LD

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

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

LD-диаграмма

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

Пример реализации подпрограммы с помощью диаграмм LD
Пример реализации подпрограммы с помощью диаграмм LD выражения
Lamp1 := (Switch1 OR Switch2) AND Switch3 AND ((Switch4 AND Switch6) OR Switch5);

В LD каждому контакту ставится в соответствие логическая переменная, определяющая его состояние. Если контакт замкнут, то переменная имеет значение ИСТИНА. Если разомкнут ЛОЖЬ. Имя переменной пишется над контактом и фактически служит его названием.

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

Цепь может быть либо замкнутой (ON), либо разомкнутой (OFF). Это отражается на обмотке реле и соответственно на значении логической переменной обмотки (ИСТИНА/ЛОЖЬ).

Основныt элементs языка LD

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

Различаются нормально замкнутые и нормально разомкнутые контактные элементы, которые можно сопоставить с нормально замкнутыми и нормально разомкнутыми кнопками в электрических цепях:

  • ─┤ ├─ Нормально разомкнутый контакт разомкнут при значении ложь назначенной ему переменной и замыкается при значении истина.
  • ─┤/├─ Нормально замкнутый контакт, напротив, замкнут, если переменная имеет значение ложь, и разомкнут, если переменная имеет значение истина.
  • ─()─ Итог логической цепочки копируется в целевую переменную, которая называется катушка (coil). Это слово имеет обобщённый образ исполнительного устройства, поэтому в русскоязычной документации обычно говорят о выходе цепочки, хотя можно встретить и частные значения термина, например катушка реле.

Более подробно рассмотрим элементы и графические ключи диаграмм LD в следующих уроках.

Функциональные диаграммы FBD

FBD (Function Block Diagram) – это графический язык программирования. Диаграмма FBD очень напоминает принципиальную схему электронного устройства на микросхемах. В отличие от LD «проводники» в FBD могут проводить сигналы (передавать переменные) любого типа (логический, аналоговый, время и т. д.). Иногда говорят, что в релейных схемах соединительные проводники передают энергию. Проводники FBD тоже передают энергию, но в более широком смысле. Очевидно, что шины питания и контакты здесь уже неэффективны. Шины питания на FBD диаграмме не показываются. Выходы блоков могут быть поданы на входы других блоков либо непосредственно на выходы ПЛК. Сами блоки, представленные на схеме как «черные ящики», могут выполнять любые функции.

Диаграмма FBD

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

Пример реализации с помощью FBD-диаграммы
Пример реализации выражения result := 2*(A/B); с помощью FBD-диаграммы

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

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

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

Более подробно рассмотрим элементы и графические ключи диаграмм FBD в следующих уроках.

Иные реализации языка FBD

Существует много практических реализаций языка FBD с определенными расширениями или ограничениями. Имеет место практика, при которой различными организациями могут разрабатываться специализированные версии FBD, в том числе оптимизированные для определённых типов программируемых-логических контроллеров. Таким примером может служить язык Canny Function Diagram (CFD), а также расширение языка FBD в среде CoDeSys добавляющее в него методологию объектно-ориентированного программирования.

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


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

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

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