Описание работы с языками МЭК 61131-3

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

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

  • Структурированный текст (ST – Structured Text);

  • Последовательные функциональные схемы (SFC – «Sequential Function Chart»);

  • Диаграммы функциональных блоков (FBD – Function Block Diagram);

  • Релейно-контактные схемы, или релейные диаграммы (LD – Ladder Diagram);

  • Список инструкций (IL – Instruction List).

Графическими языками являются SFC, FBD, LD. Языки IL и ST являются текстовыми.

Описание работы с текстовыми редакторами языков ST и IL

Текстовый редактор языков ST и IL позволяет создавать и редактировать алгоритмы и логику выполнения программных модулей на языках ST и IL.

_images/27.png

Редактор языков ST и IL

Он обеспечивают следующие возможности:

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

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

  • Сворачивание кода структурных элементов языка: определения функции, определение типа и т.д.

Увеличение или уменьшение размера шрифт выполняется с помощью Ctrl + <колёсико мыши>.

Конструкции языка ST

К конструкциям языка ST относятся:

  1. Арифметические операции

  2. Логические (побитовые) операции

  3. Операции сравнения

  4. Операция присвоения

  5. Конструкция IF – ELSE

  6. Цикл FOR

  7. Цикл WHILE

  8. Конструкция CASE.

1. Арифметические операции

К арифметическим операциям относятся:

  • «+» – сложение;

  • «–» – вычитание;

  • «*» – умножение;

  • «/» – деление;

  • «mod» – остаток от целочисленного деления.

2. Логические (побитовые) операции

К данным операциям относятся:

  • «OR» – Логическое (побитовое) сложение;

  • «AND» – Логическое (побитовое) умножение;

  • «XOR» – Логическое (побитовое) «исключающее ИЛИ»;

  • «NOT» – Логическое (побитовое) отрицание.

3. Операции сравнения

Поддерживаются следующие операции сравнения:

  • «=» – сравнение на «равенство»;

  • «<>» – сравнение на «неравенство»;

  • «>» – сравнение на «больше»;

  • «>=» – сравнение на «не меньше»;

  • «<» – сравнение на «меньше»;

  • «<=» – сравнение на «не больше».

В качестве результата сравнения всегда используется значение типа BOOL.

4. Операция присвоения

Для обозначения присвоения используется парный знак «:=». В правой и левой части выражения должны быть операнды одного типа (автоматического приведения типов не предусмотрено). В левой части выражения (принимающая сторона) может быть использована только переменная. Правая часть может содержать выражение или константу.

5. Конструкция IF – ELSE

Конструкция IF–ELSE имеет следующий формат:

IF<логическое выражение>THEN<выполняемое выражение>

[ELSE<выполняемое выражение>]

END_IF;

Например:

IF Vary<> 0

THEN Var4 := 1

ELSE Var4 := 10;

END_IF;

Конструкция допускает вложенность, т.е. внутри одного IF может быть еще один и т.д.

Например:

IF Var5 > 10 THEN

IF Var5 < Var2 + 1

THEN Var5 := 10;

ELSE Var5 := 0;

END_IF;

END_IF;

6. Цикл FOR

Служит для задания цикла с фиксированным количеством итераций.

Формат конструкции следующий:

FOR<переменная управления> := <выражение1> TO <выражение2>

[BY< выражение3>] DO

<выполняемое выражение>

END_FOR;

Примечание

Выражения <выражение1> … <выражение1> вычисляются до входа в цикл, поэтому изменения значений переменных, входящих в любое из этих выражений, не приведет к изменению числа итераций.

При задании условий цикла считается, что <переменная управления>, <выражение1> …<выражение3> имеют тип INT. Выход из цикла будет произведен в том случае, если значение переменной цикла превысит значение <выражение3>.

Например:

FOR i := 1 TO 10 BY 2 DO

k := k * 2;

END_FOR;

Оператор BY задает приращение переменной цикла (в данном случае i будет увеличиваться на 2 при каждом проходе по циклу). Если оператор BY не указан, то приращение равно 1.

Например:

FOR i := 1 TO k / 2 DO

var3 := var3 + k;

