Общие сведения о языке 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 значение аккумулятора.