<- до лекцій | на основну сторінку курсу |
---|---|
<-Мова 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-регулювання -> |