Instruction list
IL (Instruction List) або список інструкцій — мова програмування стандарту IEC 61131-3[1]. Призначена для програмування промислових контролерів. За синтаксисом є близькою до мови асемблера. Використовується на виробництві для програмування автоматизованих систем керування технологічними процесами та систем промислової автоматизації.
Основні принципи мови
ред.У основі мови лежить поняття акумулятора (у стандарті IEC використовується термін англ. result — результат) як місця зберігання поточного значення (результату) та переходів по мітках. Починається програма із завантаження в акумулятор значення змінної. Подальші кроки програми полягають в отриманні вмісту акумулятора і виконанні над ним обмеженого числа визначених операцій.
Кожна інструкція починається з нового рядка і може містити чотири поля, розділені табуляцією: мітку, оператор з модифікатором, за яким приводиться операнд і далі, коментар. Компілятор є не чутливим до регістра (інструкції ADD A і Add a є рівнозначними).
Більшість інструкцій виконують стосовно вмісту акумулятора відповідну дію, визначену оператором (з використанням операнда) і результат поміщають в акумулятор. Команди переходу на мітку здатні аналізувати вміст акумулятора і приймати рішення: виконувати перехід чи ні. Акумулятор може приймати дані будь-якого типу.
Під модифікатором маються на увазі літери N, C, які приписуються справа до імені деяких операторів. Модифікатор N означає логічне заперечення (обернене значення чи інверсію) операнда, C означає, що інструкція виконується, якщо результат попередньої операції порівняння TRUE.
Як операнди можуть виступати:
- змінні;
- константи;
- ім'я мітки;
- ім'я оператора (функції).
Приклад: Лінійне перетворення Y(x)=A*x+B запишеться так:
LD x MUL A ADD B ST Y
Послідовний порядок виконання інструкцій IL можна змінити за допомогою дужок. Відкривальна дужка ставиться після оператора а закривальна дужка ставиться в окремому рядку. Інструкції в дужках виконуються у першу чергу з поміщенням результату у допоміжний акумулятор, після чого виконується оператор, що має відкривальну дужку.
Приклад: Обчислення виразу Y=5*(2-1) запишеться так:
LD 5 MUL (2 SUB 1 ) ST Y
Інструкції можна доповнювати коментарями, що подаються у форматі: (*коментар*).
Оператори мови IL
ред.Стандартні оператори IL:
Оператор | Допустимі модифікатори | Функція оператора |
---|---|---|
LD | N | Завантажити значення операнда в акумулятор |
ST | N | Присвоїти значення акумулятора операнду |
S | Якщо значення акумулятора TRUE, встановити логічний операнд | |
R | Якщо значення акумулятора FALSE, скинути логічний операнд | |
AND | N, ( | Порозрядне І (логічне множення) акумулятора і операнда |
OR | N, ( | Порозрядне АБО (логічне додавання) акумулятора і операнда |
XOR | N, ( | Порозрядне виключне АБО акумулятора і операнда |
NOT | Порозрядна інверсія акумулятора | |
ADD | ( | Додавання вмісту акумулятора та операнда, результат записується в акумулятор |
SUB | ( | Віднімання операнда від вмісту акумулятора, результат записується в акумулятор |
MUL | ( | Множення вмісту акумулятора на операнд, результат записується в акумулятор |
DIV | ( | Ділення вмісту акумулятора на операнд, результат записується в акумулятор |
MOD | ( | Ділення по модулю |
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). Результат порівняння (TRUE або FALSE) записується в акумулятор |
LT | ( | Значення акумулятора порівнюється із значенням операнда (< або англ. less than). Результат порівняння (TRUE або FALSE) записується в акумулятор |
JMP | C, CN | Перехід до мітки |
CAL | C, CN | Виклик програмного або функційного блоку |
RET | C, CN | Вихід з програмного або функційного блоку й повернення в основну програму |
Див. також
ред.Інші мови програмування стандарту IEC 61131-3:
Примітки
ред.- ↑ IEC 61131-3:2013 Programmable controllers — Part 3: Programming languages.
Джерела
ред.- Мишель Ж. Программируемые контроллеры: Архитектура и применение: пер. с фр. / Ж. Мишель ; Переводчик И. В. Федотов ; Ред. Б. И. Лыткин . — М. : Машиностроение, 1992 . — 320 . — ISBN 5-217-00974-8
- Э. Парр. Программируемые контроллеры: руководство для инженера. — М.: БИНОМ. Лаборатория знаний, 2007. — 516 с. — ISBN 978-5-94774-340-1
- Петров И. В. Программируемые контроллеры. Стандартные языки и приёмы прикладного проектирования / Под ред. проф. В. П. Дьяконова. — М.: СОЛОН-Пресс, 2004. — 256 c. — ISBN 5-98003-079-4