Общие сведения о языке IL

IL (Instruction List) представляет собой текстовый язык программирования низкого уровня, который очень похож на Assembler, но к конкретной архитектуре процессора не привязан. Он позволяет описывать функции, функциональные блоки и программы, а также шаги и переходы в языке SFC. Одним из ключевых преимуществ IL является его простота и возможность добиться оптимизированного кода для реализации критических секторов программ. Особенности IL делают его неудобным для описания сложных алгоритмов с большим количеством разветвлений.

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

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

Таблица 1 – Операторы языка IL

Оператор

Описание

LD

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

LDN

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

ST

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

STN

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

S

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

R

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

AND

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

ANDN

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

OR

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

ORN

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

XOR

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

XORN

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

NOT

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

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

CAL

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

CALC

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

CALCN

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

RET

Выход из POU и возврат в вызывающую программу

RETC

Выход из POU и возврат в вызывающую программу при условии, что значение аккумулятора TRUE

RETCN

Выход из POU и возврат в вызывающую программу при условии, что значение аккумулятора FALSE

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

На рис. 1 приведён пример программы на языке IL, которая эквивалентна следующему логическому выражению C = A AND NOT B:

image1

Рис. 1 – Пример программы на языке IL

Первый оператор примера LD помещает значение переменной A в аккумулятор, способный хранить значения любого типа. Второй оператор ANDN выполняет «побитовое И» аккумулятора и обратного значения операнда, результат всегда помещается в аккумулятор. Последний оператор примера ST присваивает переменной C значение аккумулятора.