БИБЛИОТЕКА НОРМАТИВНЫХ ДОКУМЕНТОВ

ГОСТ Р МЭК 61131-3-2016. Национальный стандарт Российской Федерации. Контроллеры программируемые. Часть 3. Языки программирования

7.2 Перечень инструкций (IL)

7.2.1 Общие положения

Этот язык устарел как язык типа ассемблера. Поэтому он не рекомендуется и не будет использоваться в следующей редакции настоящего стандарта.

7.2.2 Инструкции

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

Инструкции может предшествовать метка идентификации, за которой следует двоеточие ":". Между командами могут вставляться пустые строки.

Пример - Поля списка инструкций

 

МЕТКА

ОПЕРАТОР

ОПЕРАНД

КОММЕНТАРИЙ

START:

LD

%IX1

(* Кнопка *)

 

ANDN

%MX5

(* Не запрещено*)

 

ST

%QX2

(* Вентилятор включен*)

 

7.2.3 Операторы, модификаторы и операнды

7.2.3.1 Общие положения

Стандартные операторы с их разрешенными модификаторами и операндами должны быть такими, как показано в таблице 68.

7.2.3.2 "Текущий результат"

Если иное не оговорено в таблице 68, семантика операторов должна быть следующей:

result:= result OP operand.

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

Пример 1 - Инструкция AND %IX1 интерпретируется как result:= result AND %IX1.

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

Пример 2 - Инструкция GT %IW10 имеет логический результат 1, если текущее значение больше, чем значение Input Word 10, и логический результат в противном случае.

7.2.3.3 Модификатор

Модификатор "N" указывает поразрядное логическое отрицание (дополнение до единицы) операнда.

Пример 1 - Инструкция ANDN %IX2 интерпретируется как result:= result AND NOT %IX2.

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

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

result:= result AND (%IX1 OR %IX2)

Операнд должен быть литералом, как определено в 6.3, перечислимым значением или переменной.

Функция REF() и оператор разыменования "ГОСТ Р МЭК 61131-3-2016. Национальный стандарт Российской Федерации. Контроллеры программируемые. Часть 3. Языки программирования" используются в определении операндов, а в таблице 67 показано выражение в скобках.

 

Таблица 67

 

Выражение в скобках для языка IL

 

Номер

Описание

Пример

1

Выражение в скобках начинается с оператора в явном виде:

AND(

 

 

LD

%IX1

(NOTE)

OR

%IX2

 

)

 

 

2

Выражение в скобках (краткая форма)

AND(

%IX1

 

OR% IX2

 

)

 

 

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

 

Модификатор "C" указывает, что связанная инструкция выполняется, только если значение текущего вычисленного результата равно логической 1 (или логическому 0, если оператор объединен с модификатором "N"). В таблице 68 показаны операторы списка инструкций.

 

Таблица 68

 

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

 

Номер

Описание оператора <a>

Модификатор (см. примечание)

Объяснение

1

LD

N

Установить текущий результат, равный операнду

2

ST

N

Сохранить текущий результат по адресу операнда

3

S <e>, R <e>

 

Установить операнд в 1, если текущий результат равен логической 1

Сбросить операнд в 0, если текущий результат равен логической 1

4

AND

