Общие сведения о языке 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:
Рис. 1 – Пример программы на языке IL
Первый оператор примера LD помещает значение переменной A в аккумулятор, способный хранить значения любого типа. Второй оператор ANDN выполняет «побитовое И» аккумулятора и обратного значения операнда, результат всегда помещается в аккумулятор. Последний оператор примера ST присваивает переменной C значение аккумулятора.