k := k – 1;

END_FOR;

Внутри цикла могут использоваться другие циклы, операторы IF и CASE. Для выхода из цикла (любого типа) может использоваться оператор EXIT.

Например:

FOR i := 1 TO 10 BY 2 DO

k := k * 2;

IF k > 20 THEN

EXIT;

END_IF;

END_FOR;

Другой пример:

k := 10;

FOR i := 1 TO k / 2 DO

k := 20;

END_FOR;

На строках между DO и END_FOR производится изменение переменной k, при этом эти строки выполнятся пять раз.

Например:

FOR i := 1 TO 5 DO

i := 55;

END_FOR;

При первом проходе значение i будет равно 1, потом в теле цикла изменится на 55, но на втором проходе значение i станет равно 2 – следующему значению по условиям цикла.

7. Цикл WHILE

Служит для определения цикла с предусловием. Цикл будет исполняться до тех пор, пока выражение в предложении WHILE возвращает TRUE.

Формат конструкции следующий:

WHILE<Boolean–Expression>DO<выполняемое выражение>

END_WHILE;

Значение <Boolean–Expression> проверяется на каждой итерации. Завершение цикла произойдет, если выражение <Boolean–Expression> вернет FALSE.

Например:

k := 10;

WHILE k > 0 DO

i := i + k;

k := k – 1;

END_WHILE;

Внутри цикла могут использоваться другие циклы, операторы IF и CASE. Для досрочного завершения цикла используется оператор EXIT.

8. Конструкция CASE

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

Формат конструкции следующий:

CASE<выражение>OF

CASE_ELEMENT {CASE_ELEMENT}

[ELSE<выполняемое выражение>]

END_CASE;

CASE_ELEMENT – это список значений, перечисленных через запятую. Элементом списка может быть целое число или диапазон целых чисел. Диапазон задается следующим образом BEGIN_VAL.. END_VAL.

Если текущее значение <выражение> не попало ни в один CASE_ELEMENT, то управление будет передано на предложение ELSE. Если предложение ELSE не указано, то никаких действий выполнено не будет.

Значение <выражение> может быть только целым.

Например:

CASE k OF

1:

k := k * 10;

2..5:

k := k * 5;

i := 0;

6, 9..20:

k := k – 1;

ELSE

k := 0;

i := 1;

END_CASE;

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

– наборы значений внутри одного CASE не должны пересекаться;

– при указании диапазона значений начало диапазона должно быть меньше его конца.

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

Конструкции языка IL

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

Операторы языка IL

Оператор

Описание

LD

Загрузить значение операнда в аккумулятор

LDN

Загрузить обратное значение операнда в аккумулятор

ST

Присвоить значение аккумулятора операнду

STN

Присвоить обратное значение аккумулятора операнду

S

Если значение аккумулятора TRUE, установить логический операнд

R

Если значение аккумулятора FALSE, сбросить логический операнд

AND

«Поразрядное И» аккумулятора и операнда

ANDN

«Поразрядное И» аккумулятора и обратного операнда

OR

«Поразрядное ИЛИ» аккумулятора и операнда

ORN

«Поразрядное ИЛИ» аккумулятора и обратного операнда

XOR

«Поразрядное разделительное ИЛИ» аккумулятора и операнда

XORN

«Поразрядное разделительное ИЛИ» аккумулятора и обратного операнда

ADD

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

SUB

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

MUL

Умножение аккумулятора на операнд, результат записывается в аккумулятор

DIV

Деление аккумулятора на операнд, результат записывается в аккумулятор

GT

Значение аккумулятора сравнивается со значением операнда(>(greater than)). Значение (TRUE или FALSE) записывается в аккумулятор

GE

Значение аккумулятора сравнивается со значением операнда (>=greater than or equal). Значение (TRUE или FALSE) записывается в аккумулятор

EQ

Значение аккумулятора сравнивается со значением операнда (=(equal)). Значение (TRUE или FALSE) записывается в аккумулятор

NE

Значение аккумулятора сравнивается со значением операнда <>(not equal). Значение (TRUE или FALSE) записывается в аккумулятор

LE

