Знакомство с языками программирования IEC 61131-3»

Цель работы: Научиться создавать и использовать функциональные блоки.

Краткие теоретические сведения:

В стандарт IEC 61131-3 входит 5 языков программирования: LD, FBD, IL, SFC, ST.

 

Рис. 1.1 IL - Список инструкций

 

Рис. 1.2 ST - Структурный текст

 

Рис. 1.3 FBD – Диаграммы функциональных блоков

 

Рис. 1.4 SFC - Язык последовательных функциональных схем

 

Рис. 1.5 LD – релейных диаграмм.

 

 

1.1 Язык программирования LD:

 

Базовые элементы языка LD: базовыми элементами являются катушки и контакты. Контакт передаёт состояние горизонтальной связи левой стороны горизонтальной связи правой стороны. Это состояние – результат булевой операции И. Контакты бывают нормально разомкнуты и нормально замкнутые.

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

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

 

Рис.1.1.1 Поле для редактирования элементов языка.

 

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

В инвертированных катушках состояние левой связи копируется к правой связи. Инвертированное состояние левой связи копируется к связанной булевой переменной. Если левая связь находится в состоянии OFF, правая связь будет также в состоянии OFF и связанная переменная будет в состоянии ON.

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

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

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

Рис. 1.1.2 Применение функций и функциональных блоков в LD

 

1.2 Язык программирования IL.

 

Проведём аналогию между языками IL и FBD. Пример логического сложения и умножения показаны ниже.

Ld I_xInput1 AndN I_xInput2 Or I_xInput3 St Q_xOutput1  
Операторы языка IL
Для любых типов данных используются операторы:   LD – загрузка данных в аккумулятор ST – сохранение/ вывод результатов работы в переменную
Для любых числовых типов:   ADD – сложение SUB - вычитание MUL - умножение DIV – деление
Для битовых типов данных – Логические операторы   AND – Логическое И OR – Логическое ИЛИ XOR – Исключающее ИЛИ NOT – Инверсия
Для числовых и битовых типов данных:   GT – больше чем… GE – больше либо равно EQ - равенство NE – не равно LE – меньше либо равно LT – меньше чем…
Для булевых типов данных:   S – установка значений R – сброс значений
А также могут использоваться в программе: JMP – прыжок RET – возвращает значения CAL – вызов функций и функциональных блоков ) – закрывает выражения
     

 

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

IL FBD
ùE1 * ùE2 = ù (E1 + E2) LdN I_xInput1 AndN I_xInput2 And( I_xInput3 Not Or I_xInput4 ) St Q_xOutput1
Ld iMin Limit iQuantity, iMax St iCorrection
Ld wMin Word_To_Int Limit iQuantity, iMax St iCorrection
Синтаксис вызова функциональных блоков
Ld I_xInput1 St TON_Signal.IN Ld tDelay St TON_Signal.PT Cal TON_Signal Ld TON_Signal.Q St Q_xOutput1 Ld TON_Signal.ET St tSequence
Синтаксис операторов JUMP и RETURN
  Ld iRawsize GT iMax JmpC TooGreat Ld iRawsize LT iMin JmpC TooSmall Ret Ld iMax St iRawsize Ret Ld iMin St iRawsize

 

 

1.3 Язык программирования ST.

 

Базовые структуры языка ST представлены в таблице 1.3.1

 

 

Таблица 1.3.1 Элементы языка ST.

Объявления, присвоения, операторы Q_xAccess1 := False; Q_xAccess2 := I_xInput2 & Not I_xInput4;
Условия If I_xInput1 & I_xInput2 Then Q_xAccess1 := True; ElsIf I_xAccess2 & I_xAccess3 Then Q_xAccess2 := True; End_If;
Вызов функций и аргументы iCorrected := Limit(iMin, iBasis, iMax);
Вызов функциональных блоков и аргументы CTU_Access(CU := xPulse, PV := iMaxvalue, RESET := xStop); iDisplay := CTU_Access.QV; xFull := CTU_Access.Q;
Циклы Repeat iLoop := iLoop + 1; Until iLoop = 100 End_Repeat;

 

