Показаны сообщения с ярлыком PLCFramework. Показать все сообщения
Показаны сообщения с ярлыком PLCFramework. Показать все сообщения

воскресенье, 27 августа 2017 г.

Станово-орієнтоване керування (state based control) з каркасу



Це  фрагмент з опису каркасу, який постійно оновлюється https://www.slideshare.net/pupenasan/pac-framework-v1.

Станово-орієнтоване керування (state based control)

У основі концепції каркасу лежить парадигма керування і створення ПЗ, що базується на поняттях станів. У кожен момент часу об’єкт та система керування знаходиться в певному стані, в залежності від якого може змінюватися не тільки величина сигналів керування, а і самі алгоритми. Особливо яскраво це проявляється в періодичних та дискретних виробництвах, де одне і те саме обладнання в різний момент часу працює в різних умовах та з різним типом матеріалу. Для неперервних процесів це менш типово, однак в моменти пуску, зупину, зміни обладнання (наприклад переключення насосів), нештатних ситуацій (тривоги), зміни режиму, необхідно також передбачати іншу поведінку системи і алгоритми роботи. У таких випадках, першочергово для розроблювальної програми керування означується автомат з кінцевої кількості станів (скінчений автомат), що включає:
-          самі стани та необхідні дії (або окремі алгоритми) при їх активності,
-          та переходи (умови переходів) між ними.
Скінчені автомати можна описувати формулами, таблицями або діаграмами. Для практичного використання в програмуванні систем керування знайшли застосування таблиці (наприклад барабанний регулятор, DRUM-controller), спеціалізовані мови програмування (SFC, Grafcet). У текстових мовах (наприклад ST) такий автомат добре описується структурою CASE, де в якості змінної CASE є умовний номер стану (кроку). Формальних методів описів (моделей) доволі багато: мережі Петрі, скінчені автомати Мура, Мілі. Програмування на базі станів також називають станово-орієнтованим, автоматним, або case-програмуванням.       
Самі прості і зрозумілі для більшості автомати станів, які використовуються у всіх системах керування, - це режими роботи регуляторів. У даному випадку слово "режим" не протиставляється слову "стан", і розуміється як підвид стану. Враховуючи що кожен регулятор в автоматизованих системах передбачає втручання людини, він повинен мати автоматичний та ручний режим, який означує джерело звідки буде змінюватися значення, що йде на виконавчий механізм. Переходи між цими станами (режимами) відбуваються за команди оператору (хоча можуть проводитися і програмним шляхом). Деякі системи можуть потребувати окремого режиму ручного керування за місцем, тому в такому випадку станів (режимів) вже буде три: ручний (дистанційний, диспетчерський), автоматичний та місцевий (ручний за місцем). Назва режиму не має значення, але той факт, що в кожному режимі необхідно передбачити логіку (алгоритм) роботи контуру регулювання не має викликати сумнівів. Для цих трьох станів (режимів) треба означувати поведінку регулятору при протиречних командах за місцем і дистанційному. Навіть на цьому простому прикладі, означення окремих станів (режимів) не є тривіальними і передбачає обов’язкове  означення поведінки регулятору в кожному з них, що лягає на плечі проектанта (як правило не програміста). Враховуючи, що обладнання запускається і зупиняється, необхідно також передбачувати в якому зі станів (режимів) воно буде знаходитися під час пуску.      
Другий популярний приклад використання станів – це керування тривогами. У більшості випадків кожна тривога описуються класичним набором станів:
·         нормальний (Alarm OFF), коли немає тривоги за даною змінною;
·         непідтверджена активна тривога (Alarm ON not ACK), коли тривога виникла а оператор її ще не квітував;
·         підтверджена активна тривога (Alarm ON ACK), коли умова активності тривоги виконується, але оператор її підтвердив (квітував)
·         непідтверджена неактивна тривога (Alarm OFF not ACK), коли умова активації тривоги вже не виконується, але оператор ще не зробив квітування.   
Означення самих станів (їх може бути більше або менше) потребується для того, щоб забезпечити правильні дії. Так, наприклад, аварійна сирена (оповіщувач) може бути увімкненою до тих пір, поки оператор не зробив квітування, навіть якщо умова активності тривоги не виконується. Світлова сигналізація у свою чергу може миготіти для непідтверджених тривог, та горіти постійно для активних підтверджених.   
 
 
       
