<- до лекцій | на основну сторінку курсу |
---|---|
<-Мова Grafcet | PID-регулювання -> |
IL (Instruction List, список інструкцій) є текстовою мовою програмування низького рівня, яка дуже схожа на Assembler, але до конкретної архітектури процесора не прив’язана. Вона дозволяє описувати функції, функціональні блоки і програми, а також кроки і переходи в мові Grafcet. Однією з ключових переваг мови IL є її простота і можливість досягти оптимізованого коду для реалізації критичних секторів програм. Особливості мови IL роблять її незручною для опису складних алгоритмів з великою кількістю розгалужень.
Основа мови програмування IL, як і в Assembler - це переходи по мітках і акумулятор. В акумулятор завантажується значення змінної, а подальше виконання алгоритму є читання значення з акумулятора і проведення над ним операцій.
Програма, написана мовою IL, складається з послідовності інструкцій, які послідовно виконуються ПЛК. Кожна інструкція представлена одним рядком програми та складається з наступних компонентів:
Далі наведено приклад програми Інструкції зі списку інструкцій (рис. 1).
Рис. 1 Приклад програми на мові IL
Чотиризначні номери рядків генеруються автоматично при створенні нової лінії програми.
Коли редактор знаходиться в режимі онлайн (підключений до ПЛК чи симулятора і програма працює), він відображає поточні значення об’єктів у вікні редактора IL.
Відображені значення цих об’єктів оновлюються.
Операційна інструкція (оператор) - ключове слово, яке ідентифікує операцію, яку слід виконати за допомогою операндів. Типові оператори задають булеві та числові операції. Наприклад, у наведеному вище прикладі програми (рис. 1) LD є коротким ключовим словом оператора LOAD. Інструкція LOAD розміщує (завантажує) значення операнду %M1 у внутрішній регістр, який називається булевим акумулятором. В основному існує два типи операторів:
Операнд - це об’єкт, адреса або символ, що представляє значення, яким програма може керувати в інструкції. Наприклад, у прикладній програмі вище, операнд %I0.1 - це адреса, що відповідає значенню вбудованого дискретного входу ПЛК. Інструкція може мати від 0 до 3 операндів, залежно від типу оператора інструкцій.
Операнди можуть відображати:
Для перемикання режимів відображення редактора з LD в режим IL необхідно скористатися кнопкою >IL (рис.2)
Рис. 2. Перемикання редактора в режим IL
Для перемикання режимів відображення редактора з IL в режим LD необхідно скористатися кнопкою >LD (рис.3)
Рис. 3. Перемикання редактора в режим LD
Важливо! При розробці прикладної програми на мові LD завжди є можливість перемкнутися в режим IL. Але обернена операція не завжди може бути доступною.
Наступна таблиця описує інструкції перевірки мови IL
Ключове слово | Назва | Еквівалентний елемент мови LD | Призначення |
---|---|---|---|
LD | Load | Завантажує булеве значення операнда в акумулятор. | |
LDN | Load Not | Завантажує інвертоване булеве значення операнда в акумулятор. | |
LDR | Load Rising | Завантажує булеве значення операнда в акумулятор, коли значення змінюється від 0 до 1 (по передньому фронту). Після цього у значення акумулятора буде завантажено 0 до наступного переходу операнду від 0 до 1. | |
LDF | Load Falling | Завантажує булеве значення операнда в акумулятор, коли значення змінюється від 1 до 0 (по задньому фронту). Після цього у значення акумулятора буде завантажено 1 до наступного переходу операнду від 1 до 0. | |
AND | And | Булевий результат, що дорівнює логічному «І» між булевим результатом попередньої інструкції (який зберігається в акумуляторі) та статусом операнду. Потім результат інструкції неявно завантажується в акумулятор, перезаписуючи попереднє значення. | |
ANDN | And Not | Булевий результат, що дорівнює логічному «І» між булевим результатом попередньої інструкції (який зберігається в акумуляторі) та інвертованим статусом операнду. Потім результат інструкції неявно завантажується в акумулятор, перезаписуючи попереднє значення. | |
ANDR | And Rising | Булевий результат, що дорівнює логічному «І» між булевим результатом попередньої інструкції та переднім фронтом операнда. Потім результат інструкції неявно завантажується в акумулятор, перезаписуючи попереднє значення. | |
ANDF | And Falling | Булевий результат, що дорівнює логічному «І» між булевим результатом попередньої інструкції та заднім фронтом операнда. Потім результат інструкції неявно завантажується в акумулятор, перезаписуючи попереднє значення. | |
OR | Or | Булевий результат, що дорівнює логічному «АБО» між булевим результатом попередньої інструкції та статусом операнда. | |
AND( | And With | Логічне І (Максимум 32 рівні вкладеності дужок). В дужках вказується проміжний логічний вираз. Результат цього виразу обчислюється за логічним «І» зі значенням в акумуляторі. | |
OR( | Or With | Логічне АБО (Максимум 32 рівні вкладеності дужок). В дужках вказується проміжний логічний вираз. Результат цього виразу обчислюється за логічним «АБО» зі значенням в акумуляторі. | |
XOR XORN XORR XORF | Ex Or Ex Or Not Ex Or Rising Ex Or Falling | Виключне АБО | |
MPS MRD MPP | Memory Push Store Memory ReaD Memory PoP | Оператори розгалудження для реалізації декількох дій. | |
N | Not | Інвертує значення операнда. |
Наступна таблиця описує інструкції дій мови IL
Ключове слово | Назва | Еквівалентний елемент мови LD | Призначення |
---|---|---|---|
ST | Store | Асоційований операнд приймає значення результату зони порівняння. | |
STN | Store Not | Асоційований операнд приймає інвертоване значення результату зони порівняння. | |
S | Set | Асоційований операнд встановлюється в логічну 1, коли результат зони порівняння дорівнює 1. | |
R | Reset | Асоційований операнд встановлюється в логічну 0, коли результат зони порівняння дорівнює 1. | |
JMP | Jump | Безумовний перехід до вказаної послідовності (вище чи нижче по програмі) | |
SRn | Subroutine | Перехід до початку підпрограми (виклик підпрограми) | |
END | End | Безумовний кінець програми | |
ENDCN | End Conditional | Умовний кінець програми при булевому результаті 0 |
Наступні приклади показують, як використовувати дужки з інструкцією AND:
Інструкція IL | Еквівалент на мові LD |
---|---|
LD %I0.0 AND %I0.1 OR %I0.2 ST %Q0.0 |
|
LD %I0.0 AND( %I0.1 OR %I0.2 ) ST %Q0.1 |
Наступні приклади показують, як використовувати дужки з інструкцією OR:
Інструкція IL | Еквівалент на мові LD |
---|---|
LD %I0.0 AND %I0.1 OR( %I0.2 AND %I0.3 ) ST %Q0.0 |
У наступній таблиці описано модифікатори, що можна використати разом з дужками.
Модифікатор | Функція | Приклад |
---|---|---|
N | Заперечення | AND(N or OR(N |
F | Задній фронт | AND(F or OR(F |
R | Передній фронт | AND(R or OR(R |
[ | Порівняння | Більш детально в розділі числові операції |
Можна використовувати до 32 рівнів вкладеності за допомогою дужок
При використанні дужок необхідно дотримуватись таких правил:
%Li :
), підпрограми (SRi :
), інструкції JMP (JMP
) та інструкції функціональних блоків не можуть розміщуватися у виразах між дужками.ST
, STN
, S
і R
) не повинні розміщуватися між дужками.Приклад використання вкладеності дужок
Інструкція IL | Еквівалент на мові LD |
---|---|
LD %I0.0 AND( %I0.1 OR(N %I0.2 AND %M3 ) ) ST %Q0.0 |
|
LD %I0.1 AND( %I0.2 OR( %I0.5 AND %I0.6 ) AND %I0.4 OR( %I0.7 AND %I0.8 ) ) ST %Q0.0 |
Числові інструкції зазвичай стосуються 16-бітних слів та 32-бітних подвійних слів. Вони записуються між квадратними дужками. Якщо результат попередньої логічної операції був істинним (булевий акумулятор = 1), чисельна інструкція виконується. Якщо результат попередньої логічної операції був хибним (булевий акумулятор = 0), числова інструкція не виконується, і операнд залишається незмінним.
Інструкція присвоєння застосовуються для завантаження значення Op2 (операнд 2) в Op1 (операнд 1).
Оператор | Синтаксис |
---|---|
:= | [Op1: = Op2] Op1 приймає значення Op2 |
Приклад присвоєння для типу word
Інструкція IL | Еквівалент на мові LD |
---|---|
LD 1 [%SW112:=%MW100] |
|
LD %I0.2 [%MW0[%MW10]:=%KW0[%MW20]] |
|
LD %I0.3 [%MW10:=100] |
Арифметичні оператори використовуються для виконання арифметичних операцій між 2 цілими операндами або з 1 цілим операндом.
У таблиці перелічені типи арифметичних операторів:
Оператор | Функція |
---|---|
+ | Додавання двох операндів |
- | Віднімання двох операндів |
* | Множення двох операндів |
/ | Ділення двох операндів |
REM | Залишок від ділення двох операндів |
SQRT | Квадратний корінь операнда |
INC | Інкрементування операнда (збільшення на 1) |
DEC | Декрементування операнда (зменшення на 1) |
ABS | Абсолютне значення операнда |
Синтаксис для арифметичних інструкцій:
Оператор | Синтаксис |
---|---|
+,-,*,/,REM | [Op1: = Op2 operator Op3] |
INC, DEC | [operator Op1] |
SQRT (1) | [Op1: = SQRT(Op2)] |
ABS (1) | [Op1: = ABS(Op2)] |
Приклади арифметичних інструкцій:
Інструкція IL | Еквівалент на мові LD |
---|---|
LD %M0 [%MW0:=%MW10+10] |
|
LD %I0.2 [%MW0:=SQRT(%MW10)] |
|
LDR %I0.3 [%MW10:=32767] |
Розробив лекцію - Полупан Володимир. АКТСУ НУХТ
<- до лекцій | на основну сторінку курсу |
---|---|
<-Мова Grafcet | PID-регулювання -> |