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