N, (

Логическое И

5

&

N, (

Логическое И

6

OR

N, (

Логическое ИЛИ

7

XOR

N, (

Логическое исключающее ИЛИ

8

NOT <d>

 

Логическое отрицание (дополнение до единицы)

9

ADD

(

Сложение

10

SUB

(

Вычитание

11

MUL

(

Умножение

12

DIV

(

Деление

13

MOD

(

Деление по модулю

14

GT

(

Сравнение: >

15

GE

(

Сравнение: >=

16

EQ

(

Сравнение: =

17

NE

(

Сравнение: <>

18

LE

(

Сравнение: <=

19

LT

(

Сравнение: <

20

JMP <b>

C, N

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

21

CAL <c>

C, N

Вызов функционального блока (см. таблицу 69)

22

RET <f>

C, N

Возврат из вызванной функции, функционального блока или программы

23

)

 

Вычислить отложенную операцию

24

ST?

 

Попытка присваивания. Сохранить с проверкой

Для объяснения модификаторов и оценки выражений см. предшествующий текст.

--------------------------------

<a> Если иное не указано, эти операторы должны быть перегружены или типизированы.

<b> Операнд инструкции JMP должен быть меткой инструкции, к которой должно переходить выполнение. Когда инструкция JMP содержится в конструкции ACTION... END_ACTION, операнд должен быть меткой внутри той же самой конструкции.

<c> Операнд этой инструкции должен быть именем экземпляра вызываемого функционального блока.

<d> Результатом этой операции должно быть побитовое логическое отрицание (дополнение до единицы) текущего результата.

<e> Типом операнда этой инструкции должен быть BOOL.

<f> Эта инструкция не имеет операнда.

 

7.2.4 Функции и функциональные блоки

7.2.4.1 Общие положения

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

 

Таблица 69

 

Вызовы для языка IL

 

Номер

Описание

Пример (см. примечание)

1a

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

CAL C10(%IX10, FALSE, A, OUT, B)

CAL CMD_TMR(%IX5, T#300ms, OUT, ELAPSED)

1b

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

CAL C10(

// FB имя экземпляра

CU := %IX10,

R := FALSE, PV:= A,

Q => OUT,

CV => B)

CAL CMD_TMR(

IN := %IX5,

PT := T#300ms,

Q => OUT,

ET => ELAPSED,

ENO => ERR)

2

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

LD

A

ADD

D5

ST

C10.PV

LD

%IX10

ST

C10.CU

CAL

C10

// FB имя экземпляра

LD

C10.CV

// текущий результат

3a

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

LIMIT(

// Имя функции

EN := COND,

IN := B,

MN := 1,

MX := 5,

ENO => TEMPL

)

ST

A

// Новый текущий результат

3b

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

LD 1

//установить текущий результат

LIMIT B, 5

// и использовать его как IN

ST

A

// Новый текущий результат

4a

Вызов метода с перечнем формальных параметров

FB_INST.M1(

// Имя метода

EN := COND,

IN := B,

MN := 1,

MX := 5,

ENO => TEMPL

)

ST

A

// Новый текущий результат

4b

Вызов метода с перечнем неформальных параметров

LD

1

//установить текущий результат

FB_INST.M1 B, 5

// и использовать его как

IN ST

A

// новый текущий результат

Примечание - В приведенных выше примерах предполагается объявление

VAR

C10

: CTU;

CMD_TMR

: TON;

A, B

: INT;

ELAPSED

: TIME;

OUT, ERR, TEMPL, COND: BOOL;

END_VAR

 

7.2.4.2 Функция

Функции вызываются путем помещения имени функции в поле оператора. Параметры задаются вместе в одном поле операнда или же каждый параметр - в поле операнда строка за строкой.

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

Функции могут иметь результат. Как показано в свойствах 3 таблицы 69, при успешном выполнении инструкции RET или после достижения конца программного компонента, программный компонент предоставляет результат как "текущий результат".

Если вызвана функция, которая не имеет результата, то "текущий результат" является неопределенным.

7.2.4.3 Функциональный блок

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

Функциональные блоки вызываются при определенных условиях или безусловно оператором EN.

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

Если вызван экземпляр функционального блока, то "текущий результат" является неопределенным.

7.2.4.4 Методы

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

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

Дополнительные параметры (начиная со второго), при необходимости, задаются в поле операнда, разделенные запятыми, в порядке их объявления.

Методы могут иметь результат. Как показано в свойствах 4 таблицы 69, при успешном исполнении инструкции RET или при достижении конца программного компонента, программный компонент предоставляет результат как "текущий результат".

Если вызван метод, который не имеет результата, то "текущий результат" является неопределенным. В таблице 69 приведены альтернативные вызовы языка IL.

Стандартные входные операторы стандартных функциональных блоков, определенные в таблице 70, могут использоваться в сочетании со свойством 2 (загрузка/сохранение) в таблице 69. Данный вызов эквивалентен CAL с перечнем параметров, который содержит только одну переменную с именем входного оператора.

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

Пример 1

Вместе с объявлением

VAR C10: CTU; END_VAR

в последовательности команд

 

LD

15

PV

C10

 

дает такой же результат, что и

 

CAL

C10(PV:=15)

 

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

 

LD

%IX10

CU

C10

 

в отсчете при максимуме в каждом втором вызове зависят от скорости изменения входа %IX10. Каждый вызов использует ранее установленные значения для PV и R.

Пример 2

С бистабильными функциональными блоками, с получением декларации

VAR FORWARD: SR; END_VAR

это приводит к неявно условному поведению. Последовательность

 

LD

FALSE

S1

FORWARD

 

не изменяет состояние бистабильного FORWARD. Следующая последовательность

 

LD

TRUE

R

FORWARD

 

сбрасывает бистабильное состояние.

 

Таблица 70

 

Стандартные операторы функционального блока для языка IL

 

Номер

Функциональный блок

Входной оператор

Выходной оператор

1

SR

S1, R

Q

2

RS

S, R1

Q

3

F/R_TRIG

CLK

Q

4

CTU

CU, R, PV

CV, Q, также RESET

5

CTD

CD, PV

CV, Q

6

CTUD

CU, CD, R, PV

CV, QU, QD, также RESET

7

TP

IN, PT

CV, Q

8

TON

IN, PT

CV, Q

9

TOF

IN, PT

CV, Q

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

 

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

TOC