Екземпляри класу PLC є центральними координуючими модулями керування, які відповідають за організацію загально-контролерних функцій, зокрема (але не обмежено ними):
Приклад індикації стану ПЛК показаний на рис.2.10. У даному випадку М – це наявність хоча б одного ВМ в ручному режимі, F – наявність хоча б одного форсування, S – наявність хоча б одного об’єкта (CM/EM/UNIT) в режимі імітації, W – наявність хоча б однієї тривоги рівня “попередження”, A – наявність хоча б однієї тривоги рівня “аварія”. Додатковими бітами статусу для відображення також можуть бути: наявність хоча б одного біта недостовірності, наявність хоча б однієї відключеної змінної (виведеної з обслуговування), “процедура технологічної комірки в роботі/паузі/утримання”, “апарат в роботі/паузі/утримання”, “CIP в роботі/паузі/утримання”.
рис.2.10. Приклад індикації стану ПЛК
Функція обробки PLCFN повинна запускатися на початку задачі. Це необхідно для правильної обробки бітів статусу та тривог.
Робота функції передбачає виконання усіх інших функцій каркасу в тому самому циклі задачі!
Як правило для PLC достатньо одного екземпляру і можна обійтися тільки однією структурою. Однак з метою зменшення навантаження на комунікацію і забезпечення командного вводу параметрів (коли оператор спочатку змінює конфігуровані значення в буфер а потім записує їх в змінну) можна виділити змінні PLC_HMI та PLC_BUF. Можливий варіант структури показаний в таблиці.
Атрибут | Тип | Біт | Опис |
---|---|---|---|
ID | UINT | Унікальний ідентифікатор | |
CLSID | UINT | 16#21xx | |
STA | UINT | 0 | |
1 | |||
2 BLK | =1 – є хоча б один заблокований ВМ | ||
3 ALDIS | =1 – є хоча б одна відключена тривога | ||
4 | |||
5 | |||
6 | |||
7 FRC | =1 – хоча б одна змінна форсована на будь якому рівні | ||
8 SMLALL | =1 – все в режимі в імітації, примушує усі CM перейти в режим імітації | ||
9 DISP | =1 – хоча б один елемент в режимі ручного управління | ||
10 FRC2 | =1 – є хоча б один форсований керівний елемент (рівня 2), клапан, двигун | ||
11 FRС1 | =1 – хоча б одна змінна форсована (рівня 1) | ||
12 SCN1 | =1 – перший скан | ||
13 FRС0 | =1 – хоча б одна змінна форсована (рівня 0) | ||
14 SML | =1 – хоча б один об’єкт в режимі імітації | ||
CMD | UINT | Команди з HMI: 16#0100 – прочитати конфігурацію 16#0101 – записати конфігурацію 16#0111 – синхронізувати час з верхнім рівнем 16#0301 – вимкнути сирену 16#0302 – увімкнути сирену 16#4101 – записати конфігурація за замовченням для усіх змінних DIVAR 16#4102 – записати конфігурація за замовченням для усіх змінних AIVAR 16#4103 – записати конфігурація за замовченням для усіх змінних DOVAR 16#4104 – записати конфігурація за замовченням для усіх змінних AOVAR 16#4302 – дефорсувати всі об’єкти |
|
CMDPRG | INT | Команди з програмного керування (побітові) | |
PRM1 | INT | дискретні параметри | |
PRM2 | INT | дискретні параметри | |
PLS | INT | 0 P100MS | імпульс на один цикл основної задачі з періодичністю 100 мс |
1 P200MS | 200 мс | ||
2 P500MS | 500 мс | ||
3 P1S | 1 с | ||
4 P2S | 2 с | ||
5 P5S | 5 с | ||
6 P10S | 10 с | ||
7 P60S | 1 хв | ||
8 M1S | меандр з періодом 1 с (0.5 с + 0.5 с) | ||
9 M2S | меандр з періодом 2 с (1 с + 1 с) | ||
10-12 | можуть бути використані для інших бітових меандрів: | ||
13 | =1 (на один цикл основної задачі) – початок години | ||
14 | =1 (на один цикл основної задачі) – початок доби | ||
15 | =1 (на один цикл основної задачі) – початок зміни | ||
ALM1 | INT | 0 ALM | =1, є хоча б одна тривога аварійного рівня |
1 NWALM | =1, нова тривога аварійного рівня | ||
2 ALMNACK | =1, є неквітовані тривоги | ||
3 WRN | =1, є хоча б одна тривога попереджувального рівня | ||
4 NWWRN | =1, нова тривога попереджувального рівня | ||
5 WRNNACK | =1, є неквітовані попередження | ||
6 BAD | =1, є хоча б одна тривога недостовірності | ||
7 NWBAD | =1, нова тривога недостовірності | ||
8 BADNACK | =1, є неквітовані тривоги недостовірності | ||
9 EMCYSTP | =1, аварійний зупин (грибок) | ||
10 STP2RUN | =1, момент переходу з аварійного зупину в роботу | ||
11 | |||
12 | |||
13 | |||
14 | =1 – є апаратна помилка (ПЛК) | ||
15 | |||
ALM2 | INT | ||
STEP1 | INT | крок основної програми | |
TSTEP1 | INT | час кроку основної програми обробки, в (с) | |
MSG | UDINT | для формування повідомлень, може бути як бітовим (32 повідомлення), так і числовим (за номером); передбачається, що повідомлення буде скидуватися в 0 автоматично через певний час (не менш ніж 2 інтервали опитування з HMI) | |
TQ | UDINT | загальний час з початку 1-го циклу контролера (в секундах) | |
TQM | UDINT | загальний час роботи ПЛК з моменту пуску (в хвилинах) | |
DICNT | UINT | кількість наявних каналів DI | |
DOCNT | UINT | кількість наявних каналів DO | |
AICNT | UINT | кількість наявних каналів AI | |
AOCNT | UINT | кількість наявних каналів AO | |
NOW | ARRAY[0..3] of INT | плинний час астрономічний час в BCD форматі: NOW[0] seconds,– (16#ss,–) NOW[1] hour, minute (16#hhmm) NOW[2] month, day (16#mmdd) NOW[3] year (16#yyyy) |
|
SHIFTPARA | ARRAY[0..4] of INT | Години передачі змін (максимум 3 зміни): SHIFT[0] – кількість змін SHIFT[1] – передача 1-ї зміни (BCD 16#hhmm) SHIFT[2] – передача 2-ї зміни (BCD 16#hhmm) SHIFT[3] – передача 3-ї зміни (BCD 16#hhmm) |
|
SHIFTNMB | INT | номер активної зміни | |
REZ | INT | резерв |
Атрибут | Тип | Біт | Опис |
---|---|---|---|
ID | UINT | Унікальний ідентифікатор | |
CLSID | UINT | ||
STA[0..7] | UINT | 0 | |
1 | |||
2 BLK | =1 – є хоча б один заблокований ВМ | ||
3 ALDIS | =1 – є хоча б одна відключена тривога | ||
4 | |||
5 | |||
6 | |||
7 FRC | =1 – хоча б одна змінна форсована на будь якому рівні | ||
8 SMLALL | =1 – все в режимі в імітації, примушує усі CM перейти в режим імітації | ||
9 DISP | =1 – хоча б один елемент в режимі ручного управління | ||
10 FRC2 | =1 – є хоча б один форсований керівний елемент (рівня 2), клапан, двигун | ||
11 FRС1 | =1 – хоча б одна змінна форсована (рівня 1) | ||
12 SCN1 | =1 – перший скан | ||
13 FRС0 | =1 – хоча б одна змінна форсована (рівня 0) | ||
14 SML | =1 – хоча б один об’єкт в режимі імітації | ||
CMD[0..7] | UINT | Команди з HMI: 16#0100 – прочитати конфігурацію 16#0101 – записати конфігурацію 16#0301 – вимкнути сирену 16#0302 – увімкнути сирену 16#4101 – записати конфігурація за замовченням для усіх змінних DIVAR 16#4102 – записати конфігурація за замовченням для усіх змінних AIVAR 16#4103 – записати конфігурація за замовченням для усіх змінних DOVAR 16#4104 – записати конфігурація за замовченням для усіх змінних AOVAR 16#4302 – дефорсувати всі об’єкти |
|
PRM[0..7] | INT | дискретні параметри | |
PLS[0..7] | INT | 0 P100MS | імпульс на один цикл основної задачі з періодичністю 100 мс |
1 P200MS | 200 мс | ||
2 P500MS | 500 мс | ||
3 P1S | 1 с | ||
4 P2S | 2 с | ||
5 P5S | 5 с | ||
6 P10S | 10 с | ||
7 P60S | 1 хв | ||
8 M1S | меандр з періодом 1 с (0.5 с + 0.5 с) | ||
9 M2S | меандр з періодом 2 с (1 с + 1 с) | ||
10-12 | можуть бути використані для інших бітових меандрів: | ||
13 | =1 (на один цикл основної задачі) – початок години | ||
14 | =1 (на один цикл основної задачі) – початок доби | ||
15 | =1 (на один цикл основної задачі) – початок зміни | ||
ALM[0..7] | INT | 0 ALM | =1, є хоча б одна тривога аварійного рівня |
1 NWALM | =1, нова тривога аварійного рівня | ||
2 ALMNACK | =1, є неквітовані тривоги | ||
3 WRN | =1, є хоча б одна тривога попереджувального рівня | ||
4 NWWRN | =1, нова тривога попереджувального рівня | ||
5 WRNNACK | =1, є неквітовані попередження | ||
6 BAD | =1, є хоча б одна тривога недостовірності | ||
7 NWBAD | =1, нова тривога недостовірності | ||
8 BADNACK | =1, є неквітовані тривоги недостовірності | ||
9 EMCYSTP | =1, аварійний зупин (грибок) | ||
10 STP2RUN | =1, момент переходу з аварійного зупину в роботу | ||
11 | |||
12 | |||
13 | |||
14 | =1 – є апаратна помилка (ПЛК) | ||
15 | |||
ALM2[0..7] | INT | ||
T_SCAN[0..7] | UDINT | час останньої обробки задачі | |
T_MIN[0..7] | UDINT | час останньої обробки задачі | |
T_MAX[0..7] | UDINT | час останньої обробки задачі | |
T_PREV[0..7] | UDINT??? | час попереднього виклику задачі ??? реалізація | |
REZ | INT | резерв |
На практиці, використання PLC_CFG в розподіленому керуванні (декілька ПЛК), давало можливість обмінюватися між ПЛК їх загальним статусом/командами, що значно спрощувало їх координацію. У такому випадку, наявність буферних змінних і унікального ID може бути використано для конфігурування/контролю декількох ПЛК з одного HMI, через ПЛК-проксі.
Так, наприклад, змінна TQ може бути використана для контролю за станом ПЛК або зв’язку з ним, адже якщо ця змінна не змінюється протягом тривалого часу, цей ПЛК знаходиться в стопі або недоступний (щось на кшталт heart_beat). Треба пам’ятати, що обробка функції PLCFN проводиться в основній задачі. Тому за необхідності використання структури в інших задачах, необхідно чітко зважити усі механізми. На практиці це інколи забувається, і приводить до небажаних наслідків. Як варіант можуть бути додаткові статусні біти, або механізми блокувань.
Деякі біти полів STA, та усі біти ALM1, ALM2 скидаються на початку задачі функцією PLCFN. Це зроблено для того, щоб будь який з CM/EM/Unit міг виставити біт в 1, тим самим сигналізуючи про твердження “хоча б один”.
Поле MSG – може бути використано для формування повідомлень оператору, на кшталт – не можу виконати команду. Таке поле може бути і в інших структурах CM/EM/UNIT, тоді воно повинно бути в структурі HMI. Як варіант економії ресурсів може бути одне поле MSG на всі повідомлення. Якщо це поле буде бітовим, то повідомлення не будуть перекриватися, однак їх кількість буде обмежено 32 на весь ПЛК. Тим не менше, кількість полів MSG можна збільшувати до необхідного. Враховуючи, що повідомлення формуються по тригеру, їх необхідно “очищувати”, що може бути зроблено за таймером або з самого HMI, як приймача повідомлення (наприклад за бітовою командою ACK – прийняв повідомлення, або обнулінням біту). Механізми очищення виробляються для конкретного випадку.
Датчики та сигнали керування ВМ подаються як змінні DIVAR та DOVAR; ті які не використовуються – подаються як пусті (з індексом 0); наявність/відсутність певних датчиків кінцевого положення та сигналів керування означується параметрами. Функція класів розрахована для:
У моностабільному режимі, вихідна змінна крану “відкрити” змінюється тільки при надходженні команд. На вихідну змінну “закрити” відправляється інверсна команда. Наприклад, команда “відкрити” переводить в “1” змінну на клапан “відкрити” тільки при надходженні команди. У бістабільному режимі вихідні змінні клапану можуть змінюватися при спрацюванні датчиків кінцевого положення: наприклад, кінцевик відкритості знімає “1” зі змінної відкриття. У автоматичному незаблокованому режимі, значення вихідних змінних на ВМ змінюється алгоритмом тільки при наявності відповідних команд з програм. Іншими словами вихідні змінні можуть керуватися як в командному режимі на клапан (імпульсні команди відкрити/закрити) з програм так і байпасуватися зовнішніми алгоритмами. У ручному або заблокованому режимі, виходи міняються тільки командами з HMI (може змінитися в залежності від вимог процесу). Передбачаються два режими конфігурування (MANCFG): ручне і автоматичне. У ручному режимі тип клапану та наявність кінцевих вимикачів задається бітовими параметрами PRM.BISTABLE, PRM.ZOPNENBL та PRM.ZCLSENBL. У автоматичному режимі ці параметри змінюються автоматично при прив’язці до змінних з ID=0 або їх підключеності. Таким чином, наприклад, при виходу з ладу датчика кінцевого положення, його можна тимчасово відключити в конфігурації (вивести з експлуатації для відключення генерування тривог), і клапан автоматично перейде в режим роботи без даного кінцевика. Ручне конфігурування типу клапану поки не знайшло свого використання.
| Атрибут | Тип | Біт | Опис |
| ——- | —- | ————- | ———————————————————— |
| STA | UINT | 0 ALMOPN | =1 Не відкрився (скидається при зміні команди або стану) датчика) |
| | | 1 ALMCLS | =1 Не закрився (скидається при зміні команди або стану) датчика) |
| | | 2 BLCK | =1 Заблокований |
| | | 3 ALMSHFT | =1 Порушення стану |
| | | 4 SLNDBRK | =1 Помилка датчику |
| | | 5 OPNING | =1 Відкривається |
| | | 6 CLSING | =1 Закривається |
| | | 7 OPNED | =1 Відкритий (16#0080) |
| | | 8 CLSED | =1 Закритий (16#0100) |
| | | 9 DISP | =1 дистанційний режим (з ПК/ОП) (16#0200) |
| | | 10 MANBX | =1 Ручний зі щита |
| | | 11 SLNDKZ/ALM | =1 КЗ соленоїду / загальна тривога |
| | | 12 INBUF | =1 клапан в буфері |
| | | 13 FRC | =1 хоча би одна зі змінних в об’єкті форсована (для зручності відображення при наладці) |
| | | 14 SML | |
| | | 15 CMDACK | |
| CMD | UINT | | Команди:
16#0001 – CMD_OPN
16#0002 – CMD_CLS
16#0003 – CMD_TOGGLE (перемикання, тільки для моностабільних клапанів)
16#0004 – CMD_ALMACK
16#0007 – CMD_BLCK (блокування)
16#0008 – CMD_DBLK (деблокування)
16#0010 – CMD_STOPTUN
16#0011 – CMD_TUNING (автопідстройка)
16#0100 – прочитати конфігурацію
16#0101 – записати конфігурацію
16#0102 – записати конфігурацію за замовченням
16#4102 – записати конфігурацію за замовченням для усіх клапанів
16#0200 – тимчасово вивести тривогу з експлуатації
16#0201 – ввести тривогу в експлуатацію
16#0202 – підтвердити тривогу
16#0300 – ручний/автомат
16#0301 – ручний
16#0302 – автомат
16#4301 – перевести в ручний усі об’єкти типу
16#4302 – перевести в автомат усі об’єкти типу |
| Атрибут | Тип | Біт | Опис | Зміщення |
| ——- | —- | ———- | ———————————————————— | ——– |
| ID | | | | 0 |
| CLSID | | | 16#2011 – оно стабільний режим
16#2012 – бістабільний режим | 1 |
| STA | | | | |
| CMD | | | | |
| PRM | UINT | b0 | | 3 |
| | | b1 | | |
| | | 2 ZOPNENBL | X2 - =1 є датчик відкритості | |
| | | 3 ZCLSENBL | X3 - =1 є датчик закритості | |
| | | 4 BISTABLE | X4 - =1 | |
| | | b5 | X5 – =1 клапан без нормального положення (додатково використовується змінна “закрити”) | |
| | | 6 MANCFG | X6 – =1 ручне конфігурування типу клапану та типу керування (при зміні клапану в режимі роботи) | |
| | | b7 | X7 – =1, використання клапану (0 – резерв) | |
| | | 8 AUTOACK | X8 - =1, автоматичне підтвердження тривог | |
| | | b9 | | |
| | | b10 | | |
| | | b11 | | |
| | | b12 | | |
| | | b13 | | |
| | | b14 | | |
| | | b15 | | |
| MSG | UINT | | Номер останнього діагностичного повідомлення | |
| TDEASP | UINT | | Час затримки тривоги в секундах | 6 |
| STEP1 | UINT | | крок: 0-невизначений, 2-відкривається, 3-закривається, 1-зупинений в невизначеності, 4 – зупинений у відкритому стані, 5 – зупинений в закритому стані, 6 –заблокований | 8 |
| TSTEP1 | UINT | | Час кроку в с | 10 |
| TOPNSP | UINT | | Максимальний час відкриття в секундах | |
| CNTPER | UINT | | Кількість змін положення | |
| CNTALM | UINT | | Кількість аварій | |
Якщо в проекті передбачається використання клапану з кінцевиками, можна задіяти алгоритм з VLVD. У зв’язці з алгоритмом що має ручний режим DISP та MANBX не треба використовувати.
Атрибут | Тип | Біт | Опис |
---|---|---|---|
STA | UINT | 0 | =1 |
1 | =1 | ||
2 BLCK | =1 Заблокований | ||
3 | =1 | ||
4 | =1 | ||
5 OPNING | =1 Відкривається | ||
6 CLSING | =1 Закривається | ||
7 OPNED | =1 Відкритий (>=95 %) | ||
8 CLSED | =1 Закритий (<5 %) | ||
9 DISP | =1 дистанційний режим (з ПК/ОП) | ||
10 MANBX | =1 Ручний зі щита | ||
11 | =1 | ||
12 INBUF | =1 | ||
13 FRC | =1 хоча би одна зі змінних в об’єкті форсована (для зручності відображення при наладці) | ||
14 SML | |||
15 CMDACK | |||
CMD | UINT | Команди: 16#0100 – прочитати конфігурація 16#0101 – записати конфігурація 16#0102 – записати конфігурація за замовченням 16#4102 – записати конфігурація за замовченням для усіх клапанів 16#0200 – тимчасово вивести тривогу з експлуатації 16#0201 – ввести тривогу в експлуатацію 16#0202 – підтвердити тривогу 16#0300 – ручний/автомат 16#4301 – перевести в ручний усі об’єкти типу 16#4302 – перевести в автомат усі об’єкти типу |
|
VAL | REAL | Значення |
| Атрибут | Тип | Біт | Опис | | ——- | —- | ———— | ——————————————————— | | ID | UINT | | | | CLSID | UINT | | 16#2020 | | STA | UINT | | | | CMD | UINT | | | | VAL | REAL | | значення | | PRM | UINT | b0 | | | | | b1 | | | | | 2 ZOPNENBL | | | | | 3 ZCLSENBL | | | | | b4 | | | | | b5 | X5 – використати обмеження по швидкості | | | | 6 MANCFG | | | | | b7 | X7 – =1, використання клапану (0 – резерв) | | | | 8 AUTOACK | X8 – =1, автоматичне підтвердження тривог | | | | b9 | | | | | b10 | | | | | 11 SPDLMENBL | X11 – =1, включити обмеження по швидкості | | | | b12 | | | | | b13 | | | | | b14 | | | | | b15 | | | MSG | UINT | | Номер останнього діагностичного повідомлення | | TDEASP | UINT | | Час затримки тривоги в секундах | | STEP1 | UINT | | Крок | | VALPREV | REAL | | Значення VAL на попередньому перерахунку (2 секунди) | | MVAL | REAL | | Значення VAL у ручному/форсованому режимі перезаписує VAL | | CNTPER | UINT | | Кількість змін положення | | CNTALM | UINT | | Кількість аварій | | T_STEP1 | UINT | | Час кроку в с | | T_OPN | UINT | | Час повного відкриття клапану при обмеженні на швидкість |
16#2110 (8464) – без частотника 16#2111 (8465) – з плавним пуском 16#2120 (8480) – з частотником 16#2121 (8481) – насос з аналоговим керуванням
| Атрибут | Тип | Біт | Опис |
| ——- | —- | ——— | ———————————————————— |
| STA | UINT | 0 ALMOPN | =1 Не відкрився (скидається при зміні команди або стану) датчика) |
| | | 1 ALMCLS | =1 Не закрився (скидається при зміні команди або стану) датчика) |
| | | 2 BLCK | =1 Заблокований |
| | | 3 ALMSHFT | =1 Порушення стану |
| | | 4 SLNDBRK | =1 Помилка датчику |
| | | 5 OPNING | =1 Відкривається |
| | | 6 CLSING | =1 Закривається |
| | | 7 OPNED | =1 Відкритий (16#0080) |
| | | 8 CLSED | =1 Закритий (16#0100) |
| | | 9 DISP | =1 дистанційний режим (з ПК/ОП) (16#0200) |
| | | 10 MANBX | =1 Ручний зі щита |
| | | 11 SLNDKZ | =1 КЗ соленоїду |
| | | 12 INBUF | =1 - |
| | | 13 FRC | =1 хоча би одна зі змінних в об’єкті форсована (для зручності відображення при наладці) |
| | | 14 SML | |
| | | 15 CMDACK | |
| CMD | UINT | | Команди:
16#0001 – CMD_OPN
16#0002 – CMD_CLS
16#0003 – CMD_TOGGLE (перемикання, тільки для моностабільних клапанів)
16#0004 – CMD_ALMACK
16#0007 – CMD_BLCK (блокування)
16#0008 – CMD_DBLK (деблокування)
16#0010 – CMD_STOPTUN
16#0011 – CMD_TUNING (автопідстройка)
16#0100 – прочитати конфігурацію
16#0101 – записати конфігурацію
16#0102 – записати конфігурацію за замовченням
16#4102 – записати конфігурацію за замовченням для усіх клапанів
16#0200 – тимчасово вивести тривогу з експлуатації
16#0201 – ввести тривогу в експлуатацію
16#0202 – підтвердити тривогу
16#0300 – ручний/автомат
16#0301 – ручний
16#0302 – автомат
16#4301 – перевести в ручний усі об’єкти типу
16#4302 – перевести в автомат усі об’єкти типу |
Атрибут | Тип | Біт | Опис |
---|---|---|---|
ID | UINT | 16#2011 – моностабільний режим 16#2012 – бістабільний режим |
|
CLSID | UINT | ||
STA | UINT | ||
CMD | UINT | ||
PRM | UINT | b0 | |
b1 | |||
2 ZOPNENBL | |||
3 ZCLSENBL | |||
4 BISTABLE | |||
b5 | |||
b6 | |||
7 MANCFG | |||
b8 | |||
b9 | |||
10 AUTOACK | |||
b11 | |||
b12 | |||
b13 | |||
b14 | |||
b15 | |||
MSG | UINT | Номер останнього діагностичного повідомлення | |
TDEASP | UINT | Час затримки тривоги в секундах | |
STEP1 | UINT | крок: 0-невизначений, 2-відкривається, 3-закривається, 1-зупинений в невизначеності, 4 – зупинений у відкритому стані, 5 – зупинений в закритому стані, 6 –заблокований | |
TSTEP1 | UINT | Час кроку в с | |
TOPNSP | UINT | Максимальний час відкриття в секундах | |
CNTPER | UINT | Кількість змін положення | |
CNTALM | UINT | Кількість аварій |