Значение аккумулятора сравнивается со значением операнда (<=(less than or equal to)). Значение (TRUE или FALSE) записывается в аккумулятор

LT

Значение аккумулятора сравнивается со значением операнда (<(less than)). Значение (TRUE или FALSE) записывается в аккумулятор

JMP

Переход к метке

JMPC

Переход к метке при условии, что значение аккумулятора TRUE

JMPCN

Переход к метке при условии, что значение аккумулятора FALSE

_images/28.png

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

Описание работы с графическими редакторами языков FBD, LD SFC

Данные редакторы позволяют создавать и редактировать алгоритмы и логику выполнения программных модулей, написанных на языках FBD, SFC и LD.

Конструкции языка FBD

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

_images/29.png

Панель редактирования FBD диаграмм

С помощью данной панели можно добавить все элементы языка FBD. Назначение каждой кнопки описано в таблице ниже.

Кнопки панели редактирования FBD диаграммы

Внешний вид кнопки

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

Функции кнопки

_images/pointer.png

Выделение объектов на диаграмме

Перевод указателя мыши в состояние, при котором можно осуществлять выделение объектов в редакторе

_images/hand.png

Перемещение диаграммы

Перевод указателя мыши в состояние, при котором можно изменять размеры редактора

_images/cmt.png

Создать новый комментарий

Вызов диалога создания комментария

_images/var.png

Добавить переменную

Вызов диалога добавления переменной

_images/fb.png

Добавить ФБ

Вызов диалога добавления функционального блока

_images/connection.png

Добавить соединение

Вызов диалога добавления соединения

Для этого необходимо указателем мыши выбрать необходимую кнопку и нажать на свободное место в области редактирования FBD диаграммы. В зависимости от выбранного элемента появятся определённые диалоги добавления данного элемента. Аналогичные действия можно выполнить с помощью всплывающего меню в области редактирования FBD диаграмм. Вызов данного меню происходит при помощи нажатия правой клавишей мыши и выбора пункта «Add» (Добавить), в котором будет: «Block» (Блок), «Variable» (Переменная), «Connection» (Соединение), «Comment» (Комментарий).

_images/30.png

Всплывающее меню редактора языка FBD

При добавлении функционального блока одним из описанных выше способов, появится диалог «Block Properties» (Свойства блока).

_images/31.png

Свойства функционального блока

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

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

