Лекція 2.2 Програмування ПЛК (CoDeSys)
1. Мови МЕК
1.6. IL
Мова IL (Instruction list) дослівно – список інструкцій. Це типовий асемблер з акумулятором і переходами по мітках. Набір інструкцій стандартизований і не залежить від конкретної цільової платформи. Оскільки IL найпростіша у реалізації мова, вона отримала значне поширення до прийняття стандарту МЕК. Точніше, не сама IL, а дуже схожі на неї реалізації. Практично всі виробники ПЛК Європи створювали подібні системи програмування, схожі на сучасну мову IL. Найбільший вплив на формування сучасного IL зробила мова програмування STEP контролерів фірми Siemens. Мова IL дозволяє працювати з будь-якими типами даних, викликати функції й функціональні блоки, реалізовані будь-якою мовою. Таким чином, на IL можна реалізувати алгоритм будь-якої складності, хоча текст буде досить громіздким.
У складі МЕК-мов IL застосовується при створенні компактних
компонентів, що вимагають ретельного пророблення. При роботі з IL набагато
краще, ніж з іншими мовами, можна уявити, як буде виглядати
відтрансльований код. Завдяки чому, IL виграє там, де потрібно досягти
найвищої ефективності. Особливо це відноситься до компіляторів. У системах
виконання з інтерпретатором проміжного коду виграш не настільки значний.
Текст на IL – це текстовий список послідовних інструкцій. Кожна інструкція записується на окремому рядку й містить оператори, в залежності від типу операції, один і більше операндів, розділених комами. Інструкція може включати 4 поля, розділені пробілами або знаками табуляції:
Мітка: Оператор Операнд Коментар
Перед операндом може знаходитися мітка, що закінчується двокрапкою ( : ). Мітка інструкції не є обов'язковою, вона ставиться тільки там, де потрібно. Оператор присутній обов'язково. Операнд необхідний майже завжди. Коментар – необов'язкове поле, записується наприкінці рядка. Коментар записується між двома круглими дужками та символами (* *). Коментар повинен бути останнім елементом у рядку. Між інструкціями можуть бути порожні рядки. Давати коментарі між полями інструкції не можна.
Для кращого сприйняття рядка IL вирівнюють звичайно у стовпчики відносно поля.
Редактор CoDeSys вирівнює текст автоматично. Крім цього, редактор «нальоту» виконує синтаксичний контроль і виділення кольором. Так, коректно введені оператори виділяються блакитним кольором.
Акумулятор:
Абсолютна більшість інструкцій IL виконують деяку операцію зі змістом акумулятора (див. його визначення трохи нижче). Операнд, звичайно, теж бере участь в інструкції, але результат знову поміщається в акумулятор. Наприклад, інструкція SUB 10 віднімає число 10 від значення акумулятора й поміщає результат в акумулятор. Команди порівняння порівнюють значення операнда й акумулятора, результат порівняння ІСТИНА (TRUE) або НЕПРАВДА (FALSE) знову поміщається в акумулятор. Команди переходу на мітку здатні аналізувати акумулятор і приймати рішення – виконувати перехід чи ні.
Акумулятор IL є універсальним контейнером, здатним зберігати значення змінних будь-якого типу.
В акумулятор можна помістити значення типу BOOL, потім INT або
REAL, транслятор не буде вважати це помилкою. Така гнучкість не означає, що
акумулятор здатний одночасно мати кілька значень різних типів. Тільки одне,
причому тип значення також фіксується в акумуляторі. Якщо операція вимагає
значення іншого типу, транслятор видасть помилку.
У стандарті МЕК замість терміна «акумулятор» використовується термін
«результат» (result). Так, інструкція бере «поточний результат» і формує
«новий результат». Проте майже всі посібники із програмування різних фірм
широко використовують термін «акумулятор».
Перехід на мітку:
Програма на IL виконується підряд, зверху вниз. Для зміни порядку
виконання й організації циклів застосовується перехід на мітку. Перехід на
мітку може бути безумовним JMP – виконується завжди, незалежно від будьчого. Умовний перехід JMPC виконується тільки при значенні акумулятора
ІСТИНА. Перехід можна виконувати як уверх, так і вниз. Мітки є локальними,
інакше кажучи, перехід на мітку в іншому POU не допускається.
Переходи потрібно організовувати досить акуратно, щоб не отримати
нескінченний цикл:
У прикладі показана реалізація циклу на 5 повторень із однією очевидною помилкою. Замість безумовного переходу JMP повинен бути JMPС.
У системах з інтерпретатором IL або проміжним кодуванням час виконання переходу є залежним від напрямку й відстані. У СоDeSys команда безумовного переходу транслюється в одну машинну команду й виконується дуже швидко. Обмежень на число переходів у СоDeSys немає.
Але це не означає доцільність створення більших монолітних IL-програм
з множиною переходів. Такі програми дуже складно читати й нелегко
супроводжувати.
Коментування тексту:
Мова IL є мовою низького рівня. Тому тексти IL завжди досить великі за
обсягом. Звичайно при написанні програми алгоритм здається настільки
зрозумілим, що не має потреби в коментарях. Однак текст чужої програми без
коментарів зрозуміти дуже важко. Нерідко буває, що й самому автору програми
через рік-інший після її написання важко в ній розібратися. Можливість
коментувати кожний рядок не означає, що так і потрібно робити. Правильно
складене пояснення повинне пояснювати суть проблеми й ідею рішення, а не
описувати самі команди. Наприклад: (*Ігнорувати коливання до 5 одиниць*) –
поганий коментар. (*Коливання вимірів до 5 одиниць є шумом*) – значно
краще.
Транслятор IL CoDeSys допускає богаторядкові коментарі. Цілісне пояснення завжди сприймається краще, ніж короткі уривкові коментарі в рядках інструкцій.
Коментарі МЕК мають один важливий недолік. Якщо при налагодженні знадобиться тимчасово відключити частину вихідного тексту, то простіше за все його цілком закоментувати. Тут звичайно й виникає проблема вкладених коментарів. Вкладені коментарі не настільки страшні для транслятора CoDeSys, скільки завдають незручності при виправленні тексту. Строкові коментарі (які уводять за допомогою ; – в асемблері й // – в C++), на жаль, стандартом МЕК не передбачені.
Шрифти
Розмір шрифта
Колір тексту
Колір тла
Кернінг шрифтів
Видимість картинок
Інтервал між літерами
Висота рядка