Присвоение значений и операторы. Логическое выражение на языке ST и FBD

ST FBD
Q_xOutput1 := I_xInput1 & Not I_xInput2 Or I_xInput3;

Вызов функций. Синтаксис: <Переменная> := <Имя функции (аргументы)>

 

Например: iCorrection := Limit(iMin,iMeasuredvalue,iMax);

 

Может использоваться функция как аргумент другой функции:

iCorrection := Limit(iMin,Word_To_Int(wRawsize),iMax);

Это выражение можно изобразить на языке FBD и выглядит оно следующим образом:

Рис. 1.3.1 Пример функции в функции

 

Вызов функционального блока. Приведём пример вызова функционального блока TON.

На языке ST можно вызвать двумя способами: Первый способ: TON_Signal(IN := I_xInput, PT := tDelay); Q_xOutput := TON_Signal.Q; tSequence := TON_Signal.ET; Второй способ: TON_Signal.IN := I_xInput,; TON_Signal.PT := tDelay; TON_Signal(); Q_xOutput := TON_Signal.Q; tSequence := TON_Signal.ET;

 

Язык ST имеет элементы высокоуровневого языка программирования

1. Условия – конструкция IF расширенная и упрощенная

If I_xSensor1 & Not I_xSensor2 Then (* Instructions 1 *) ElsIf I_xSensor2 & Not I_xSensor1 Then (* Instructions 2 *) Else If iMeasuredvalue < 100 Then (* Instructions 3 *) ElsIf iMeasuredvalue > 100 Then (* Instructions 4 *) End_If; End_If; If (* Boolean condition *) Then (* Instructions *) End_If;

2. Оператор выбор – CASE

Case iProcesssize Of 7 : (* Instructions 1 *) -2..1 : (* Instructions 2 *) 2, 4 : (* Instructions 3 *) 8..16, 20..30 : (* Instructions 4 *) Else (* Instructions 5 *) End_Case; Case iProcessstep Of 0 : (* Initialize *) If xInit_completed Then iProcessstep := 10; End_If; 10 : (* Execute Prozess 1 *) If xProcess1_completed Then iProcessstep := 20; End_If; 20 : (* Execute Prozess 2 *) If xProcess2_completed Then iProcessstep := 30; End_If; (* etc. *) 500 : (* Exceptionalhandling *) iProcessstep := 0; End_Case;

3. Циклы – FOR, REPEAT, WHILE

Синтаксис цикла FOR:

For iIndex := 1 To 20 By 1 Do

(* The following instructions are executed with *)

(* the values 1 to 20 for the variable iIndex *)

If arrMachine[iIndex].iTemp >= iLimitvalue Then

arrMachine[iIndex].iBroken := True;

xAlarm := True;

Exit;

End_If;

End_For;

 

Синтаксис циклов REPEAT/ WHILE

REPEAT WHILE
Repeat iIndex := iIndex + 10; Until iIndex >= iLimit End_Repeat; While iIndex >= iLimit Do iIndex := iIndex + 10; End_While;

 

 

1.4 Язык программирования SFC:

 

Базовые структуры языка – Шаг – Действие – Переход.

Рис. 1.4.1 Базовые структуры

 

В дереве проекта кроме основного рабочего пространства для программирования языка SFC есть ещё две папки: Transitions – переходы, папка где собраны каждая программа переходов в отдельности; Actions – действия, папка где расположены модули программ для выполняемых действий.

Пример дерева проекта показан на рисунке ниже.

Рис. 1.4.2 Дерево проекта

 

Базовые элементы:

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

Рис. Значения шага.

 

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

Действие. Блок действия может быть двух типов: Переменной и детальным действием. Если действие является переменной, т.е. булевым параметром – то оно изображается красным цветом. Если действие является детальным, то оно отображается зелёным цветом.

 

Рис.1.4.3 Действия двух типов

 

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

Таблица 1.4.1

  Значение Описание