Переменные добавляются из панели переменных и констант с помощью перетаскивания левой клавишей мыши за область (#), указанную на рисунке ниже в область редактирования FBD диаграмм или через диалог «Variable Properties» (Свойства переменной), вызванный через всплывающего меню редактора языка FBD.

_images/32.png

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

_images/33.png

Свойства переменной

В данном диалоге можно задать порядок выполнения переменной и изменить её класс («Input» (Входная), «Output» (Выходная), «InOut» (Входная/Выходная)).

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

После выбора добавления элемента «Connection» появится диалог «Connection Properties» (Свойства соединения).

_images/34.png

Диалог добавления соединения для FBD

В данном диалоге можно выбрать тип соединения: «Connector» (Выходное соединение) – для выходного значения, «Continuation» (Входное соединение) – для входного значения, а так же необходимо указать имя данного соединения. Ниже представлен пример использования соединений.

_images/35.png

Пример FBD диаграммы с использованием соединений

Редактор FBD диаграмм позволяют добавлять комментарии на диаграмму. После выбора на панели редактирования комментария и добавления его в область редактирования появится диалог для ввода текста комментария.

_images/36.png

Диалог добавления комментария

Последовательность исполнения функций и функциональных блоков определяется порядком их выполнения. Автоматически он регламентируется следующим образом: чем выше и левее расположен верхний левый угол, описывающего функцию или ФБ прямоугольника, тем раньше данная функция или функциональный будет выполнен. Порядок выполнения может быть изменён вручную с помощью диалога свойств опцией «Execution Order» (Порядок выполнения).

Конструкции языка LD

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

Как только активной становится вкладка с редактированием LD диаграммы, в панели инструментов появляется панель с элементами языка LD.

_images/37.png

Панель редактирования LD диаграмм

С помощью данной панели можно добавить все элементы языка LD. В таблице ниже приведено описание кнопок данной панели.

Кнопки панели редактирования LD диаграммы

Внешний вид кнопки

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

Функции кнопки

_images/pointer.png

Выделение объектов на диаграмме

Перевод указателя мыши в состояние, при котором можно осуществлять выделение объектов в редакторе

_images/hand.png

Перемещение диаграммы

Перевод указателя мыши в состояние, при котором можно изменять размеры редактора

_images/bus.png

Создать новую шину питания

Вызов диалога создания новой шины питания

_images/coil.png

Создать новую катушку

Вызов диалога создания новой катушки 6

_images/contact.png

Создать новый контакт

Вызов диалога создания нового контакта 7

_images/cmt.png

Создать новый комментарий

Вызов диалога создания комментария

_images/var.png

Добавить переменную

Вызов диалога добавления переменной

_images/fb.png

Добавить ФБ

Вызов диалога добавления функционального блока

_images/connection.png

Добавить соединение

Вызов диалога добавления соединения

6

Устанавливает соответствующий битовый объект в значение, равное результату, полученному в проверочной зоне (имеется инверсный элемент).

7

Контакт замкнут, когда битовая переменная, которая управляет им, равна 1 (имеется инверсный элемент).

При добавлении шины питания появится диалог «Power Rail Properties» (Свойства шины питания).

В данном диалоге указываются следующие свойства:

  • «Type» (тип шины питания) («Left PowerRail» (шина питания слева), «Right PowerRail» (шина питания справа));

  • «Pin number»( количество контактов на добавляемой шине питания).

_images/38.png

Свойство шины питания

При добавлении контакта на LD диаграмму появится диалог «Edit Contact Values» (Редактирование значения контакта).

_images/39.png

Редактирование контакта

Данный диалог позволяет определить модификатор данного контакта:

  • «Normal» (Нормальный);

  • «Negated» (Инверсный);

  • «Rising Edge» (Нарастание фронта);

  • «Falling Edge» (Спад фронта).

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

Еще одним способом добавления контакта на диаграмму перетаскивание из панели переменных и констант переменной типа BOOL и класса: «Входная», «Входная/Выходная», «Внешняя», «Локальная», «Временная». Для этого необходимо зажать левой кнопкой мыши за первый столбец (который имеет заголовок #) переменную, удовлетворяющую описанным выше критериям и перенести в область редактирования диаграммы.

При добавлении катушки на LD диаграмму появится диалог «Edit Coil Values» (Редактирование значения катушки).

_images/40.png

Редактирование катушки

В данном диалоге можно определить модификатор данного контакта:

  • «Normal» (Нормальный);

  • «Negated» (Инверсный);

  • «Set» (Установка);

  • «Reset» (Сброс);

  • «Rising Edge» (Нарастание фронта);

  • «Falling Edge» (Спад фронта).

Конструкции языка SFC

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

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

_images/41.png

Панель редактирования SFC диаграмм

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

Кнопки панели редактирования SFC диаграммы

Внешний вид кнопки

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

Функции кнопки

_images/pointer.png

Выделение объектов на диаграмме

Перевод указателя мыши в состояние, при котором можно осуществлять выделение объектов в редакторе

_images/hand.png

Перемещение диаграммы

Перевод указателя мыши в состояние, при котором можно изменять размеры редактора

_images/cmt.png

Создать новый комментарий

Вызов диалога создания комментария

_images/start.png

Создать новый начальный шаг

Вызов диалога редактирования шага

_images/step.png

Создать новый шаг

Вызов диалога редактирования шага

_images/transition.png

Создать новый переход

Создать новый переход

_images/sfc_block.png

Создать новый блок действий

Вызов диалога редактирования блока действий

_images/new_branch.png

Создать новую дивергенцию

Вызов диалога создания новой дивергенции и конвергенции

_images/jump.png

Создать новый «прыжок»

Вызов диалога создания«прыжка»

_images/var.png

Добавить переменную

Вызов диалога добавления переменной

_images/fb.png

Добавить ФБ

Вызов диалога добавления функционального блока

_images/connection.png

Добавить соединение

Вызов диалога добавления соединения

_images/bus.png

Создать новую шину питания

Вызов диалога создания новой шины питания

_images/contact.png

Создать новый контакт

Вызов диалога создания нового контакта

Процедура добавления шага инициализации и обычного шага ничем не отличается. В обоих случаях вызывается диалог «Edit Step» (Редактировать шаг).

_images/42.png

Диалоги редактирования шага инициализации и обычного шага SFC диаграммы

Согласно стандарту IEC 61131-3, на SFC диаграмме должен быть один шаг инициализации, который характеризует начальное состояние SFC-диаграммы и отображается со сдвоенными линиями на границах.

При добавлении на SFC диаграмму перехода, появится диалог «Edit transition» (Редактировать переход).

_images/43.png

Диалог редактирования перехода для SFC диаграммы

В данном диалоге необходимо выбрать тип перехода и его приоритет. Тип перехода может быть:

  • «Reference» (Ссылка);

  • «Inline» (Встроенный код);

  • «Connection» (Соединение).

При выборе типа перехода «Ссылка» в открывающемся списке будут доступны переходы, предопределённые в дереве проекта для данного программного модуля, написанного на языке SFC. Добавление предопределённого перехода описывается ниже после описания всех добавляемых элементов языка SFC.

При выборе типа перехода «Inline» условие перехода можно написать в виде выражения на языке ST.

_images/44.png

Условие перехода в виде встроенного кода, написанного на языке ST

Реализация перехода таким способом удобна в случае, когда необходимо короткое условие, например: переменные «f3» и «f4» типа INT равны. Встроенный код для такого условия выглядит следующим образом:

f3 = f4

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

При выборе типа перехода «Connection», в качестве условия перехода можно использовать выходные значения элементов языка FBD или LD.

При выборе типа перехода «Connection», у добавленного перехода появится слева контакт, который необходимо соединить с выходным значением, например, функционального блока языка FBD или катушки LD диаграммы. Стоит отметить, что данное выходное значение должно быть типа BOOL.

При добавлении блока действий на диаграмму появится диалог «Edit action block properties» (Редактировать свойство блока действий).

_images/45.png

Диалог «Редактировать свойство блока действий»

Данный блок действий может содержать набор действий. Добавить новое действие можно нажав кнопку «Добавить» и установив необходимые параметры:

  • «Qualifier» (Квалификатор);

  • «Duration» (Продолжительность);

  • «Type» (Тип): «Action» (Действие), «Variable» (Переменная), «Inline» (Встроенный код);

  • «Value» (Значение);

  • «Indicator» (Индикатор).

Поле «Qualifier» определяет момент времени, когда действие начинается, сколько времени продолжается и когда заканчивается. Выбрать квалификатор можно из списка.

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

Квалификаторы действий SFC диаграммы

Имя квалификатора действия

Поведение блока

D

Действие начинает выполняться через некоторое заданное время (если шаг еще активен) и выполняется до тех пор, пока данный шаг активен

L

Действие выполняется в течение некоторого заданного интервала времени, после чего выполнение действия останавливается

N

Действие выполняется, пока данный шаг активен

P

Действие выполняется один раз, как только шаг стал активен

S

Действие активируется и остается активным пока SFC диаграмма выполняется

R

Действие выполняется, когда диаграмма деактивизируется

DS

Действие начинается выполняться через некоторое заданное время, только в том случае если шаг еще активен

SL

Действие активно в течении некоторого, заданного интервала

SD

Действие начинается выполняться через некоторое время, даже в том случае если шаг уже не активен

Поле «Duration» необходимо для установки интервала времени необходимого для некоторых квалификаторов, описанных выше.

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

Элемент «Jump» (прыжок) на SFC диаграмме подобен выполнению оператора GOTO при переходе на определённую метку в коде в различных языках программирования. После выбора добавления «прыжка» на SFC диаграмму, появится диалог, в котором необходимо выбрать из списка шаг, к которому будет происходить «прыжок» – переход от одного шага SFC диаграммы к другому.

_images/46.png

Диалог добавления «прыжка»

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

_images/47.png

Пример алгоритма, напианного на языке SFC