Слід зазначити, що описані вище приклади стосуються усіх типів процесів та виробництв. Для періодичних процесів необхідність в означенні станів ще більш очевидна, бо одне і те саме обладнання в кожен момент часу має робити різні керівні діяльності, наприклад наповнення апарату, дозування інгредієнтів, нагрівання, мийка, тощо. Ці періоди роботи, які характеризуються одним набором діяльностей зручно відокремлювати в окремий стан (крок, етап), при активності якого активуються ті чи інші алгоритми керування. Цей механізм є одним із фундаментальним в стандарті ISA-88 (Batch Control).       
Таким чином, кожен об’єкт (обладнання, програма, регулятор тощо) характеризується певним станом, в залежності від якого система керування виконує той чи інший алгоритм. Дуже важливим є розуміння того, що один і той самий об’єкт характеризується набором станів з точки зору різних аспектів. Так, наприклад, запірний клапан може характеризуватися наступними наборами станів і підстанів:
-          положення: відкритий, закритий, відкривається, закривається, невизначений;
-          тривоги (кожна тривога описується своїм автоматом станів тривог): не закрився, не відкрився, довільний зсув, помилка датчиків положення;
-          блокування: заблокований, незаблокований;
-          режим роботи: ручний, автоматичний
Ці набори (автомати станів) можуть бути взаємопов’язані і впливати один на одного. Наприклад, одна з тривог може привести до блокування клапана, тобто переводу в спеціально означений стан "заблокований". У цьому стані вихід на керування клапаном буде відключеним, і при цьому режим буде насильно триматися в ручному, поки не буде відправлена команда на розблокування. Однак, в той же час, положення буде вказувати на дійсне положення клапану згідно датчиків кінцевого положення та команд керування.     
Слова "Режим" і "Стан" у конкретному випадку можуть означувати різні особливості діяльності. З одного боку, вони обидва описуються автоматом станів. Однак "Стан" як правило вказує на плинну ситуацію, а "Режим" – на особливості поведінки алгоритмів керування. Тому "ручний/автомат" та "заблоковано/незаблоковано" прийнято називати режимами, так як вони означують особливості керування. У ручному режимі команди на клапан відправляє оператор. У заблокованому режимі на клапан завжди подається команда закриття. Наявність двох "автоматів режимів" (це теж автомат станів, але слово "стан" не використовується, щоб протиставити режими станам), також потребує їх узгодження, бо їх дії конфліктують між собою. Тому необхідно означити пріоритети, наприклад дії в режимі "заблоковано" мають вищий пріоритет ніж в режимі "ручний".
Режими і стани означені в системі керування для різних об’єктів теж як правило взаємодіють між собою. Так, наприклад, для усієї установки можуть бути означені режими: ручний, автоматичний та наладки. При цьому зміна режиму в "наладки" може змінювати пріоритет режимів "ручний/автомат" та "заблоковано/незаблоковано".
Для означення набору станів в програмі користувача потребуються стільки змінних, скільки автоматів станів. Для прикладу з дискретним клапаном треба змінні:
-          положення: (5 значень);
-          тривоги (кожна тривога описується своїм автоматом станів тривог, тому потребується окрема змінна): не закрився (4 значення), не відкрився (4 значення), довільний зсув(4 значення), помилка датчиків положення (4 значення);
-          блокування (2 значення): заблокований, незаблокований;
-          режим роботи (2 значення): ручний, автоматичний
Оскільки системи керування передбачають наявність SCADA/HMI, стани кожної тривоги в програмі користувача ПЛК можна означити тільки 2 значеннями. Навіть при такій постановці, кількість змінних є дуже великою, а значень станів при цьому досить небагато (часто 2). Тому є сенс їх "упакувати" в одне слово статусу, біти якого будуть представляти стан/режим певного автомату. Такий підхід використовується, наприклад, при керуванні перетворювачами частоти та севроприводами по мережі (IEC 61800-7: профілі PROFIDRIVE, CIA402, CIP Motion, SERCOS). У даному каркасі усі біти станів об’єктів пакуються в одну змінну (поле структури) з назвою STA. Приклад такого упакування показаний в 1.4.

вторник, 31 января 2017 г.

Функціональний каркас для розробки програм для програмованих контролерів IEC 61131

Сьогодні допилив чорнову версію опису каркасу для ПЛК. Сам каркас (в першій робочій редакції) доробив ще на початку року для Unity PRO + Zenon. Крім того він ліг в основу з певними змінами в новий проект на TIA13. Деякі зміни були принциповими, але я їх не запам'ятав. Щоб не забути все інше вирішив добити хоча б якусь чорнову версію, бо не знаю коли наступного разу до нього доберуся.
Посилання та короткий опис тут http://asu.in.ua/viewtopic.php?f=7&t=1755
Ідея каркасу вже вітає давно, та і вона не нова. Тим не менше, реальні роботи почалися з замовлення "Саутком", яке я так і не доробив з причин "нахватався робіт більше, ніж міг виконати". Сподіваюся, що я їх не підвів, принаймні вони нічого з цього приводу не казали. Їм треба було дещо інше, але дуже близько до цього.
У той же час розробка програм для ГРС потребувала багато функціональності стосовно сервісних функцій. З кожною функцією шанхай ріс, і розробка каркасу для передбачення усіх можливих типових функцій - це була нагайна потреба. Плинний каркас добре ліг з однієї платформи (Юніті) на іншу (ТІА), практично копіпастом. Це суперперрезультат, враховуючи що реальної серйозної перевірки юнітьовський каркас не проходив. Головне не код, а ідеологія. Ті речі, за які переживав, що щось не врахував - практично усі заробили. Так, були ньюанси, але вони не порушують загальної працездатності основних приницпів.
 Оба базові рівні "канали" і "змінні" запрацювали. Рівень виконавчих механізмів сильно відрізнявся від демо-проекту (бачки) і реального (ГРС). У останньому використовуються крани, які в наших переробних процесах практично відсутні. Тому ці крани прийшлося допилювати серйозно в ТІАшному проекті. Вилізла необхідність додаткової змінної керування краном CMDPRG яка паралельно йде з CMDHMI, оскільки постійне забивання одного і того ж CMD з  програми не давало шансів ЛМІ-шному. Це характерно тільки для обєктів цього левела та вище.
Далі планую, як тільки з'явиться трохи часу (хоча він, собака, вже років десять не з'являється) описати каркас в ппт та і можливо зняти якесь відео. У будь якому випадку, буду намагатися зробити його нашим (кафедральним) корпоративним стандартом. Потрібно перетворювати написання базового рівня програм в трудовий процес а не експерементально-творчий. Тоді можна буде братися за велику об'єкти. Маю на це сподівання.