S Set This action is continued until it is explicitly reset (even if the corresponding step becomes inactive).
R reset Terminates the execution of action previously started with character S.
L time limited After activating the corresponding step, the action is executed for the set time or until step becomes inactive.
D time delayed Delay starts when step becomes active. After a set time has passed, the action is executed until step is deactivated. If the step becomes inactive, before the set time has passed, the action is not executed.
P pulse Starts when step becomes active/inactive and is executed once.
SD stored+ time delayed The action is executed until reset, but only starts after time delay has passed. Even if the step is active for less a time than the time delay.
DS time delayed+ stored The action is executed until reset, but only starts after time delay has passed. Unlike with the previous character, this does not happen if the step becomes inactive before time delay has passed.
SL stored+ time limited The action is executed for the set time, even if the step is active for a shorter time. The action can be reset with the character R.

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

 

Задание на лабораторную работу:

 

Выполнить задания указанные в таблице. Название задания должно совпадать с названием функции либо функционального блока.

Задания LD FBD IL ST SFC
Fu_XOR 3 +   + +  
Fu_Kod +   + +  
Fb_TTrigger + + + +  
Fb_TimeDelay     + +  
Fb_TrafficLight         +

 

Примечание:

1. Fu_XOR 3 – Создать функцию которая будет выполнять действия исключающего ИЛИ.

2. Fu_Kod - Создать функцию кодового замка.

3. Fb_TTrigger – Создать функциональный блок, который будет работать как Т триггер.

4. Fb_TimeDelay - Создать функциональный блок, который будет выводить индикацию 2х выходов в режиме мигания. Задание с временной задержкой выполняется также с использованием языков LD+FBD.

5. Fb_TrafficLight – Создать светофор.

 

Ход работы:

1. Создаём проект на 430 ПЛК, включаем симуляцию. Подключение устройств INTERBUS произвести тогда, когда будет окончательно определено количество входов и выходов.

2. В Logic POUs вставить группу с названием FB_Group.

2.1 Вставить функциональные блоки с названиями: Fb_TTrigger_XX, Fb_TimeDelay_XX, Fb_TrafficLight_XX. Где ХХ – название языка на котором написан блок. Например: Fb_TTrigger_LD, Fb_TrafficLight_SFC, Fb_TimeDelay_LD_FBD.

3. В Logic POUs вставить группу с названием FU_Group.

3.1 Вставить функции с названиями: Fu_XOR 3_ХХ, Fu_Kod_ХХ. Где ХХ – название языка на котором написана функция. Например: Fu_XOR 3_LD, Fu_Kod_IL.

4. В каждом функциональном блоке и функции есть таблица переменных. Именно с таблицы переменных начинаем писать программу.

4.1 Открыть таблицу переменных. Создать блоки входных и выходных переменных. Создать переменные, установить тип данных для каждой переменной как показано на рисунке ниже. И так далее для каждого ФБ и функции.

 

Рис. Таблица переменных

 

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

5. Открыв свойства Main, переименовать его и дать название CALL_FB_FU. Вынести на рабочее поле все функциональные блоки и функции.

6. Посчитать количество входных и выходных переменных. Подключить устройства INTERBUS.

7. Запустить режим симуляции.

 

Требования к содержанию протокола:

1. Титульный лист с указанным номером лабораторной работы и темой.

2. Задание к лабораторной работе.

3. Выбор варианта.

4. Подробное описание хода выполнения работы, выбранных блоков и обоснование своего выбора.

5. Описание и иллюстрация правильно работающих программ.

6. Выводы.

 

 


Приложение А.

 

 

Создание светофора

 

1. Создать Функциональный блок который имеет 4 входных параметра и 3 выходных параметра.

 

Рис. Функциональный блок светофора

 

2. Таблица переменных выглядит следующем образом:

Рис. Таблица переменных для светофора

 

3. Светофор на языке SFC показан ниже на рисунке.

Рис. Светофор на языке SFC

 

4. Переходы представляют собой блок TON, где

- первый входной параметр это имя шага;

- второй входной параметр это имя входа ФБ;

- выходной параметр это имя перехода.

 

Рис. Пример перехода