| на основну сторінку курсу | лабораторні |
|---|---|
| <-ЛР9 |
Мета: навчитися створювати власні функції та функціональні блоки.
Необхідне програмне забезпечення. EcoStruxure Machine Expert Basic
Враховуючи що вимірювальне значення отримується з аналогового входу через змінну %IW в цілочисельному форматі (наприклад в діапазоні 0-10000), при відображенні оператору воно неінформативне. Для відображенні на засобах людино-машинного інтерфейсу (ЛМІ), наприклад панелях оператора чи комп’ютері, його необхідно перетворити в інженерні одиниці. Таке перетворення прийнято називати масштабуванням. Як правило, засоби ЛМІ вміють робити лінійне масштабування, однак інколи необхідно це робити на самому ПЛК.
Лінійне масштабування, тобто перетворення вхідних сирих одиниць у інженерні масштабовані може проводитися за формулою (див. рис.10.1):
S = k*R + Sb (10.1)
де S – отримуване масштабоване значення в інженерних одиницях; R – вхідне сире немасштабоване значення, Sb – зміщення; k – коефіцієнт, який дорівнює тангенсу кута нахилу прямої масштабування до осі абсцис.

рис.10.1. Лінійне масштабування
Задавання масштабування у вигляді (10.1) вимагає від розробника додаткових розрахунків. Замість цього зручніше задавати тільки мінімальні та максимальні межі для сирого (raw) і масштабованого (scaled) значення. На рис.10.1 межі сирого значення показані як Rmax та Rmin, а масштабованого як Smax та Smin. Так, наприклад, якщо в ПЛК значення від датчика задається в діапазоні від 0-10000 (одиниць ПЛК) а на ЛМІ воно повинно відображатися як 50.0-150.0 (°С), то:
Rmin = 0 (одиниць ПЛК) –> Smin = 50.0 (°С)
Rmax = 10000 (одиниць ПЛК) -> Smax = 150.0 (°С)
Формула визначення S з використанням змінних діапазонів матиме вигляд:
S = Smin + (R-Rmin)(Smax-Smin)/(Rmax-Rmin) (10.2)
Параметрами функції будуть усі необхідні вхідні значення, потрібні для масштабування:
%RAW - сире значення вимірювальної величини типу WORD%RMIN- нижня межа сирого значення вимірювальної величини типу WORD%RMAX- верхня межа сирого значення вимірювальної величини типу WORD%SMIN - нижня межа масштабованого значення величини типу Float%SMAX - верхня межа масштабованого значення величини типу FloatВиходом функції буде масштабоване значення %SRET типу Float.
У процесі розрахунку необхідно робити проміжні перетворення. Зокрема, треба перетворити цілі числа у дійсні, щоб зробити арифметичні операції, наведені в формулі (10.2), тому що не дозволяється робити обчислення з різними типами. Зрештою, можна б було написати одну велику формулу, яка б враховувала і ці перетворення, однак в середовищі є певні обмеження на максимальну кількість операндів. Тому додатково необхідно ввести проміжні змінні:
%K - для розрахунку співвідношень масштабів%RAW_F - сире значення вимірювальної величини перетвореного в Float%RMIN_F - нижня межа сирого значення вимірювальної величини перетвореного в Float%RMAX_F - верхня межа сирого значення вимірювальної величини перетвореного в FloatProgramming створіть власну функцію
рис.10.2. Створення власної функції

рис.10.3. Інтерфейс функції масштабування
Натисніть Apply для підтвердження параметрів
Переіменуйте функцію в SCALE (рис.10.4)

рис.10.4. Перейменування функції

рис.10.5. Реалізація коду функції масштабування
Перші три оператори переводять значення з типу INT в REAL Четвертий оператор розраховує частину формули (Smax-Smin)/(Rmax-Rmin) , останній вже робить кінцевий розрахунок:
%SRET := %SMIN + %RAW_F * %K
SCALE (рис.10.6).
рис.10.6. Реалізація прикладу використання функції масштабування
Перший виклик функції реалізовує перетворення виміряного значення з аналогового входу, вбудованого в модуль ЦПУ (%IW0.0) в діапазон 0-100%. Другий виклик реалізовує перетворення з аналогового входу модуля %IW1.0 в значення сигналу 50.0-150.0 °C. Значення записуються в %MF100 та %MF102.
Зверніть увагу, що змінні
%MFзнаходяться в комірках пам’яті через одну, оскільки%MF100займає дві комірки підряд, тобто%MW100та%MW101, а%MF101-%MW101та%MW102.
Так само, як і в функціях, у функціональних блоках доступні для використання параметри, локальні та глобальні змінні.
Word, Double або Float ;Word, Double або FloatДодатково є можливість добавити булеві входи та виходи. Таким чином можна керувати функціональним блоком через булеві входи, у свою чергу забираючи булеві результати. При необхідності використання числових входів/виходів використовуються параметри, які можна змінювати ззовні функціонального блоку звертаючись до них за іменем.
Наступний рисунок показує дії, доступні у вікні Properties для функціональних блоків користувача:

рис.10.7. Налаштування функціональних блоків користувача.
1 - добавлення входів та виходів змінних, 2 - видалення входів/виходів, 3 - видалення параметру або локальної змінної, 4 - добавлення параметру або локальної змінної, 5 - опис призначення функціонального блоку, 6 - відкріплення вікна властивостей, 7 - кількість використаних екземплярів даного типу функціонального блоку
Функціональні блоки використовуються так само, як і інші функціональні блоки. Так, наприклад, до їх параметрів можна звертатися за назвою UDFB та назвою параметру через крапку (наприклад %UDFB1.PARA1). Параметри доступні як для читання, так і для запису.
Необхідно розробити фрагмент керування програмою користувача для керування клапанами з датчиками кінцевого положення. Необхідно реалізувати:

рис.10.8. Діаграма для автомату станів клапану
Створіть новий проект.
Створіть новий тип функціонального блоку (рис.10.9)

рис.10.9. Створення нового типу функціонального блоку
CMD - подача команди в автоматичному режиміAUTO - ручний (0), або автоматичний (1) режимMCMD - подача команди в ручному режиміGSOPN - датчик кінцевого положення ВІДКРИТОGSCLS - датчик кінцевого положення ЗАКРИТО
рис.10.10. Означення інтерфейсу функціонального блоку
OUT - вихід на виконавчий механізмALMOPN - вихід сигналу тривоги “НЕ ВІДКРИВСЯ”ALMCLS - вихід сигналу тривоги “НЕ ЗАКРИВСЯ”ALMSENS - вихід сигналу тривоги “Помилка датчика або довільний зсув”%TMSP - параметр, який вказує на максимальний час відкриття (в секундах)%TM -параметр, який вказує час плинного стану (в секундах)%STA - параметр, який вказує плинний стан клапану: 0 - ініціалізація, 1 - відкритий, 2 - закритий, 12 - відкривається, 21 - закривається%BITS - внутрішня змінна, для розрахунку та збереження бітових результатівПараметри видимі в програмі користувача поза функціонального блоку, внутрішні змінні видимі тільки в межах функціонального блоку.

рис.10.11. Керування виходом OUT у залежності від режиму.
Вихід OUT керується входом CMD в режимі AUTO і MCMD у ручному режимі. Зрештою такий ланцюжок можна прокоментувати так:
%OUT := %CMD при %AUTO=1%OUT := %MCMD при %AUTO=0

рис.10.12. Фрагмент програми для реалізації станів 0, 1 і 2
У цьому фрагменті реалізована поведінка в станах 0, 1 та 2:
OUT, значення часу (%TM) стану обнуляється і стан переходить в значення 12 - закривається;значення 12 і 21 взято для зручності читання, і читається як перехід з 1 в 2, та перехід з 2 в 1 відповідно;
зверніть увагу, що як тільки у відкритому стані вікдлючиться вихід - спочатку обнулиться час кроку, а потім вже відбудеться перевірка датчиків, тому в цій ситуації помилка датчика не відловиться
зверніть увагу, що замість булевих змінних можна використовувати біти слів, так запис
%BITS:X1вказує на використання 1-го біту в слові%BITS
Аналогічно реалізовані переходи та перевірка для закритого стану.

рис.10.13. Реалізація перехідного режиму.
У перехідних станах (21 і 12) перевіряється час стану (рис.10.13). Якщо цей час %TM більше заданого максимального %TMSP спрацьовує відповідний вихід тривоги. Перехідний стан завершується при спрацюванні відповідних датчиків, при цьому обнуляється час стану, саме присвоєння новому стану йде в наступному ланцюгу (див. рис.10.14). Якщо у перехідному стані, команда змінюється, то стан переходить в інший перехідний (наприклад з 21-го в 12-й при відключенні OUT).
Наступний фрагмент коду реалізує перехід в кінцеві стани при відповідних умовах, а також спрацювання виходу тривоги помилки датчика або довільного зсуву.

рис.10.14. Реалізація переходу в кінцеві стани та контроль помилок.

рис.10.15. Реалізація часу кроку.
Час кроку реалізується через змінну %TM, яка збільшується з кожною секундою. Для цього використаний бітовий меандр %S6 , який протягом 0.5 секунд тримає логічну одиницю, і стільки ж логічний нуль. У М221 не можна ловити фронти на системних бітах, тому для відлову переходів з 0 в 1 треба зберігати попереднє значення %S6 в 0-му біті внутрішнього слова %BITS.
Важливо зробити обмеження збільшення часу %TM, так як при досягненні верхньої межи додатного значення (32767), змінна перейди у від’ємне значення. Тут плинне значення використовується більше для контролю перехідних станів, тому обмеження в 8 з чимось годин (32000/60/60) для цих задач цілком достатньо. При необхідності більшого часу, необхідно реалізовувати додаткові лічильники, або використовувати змінну типу DWORD.

рис.10.16. Використання функціонального блоку користувача для одного клапану

рис.10.17. Вставлення функціонального блоку користувача
У першому Rung виставляється уставка часу (5 секунд) для клапану %VLV1. У Rung2 клапан функціонального блоку підключається до відповідних глобальних змінних.
Зверніть увагу, в даному прикладі виходи тривог записуються в біти слова
%MW. Нерідко, засоби людино-машинного інтерфейсу сприймають біти тривог через 16-бітні слова. Сам процес записування булевих значень в біти слів називають “упакуванням”.

рис.10.18. Експортування функціонального блоку у файл
У Вашому завданні є дискретні клапани або двигуни.
Для клапанів: Модифікуйте програму так, щоб виконувалась перевірка закривання та відкривання клапану перед переходом до наступних кроків.
Для двигунів (якщо дискретних клапанів немає): модифікуйте функціональний блок та програму так, щоб виконувалась перевірка спрацювання двигуна (зворотній сигнал по контакту від контактору).
У випадку не зрозумілості постановки завдання, уточніть завдання у викладача.
Це завдання не є обов’язковим для виконання. За успішного виконання цього завдання, студент отримує додаткові бали на іспиті
%TMSP-1Розробив лабораторну - Олександр Пупена. АКТСУ НУХТ
| на основну сторінку курсу | лабораторні |
|---|---|
| <-ЛР9 |