Модуль | Ім'я | Версія | Ліцензія | Джерело | Мови | Платформи | Тип | Автор |
---|---|---|---|---|---|---|---|---|
VCAEngine | Рушій Середовища Візуалізації та Управління | 7.13 | GPL2 | ui_VCAEngine.so | en,uk,ru,de | x86,x86_64,ARM | UI | Роман Савоченко |
Опис | ||||||||
Загальний рушій середовища візуалізації та керування.
|
Модуль надає до OpenSCADA рушій середовища візуалізації та управління (СВУ). Сам модуль не реалізує візуалізації СВУ, а містить дані відповідно до концепції "Модель/дані – Інтерфейс". Візуалізація даних цього модуля виконується модулями візуалізації СВУ, наприклад, модулем Vision та WebVision.
Середовище візуалізації та управління (СВУ) є невід'ємною складовою SCADA системи. Воно застосовується на клієнтських станціях з метою доступного представлення інформації про об'єкт управління та видачі керуючого впливу на об'єкт. У різних практичних ситуаціях та умовах можуть застосовуватися СВУ, побудовані на різних принципах візуалізації. Наприклад, це можуть бути бібліотеки віджетів Qt, GTK+, wxWidgets або гіпертекстові механізми на основі технологій HTML, XHTML, XML, CSS та JavaScript або сторонні додатки візуалізації, реалізовані на різних мовах програмування Java, Python та інше. Будь-який з цих принципів має свої переваги та недоліки, комбінація яких може стати непереборною перепоною у можливості використання СВУ у тому або іншому практичному випадку. Наприклад, технології на кшталт бібліотеки Qt дозволяють створювати високопродуктивні СВУ, що безсумнівно важливо для станцій оператору управління технологічним процесом (ТП). Однак необхідність інсталяції даного клієнтського ПЗ може унеможливити його використання у окремих випадках. З іншого боку, Web-технології не потребують інсталяції на клієнтські системи та є гранично багатоплатформними (достатньо вказати посилання на Web-сервер у будь-якому Web-браузері), що найбільш важливо для різних інженерних та адміністративних станцій. З іншого боку, продуктивність та надійність таких інтерфейсів нижче, що практично виключає їх використання на станціях оператору ТП.
OpenSCADA має гранично гнучку архітектуру, яка дозволяє створювати зовнішні інтерфейси, у тому числі й користувацькі, на будь-якій основі та смак. Наприклад, середовище конфігурації OpenSCADA доступне як на Qt-бібліотеці, так і на Web-основі.
У той-же час, незалежне створення реалізацій СВУ на різній основі може потягти за собою неможливість використання даних конфігурації однієї СВУ на іншій. Що незручно та обмежено з користувацького боку, а також витратно у плані реалізації та подальшої підтримки.
З метою запобігання цих проблем, а також створення у найкоротший термін повного спектру різних типів СВУ, засновано проєкт створення концепції СВУ. Результатом цього проєкту став даний модуль рушія(моделі даних) СВУ, а також модулі безпосередньої візуалізації Vision та WebVision.
Даний модуль рушія(моделі даних) СВУ призначено для формування логічної структури СВУ та виконання сеансів окремих екземплярів проєктів СВУ. Також, модуль надає кінцевим візуалізаторам СВУ всі необхідні дані, як за посередництвом локальних механізмів взаємодії OpenSCADA, так і інтерфейсу управління OpenSCADA, для віддаленого доступу.
Фінальна версія цього модуля СВУ забезпечить:
Перелічимо можливості, які зможе та забезпечує СВУ, побудована на основі даного проєкту:
Сам модуль не містить механізмів візуального формування інтерфейсів СВУ, такі інструменти можуть надаватися модулями кінцевої візуалізації СВУ, наприклад, він надається модулем Vision.
Хоча візуальних механізмів формування СВУ модулем не надається, для управління логічної структури надається механізм, реалізований на основі інтерфейсу управління OpenSCADA, а значить, доступний для використання у будь-якому конфігураторі OpenSCADA. Діалоги цього інтерфейсу розглянуто далі, у контексті розгляду архітектури модуля та його даних.
СВУ, загалом, може працювати у двох режимах — розробки та виконання. У режимі розробки формується інтерфейс СВУ та його компоненти, визначаються механізми взаємодії. У режимі виконання здійснюється формування інтерфейсу СВУ та відбувається взаємодія з кінцевим користувачем, на основі розроблених СВУ.
Інтерфейс СВУ формується з кадрів, кожний з яких, своєю чергою, формується з елементів примітивів або користувацьких елементів інтерфейсу. При цьому, користувацькі елементи інтерфейсу також формуються з примітивів або інших користувацьких елементів. Таким чином забезпечується ієрархічність та повторне використання вже розроблених компонентів.
Кадри та користувацькі елементи розташовуються у бібліотеках віджетів. З елементів цих бібліотек формуються проєкти інтерфейсів кінцевої візуалізації СВУ. На основі-ж цих проєктів формуються сеанси візуалізації.
Описану структуру СВУ приведено на рисунку.
Дана архітектура СВУ дозволяє реалізовувати підтримку трьох рівнів складності у процесі розробки інтерфейсів управління:
Кадр це вікно, яке безпосередньо надає інформацію користувачу у графічній та/або текстовій формі. Група взаємопов'язаних кадрів формує цілісний користувацький інтерфейс ВУ.
Вміст кадру формується з елементів відображення (віджетів). Віджети можуть бути базовими примітивами (різні елементарні фігури, текст, тренд та інше) та похідні, сформовані з базових або інших похідних віджетів. Всі віджети групуються за бібліотеками. У процесі роботи, користувач може формувати власні бібліотеки похідних віджетів.
Власне сам кадр також є віджетом, який використовується у ролі кінцевого елементу візуалізації. А це означає, що бібліотеки віджетів можуть зберігати і заготовки кадрів, та шаблони результуючих сторінок користувацького інтерфейсу.
Кадри та віджети є пасивними елементами, які зазвичай не містять зв'язків з динамікою та іншими кадрами, а тільки надають інформацію про властивості та характер динаміки(конфігурації), що підключається до властивостей. Активовані кадри, ті що містять посилання на динаміку та активні зв'язки, формують користувацький інтерфейс та зберігаються у проєктах. У деяких випадках можливе пряме призначення динаміки у заготовках кадрів.
Похідні кадри/віджети можуть містити вкладені віджети, які можуть бути склеєні-зв'язані один з одним логікою, за допомогою мови користувацького програмування OpenSCADA.
Віджет є елементом, за посередництвом якого забезпечується:
Налаштування та зв'язування віджетів здійснюється за посередництвом їх властивостей. Батьківський віджет, та віджети що містяться у ньому, можуть доповнюватися користувацькими властивостями. Надалі, користувацькі та статичні атрибути пов'язуються з властивостями вкладених віджетів, за посередництвом внутрішньої логіки. Для відображення динаміки (поточних та архівних даних) властивості віджетів динамізуються, тобто пов'язуються з атрибутами параметрів OpenSCADA або властивостями інших віджетів. Використання, для зв'язування вкладених віджетів внутрішньою логікою, мови користувацького програмування OpenSCADA знімає питання реалізації складної логіки візуалізації, забезпечуючи тим самим високу гнучкість. Практично, можна створювати повністю динамізовані кадри зі складними взаємозв'язками на рівні користувача.
Безпосередня конфігурація, та властивості кінцевого інтерфейсу візуалізації, містяться у проєкті інтерфейсу візуалізації СВУ, яких може бути створено багато.
Кожний проєкт включає сторінки з бібліотек кадрів-віджетів. Для низки режимів, сама сторінка може включати у себе вкладені сторінки як незалежні від батьківської, так і з використанням батьківського у ролі шаблону. Шаблонні сторінки-віджети дозволяють гранично спростити процес створення однотипних кадрів простого моніторингу, інженером АСУ ТП або користувачем OpenSCADA. Прикладом таких однотипних кадрів можуть бути: групи контурів, групи графіків, протоколи та різні зведені таблиці. Мнемосхеми технологічних процесів рідко підпадають під таку схему та формуються у окремій сторінці-віджеті.
Сторінка, як і віджет на якому вона заснована, надає можливість прив'язки динаміки до описаних у ній властивостей — зв'язки, які можуть бути встановлені динамікою або константами. Крім того, зв'язування безпосередньо на рівні сторінки проєкту є переважним, ніж здійснення цього на рівні віджетів бібліотек.
Приклад ієрархічного представлення компонентів проєкту класичного інтерфейсу ВУ технологічного процесу, з описом виразів стандартних викликів, приведено на рисунку.
Передбачено наступні спеціальні властивості сторінок:
На комбінаціях вищевказаних спеціальних властивостей сторінок реалізовано наступні їх типи:
На боці візуалізації (RunTime) побудовано логіку, що регулює яким чином відкривати сторінки, на основі наступних атрибутів базового елементу "Box":
Логіка визначення способу відкриття сторінок працює наступним чином:
Сеанс проєкту це розгорнуте дерево проєкту безпосереднього його виконання, що включає окреме завдання ієрархічного виконання процедур віджетів. Для кожного проєкту може бути відкрито багато сеансів. Формування кінцевого інтерфейсу візуалізації здійснюється візуалізаторами, виходячи з даних сеансу проєкту, після створення сеансу за запитом.
Між віджетами, на різних рівнях ієрархії, у кінцевому рахунку вибудовуються достатньо складні спадкові зв'язки, які визначаються можливістю використання одних віджетів іншими, починаючи з бібліотечного віджета та закінчуючи віджетом сеансу. Для роз'яснення цих особливостей взаємодії, на рисунку зображено вичерпну карту "використального" наслідування.
На рівні сеансів, віджет містить об'єкт значень процедури обрахунку. Цей об'єкт ініціюється та використовується у випадку наявності самої процедури обчислення. У момент ініціалізації створюється перелік параметрів процедури та виконується її компіляція з цими параметрами, у модулі, що реалізує обрану мову програмування та з назвою результуючої процедури у вигляді закодованого повного ім'я виджета. Скомпільована функція підключається до об'єкту значень процедури обрахунку, а далі виконується її обчислення з періодом сеансу.
Обчислення та обробка віджету виконується у наступній послідовності:
Об'єкти сеансу успадковуються від абстрактного об'єкту "Widget" та використовують відповідні об'єкти проєкту. Так, сеанс "Session" використовує проєкт "Project" та формує на його основі розгорнуте дерево. Сторінка проєкту "Page" прямо використовується сторінкою сеансу "SessPage". Решта об'єктів "SessWdg" розгортаються відповідно до ієрархії елементів сторінки.
Додатково до стандартних властивостей абстрактного віджета "Widget", елементи сторінки та самі сторінки сеансу отримують властивості: зберігання об'єкту значень обчислювальної процедури, обрахунку процедур та механізм обробки подій. Сторінки сеансу, додатково до всього, містять контейнер наступних за ієрархією сторінок. Сеанс, загалом, обчислюється з вказаною періодичністю та у послідовності:
Така політика дозволяє обходити сторінки відповідно до їх ієрархії, а повідомленням у віджетах "спливати" нагору за одну ітерацію.
Сеанси підтримують багатомовність на рівні інтерфейсу управління OpenSCADA, яка залежить від значень загальних атрибутів "lang" та "user", та які візуалізатор може встановлювати згідно до своєї мови. Ця функція вмикається динамічним перекладом повідомлень OpenSCADA.
Відомо, що людина може мати індивідуальні особливості сприйняття графічної інформації. Якщо ці особливості не враховувати то можна отримати несприйняття та відторгнення користувача до інтерфейсу ВУ. Таке несприйняття та відторгнення може призвести до фатальних помилок при управлінні ТП, а також травмувати людину постійною роботою з інтерфейсом. У SCADA системах прийнято домовленості, які регламентують вимоги по створенню уніфікованого інтерфейсу ВУ, що нормально сприймається більшістю людей. При цьому, практично відсутнє врахування особливостей людей з деякими відхиленнями.
З метою врахувати цю обставину, та надати можливість централізовано та просто змінювати візуальні властивості інтерфейсу, проєктом реалізується менеджер стилів інтерфейсу візуалізації.
Користувачем може бути створено багато стилів, кожний з яких буде зберігати кольорові, шрифтові та інші властивості елементів кадру. Проста зміна стилю дозволить швидко видозмінити інтерфейс ВУ, та можливість призначення індивідуального стилю до користувача дозволить врахувати його особливості.
Для реалізації цієї можливості, при створені кадрів, необхідно для властивостей кольору, шрифту та інших встановити параметр "Конфігурація" (таблиці у вкладці "Обробка") у значення "З стилю". А у параметрі "Конфігураційний шаблон" вказати ідентифікатор поля стиля. Далі, це поле автоматично з'явиться у менеджері стилів та його можна буде там змінювати. Менеджер стилів доступний на сторінці конфігурації проєкту у вкладці "Стилі". На цій вкладці можна стилі створювати, видаляти та змінювати, видаляти їх поля.
Загалом, стилі доступні починаючи з рівня проєктів. На рівні бібліотек віджетів можна тільки визначати поля стилів у віджетів. На рівні проєкту, при виборі стиля, включається робота зі стилями, що передбачає доступ до полів стилів замість безпосередніх значень атрибутів. Фактично, це означає, що при читанні або записі атрибуту віджету, вказані операції будуть здійснюватися над відповідним полем обраного стилю.
При запуску проєкту на виконання буде використано встановлений у проєкті стиль. Надалі, користувач може обрати стиль з переліку доступних. Обраний користувачем стиль буде збережено та використано при наступному запуску проєкту.
Враховуючи спектр задач, для яких може використовуватися OpenSCADA, треба передбачити механізм управління інтерактивними користувацькими подіями. Це пов'язано з тим, що при вирішені окремих задач вбудованих систем, пристрої вводу та управління можуть значно відрізнятися. Власне, достатньо поглянути на звичайну офісну клавіатуру та клавіатуру ноутбука, щоб зняти будь-які сумніви у необхідності менеджеру подій.
Менеджер подій має працювати використовуючи карти подій. Карта подій — це перелік іменованих подій з указанням його походження. Походженням події може бути клавіатура, маніпулятор миші, джойстик та інше. При виникненні події, менеджер подій шукає його у активній карті та співставляє з ім'ям події. Співставлене ім'я події поміщається у чергу на обробку. Віджети, у цьому випадку, повинні обробляти отриману чергу подій.
Активна карта повідомлень вказується у профілі кожного користувача або встановлюється по замовченню, у планах.
Загалом, передбачено чотири типи подій:
Сама подія надає недостатньо інформації, особливо якщо її обробка відбувається на рівнях вище. Для однозначної ідентифікації події та її джерела, події, загалом, записуються наступним чином: "ws_BtPress:/curtime". Де:
У таблиці 3.5 наведено перелік стандартних подій, підтримку яких має бути забезпечено у візуалізаторах СВУ.
Таблиця 3.5. Стандартні події
Ідентифікатор | Опис |
---|---|
Клавіатурні події: key_[pres|rels][Ctrl|Alt|Shift]{Key} | |
*SC#3b | Скан-код клавіші. |
*#2cd5 | Код неіменованої клавіші. |
*Esc | "Esc". |
*BackSpace | Видалення попереднього символу — "<-". |
*Return, *Enter | Ввід — "Enter". |
*Insert | Вставка — "Insert". |
*Delete | Видалення — "Delete". |
*Pause | Пауза — "Pause". |
Друк екрану — "Print Screen". | |
*Home | Дім — "Home". |
*End | Кінець — "End". |
*Left | Ліворуч — "<-". |
*Up | Вверх — '^'. |
*Right | Праворуч — "->". |
*Down | Додолу — '\/'. |
*PageUp | Сторінки нагору — "PageUp". |
*PageDown | Сторінки додолу — "PageDown". |
*F1 ... *F35 | Функціональна клавіша від "F1" до "F35". |
*Space | Пробіл — ' '. |
*Apostrophe | Апостроф — '`'. |
*Asterisk | Зірочка на додатковому полі клавіатури — '*'. |
*Plus | Плюс на додатковому полі клавіатури — '+'. |
*Comma | Кома — ','. |
*Minus | Мінус — '-'. |
*Period | Крапка — '.'. |
*Slash | Похила риска — '\'. |
*0 ... *9 | Цифра від '0' до '9'. |
*Semicolon | Крапка з комою — ';'. |
*Equal | Дорівнює — '='. |
*A ... *Z | Клавіші літер латинського алфавіту від 'A' до 'Z'. |
*BracketLeft | Ліва квадратна дужка — '['. |
*BackSlash | Зворотня похила риска — '/'. |
*BracketRight | Права квадратна дужка — ']'. |
*QuoteLeft | Ліва лапка — . |
Події клавіатурного фокусу. | |
ws_FocusIn | Фокус отримано віджетом. |
ws_FocusOut | Фокус втрачено віджетом. |
Події маніпулятору миші: | |
key_mouse[Pres|Rels][Left|Right|Midle] | Натиснута/відпущена кнопка миші. |
key_mouseDblClick | Подвійний натиск лівої кнопки миші. |
Події квітація на боці візуалізатору. | |
ws_alarmChange | Сповіщає щодо зміни статусу порушення, атрибут "alarmSt". |
ws_alarmLev | Квітація всіх порушень всіма способами та типами сповіщення. |
ws_alarmNtf{N} | Квітація всіх порушень сповіщення типу {N} (0...7). |
Події примітиву елементарної фігури ElFigure: | |
ws_Fig[Left|Right|Midle|DblClick] | Активація фігур (заливок) клавішею миші. |
ws_Fig{N}[Left|Right|Midle|DblClick] | Активація фігури (заливки) N клавішею миші. |
Події примітиву елементу форми FormEl: | |
ws_LnAccept | Встановлено нове значення у рядку вводу. |
ws_TxtAccept | Змінено значення редактору тексту. |
ws_ChkChange | Стан ознаки змінено. |
ws_BtPress | Кнопку натиснуто. |
ws_BtRelease | Кнопку відпущено. |
ws_BtToggleChange | Змінено втисненість кнопки. |
ws_BtMenu={Item} | Вибір елементу меню Item за кнопкою. |
ws_BtLoad | Обраний файл завантажено. |
ws_CombChange | Змінено значення поля обрання. |
ws_ListChange | Змінено поточний елемент переліку. |
ws_TreeChange | Змінено поточний елемент дерева. |
ws_TableChangeSel | Змінено вибір елементу таблиці. |
ws_TableEdit_{colN}_{rowN} | Відредаговано клітинку таблиці ({colN}:{rowN}). |
ws_SliderChange | Зміна положення слайдеру. |
Події примітиву медіа-контенту Media: | |
ws_MapAct{N}[Left|Right|Midle] | Активовано медіа-область з номером N, клавішею миші. |
ws_MediaFinished | Закінчено програвання Медіа-потоку. |
Події є основним механізмом сповіщення та активно використовуються для здійснення взаємодії з користувачем. Для обробки події передбачено два механізми:
Механізм "Сценарій управління відкриттям сторінок" засновано на базовому атрибуті віджету "evProc", у якому може описуватися відкриття сторінок. Сценарій цього атрибуту записується у вигляді переліку команд з синтаксисом: "{event}:{evSrc}:{com}:{prm}". Де:
Реалізовано наступні команди:
Спеціальні символи шаблону розшифровуються наступним чином:
Для правильного розуміння роботи механізму шаблонів, при виборі сторінки, приведемо декілька реальних прикладів:
У якості прикладу, наведемо сценарій забезпечення роботи головної сторінки інтерфейсу користувача:
ws_BtPress:/prev:prev:/pg_so/*/*/$ ws_BtPress:/next:next:/pg_so/*/*/$ ws_BtPress:/go_mn:open:/pg_so/*/mn/* ws_BtPress:/go_graph:open:/pg_so/*/ggraph/* ws_BtPress:/go_cadr:open:/pg_so/*/gcadr/* ws_BtPress:/go_view:open:/pg_so/*/gview/* ws_BtPress:/go_doc:open:/pg_so/*/doc/* ws_BtPress:/go_resg:open:/pg_so/rg/rg/* ws_BtPress:/so1:open:/pg_so/1/*/* ws_BtPress:/so2:open:/pg_so/2/*/* ws_BtPress:/so3:open:/pg_so/3/*/* ws_BtPress:/so4:open:/pg_so/4/*/* ws_BtPress:/so5:open:/pg_so/5/*/* ws_BtPress:/so6:open:/pg_so/6/*/* ws_BtPress:/so7:open:/pg_so/7/*/* ws_BtPress:/so8:open:/pg_so/8/*/* ws_BtPress:/so9:open:/pg_so/9/*/* ws_BtPress:*:open:/pg_control/pg_terminator
Механізм "Обробка подій за допомогою обчислювальної процедури віджета" заснований на атрибуті "event" та користувацькій процедурі обчислення, на мові програмування OpenSCADA. Події, по мірі надходження, акумулюються у атрибуті "event" до моменту виклику обчислювальної процедури. Обчислювальна процедура викликається з вказаним періодом обчислення віджета та отримує значення атрибуту "event" у вигляді переліку подій. У процедурі обчислення, користувач може: проаналізувати, обробити та виключити оброблені події з переліку, а також додати до переліку нові події. Решта подій, після виконання процедури, та нові аналізуються на предмет відповідності умовам виклику сценарієм первинного механізму, після чого, події, що залишилися, передаються на верхній за ієрархією віджет, для обробки ним, при цьому здійснюється доповнення шляху події згідно до ієрархії проникнення.
Вмістом атрибуту "event" є перелік подій формату "{event}:{evSrc}", з подією у окремому рядку. Наведемо приклад процедури обробки події на Java-подібній мові користувацького програмування OpenSCADA:
for(ev_rez = "", off = 0; (sval=event.parse(0,"\n",off)).length; ) {
if(sval == "ws_BtPress:/cvt_light") alarmSt = 0x1000001;
else if(sval == "ws_BtPress:/cvt_alarm") alarmSt = 0x1000002;
else if(sval == "ws_BtPress:/cvt_sound") alarmSt = 0x1000004;
else ev_rez += sval+"\n";
}
event = ev_rez;
Важливим елементом будь-якого інтерфейсу візуалізації є сповіщення користувача про порушення — сигналізація. Для спрощення сприйняття, а також через тісний зв'язок візуалізації та сповіщення (як правило, сповіщення доповнюють візуалізацію) вирішено інтегрувати інтерфейс сповіщень у інтерфейс візуалізації. Для цього, у всіх віджетах, передбачається два додаткових атрибути рівня сеансу: "alarm" та "alarmSt". Атрибут "alarm" використовується для формування сигналу віджетом згідно до його логіки, а атрибут "alarmSt" використовується для контролю за фактом сигналізації гілки дерева сеансу.
Атрибут "alarm" є рядком, який має наступний формат: "{lev}|{categ}|{message}|{type}|{tp_arg}"
Де:
Атрибут "alarmSt" є цілим числом, яке відображає максимальний рівень сигналу та факт квітування гілки дерева сеансу. Формат числа має наступний вигляд:
Формування сигналу та отримання його візуалізатором.
Формування сигналу здійснюється самим віджетом, шляхом встановлення власного атрибуту "alarm" потрібним чином та, згідно до нього, автоматично встановлюється атрибут "alarmSt" поточного та вищестоящих віджетів. Візуалізатори отримують сповіщення про сигнал за допомогою стандартного механізму сповіщення про зміну атрибутів віджетів.
Враховуючи те, що обробка умов сигналізації здійснюється у віджетах, сторінки, що містять об'єкти сигналізації, повинні виконуватися у фоні, незалежно від відкритості їх на цей момент. Це здійснюється шляхом встановлення ознаки виконання сторінки у фоні.
Хоча механізм сигналізації й побудовано у середовищі візуалізації, можливість формування невізуальних елементів сигналізації залишається, наприклад, шляхом створення сторінки, яка ніколи не буде відкриватися.
Квітація
Квітація (від quietance) — процес підтвердження факту того, що оперативний персонал звернув увагу на порушення у роботі ТП. Зазвичай цей процес передбачає вживання заходів оператором для усунення порушення та натискання відповідної кнопки припинення сигналізації.
Квітація здійснюється шляхом вказання кореня гілки віджетів та типів сповіщення, що дозволяє реалізувати квітацію на боці візуалізатору як за групами, наприклад, за об'єктом сигналізації, так і індивідуально за об'єктом джерела. При цьому можна незалежно квитувати різні типи сигналізацій. Встановлення квітації здійснюється простою модифікацією атрибуту "alarmSt".
Приклад скрипту, для роботи з сигналами, приведено нижче:
//Виокремлення факту наявності сигналізацій різних способів-типів сповіщення
cvt_light_en = alarmSt&0x100; cvt_alarm_en = alarmSt&0x200; cvt_sound_en = alarmSt&0x400;
//Виокремлення факту наявності несквітованих сигналізацій різних способів сповіщення
cvt_light_active = alarmSt&0x10000; cvt_alarm_active = alarmSt&0x20000; cvt_sound_active = alarmSt&0x40000;
//Обробка подій кнопок квітації та квітація різних способів сповіщення
for(ev_rez = "", off = 0; (sval=event.parse(0,"\n",off)).length; ) {
if(sval == "ws_BtPress:/cvt_light") alarmSt = 0x1000001;
else if(sval == "ws_BtPress:/cvt_alarm") alarmSt = 0x1000002;
else if(sval == "ws_BtPress:/cvt_sound") alarmSt = 0x1000004;
else ev_rez += sval + "\n";
}
event = ev_rez;
Зовнішні методи сповіщення
Основним та типовим способом сповіщення є дисплейна світлова сигналізація аварійними кольорами та їх динамікою у елементів візуалізації, яка присутня завжди та не потребує специфічної конфігурації. Однак, часто потрібні сповіщення зовнішнього типу, наприклад: зовнішньою лампою, бузером PC або "ревуном", довільним звуком, синтезованою мовою та інше.
Для здійснення такої можливості, зовнішні способи сповіщення, та відповідні до них типи сповіщення, вільно описуються для серверу візуалізації та самого візуалізатору. На боці серверу візуалізації описується формування/отримання ресурсу сповіщення та саме сповіщення. На боці візуалізатору описується сповіщення згідно ресурсам серверу візуалізації.
Опис правил та сценаріїв зовнішнього сповіщення здійснюється за допомогою користувацьких атрибутів текстового типу для сторінок проєкту візуалізації, які застосовуються при відкритті цих сторінок. Тобто, потенційно, для кожної відкриваної сторінки можна описати власні правила сповіщення, хоча, зазвичай достатньо та описуються загальні правила сповіщення на головній сторінці проєкту — сторінці, яка відкривається одноразово та не закривається при роботі:
//flags=notifyServ[{DL}][|resource[|queue[|qMergeMess]]];
//resStatic={ResourceFile}
if(doRes) { Текст команди формування ресурсу. }
if(doNtf) { Текст команди сповіщення. }
//flags=notify[{DL}][|resource[|queue[|quietanceRet]]];
//name={Ім'я сповіщувача}
//ico={Ім'я іконки}
{ Текст команди сповіщення для будь-якого або конкретного візуалізатору. }
Прапорці:
Наявність поля "resStatic" вмикає отримання ресурсу безпосередньо із таблиці ресурсів або файлу, вказується у спосіб подібний до примітиву "Медіа".
Змінні обміну:
Приклади та коментарі до функціювання типових способів сповіщення:
//flags=notify0|notifyServ0
if(en && (ntfPrg=SYS.system("which beep")).length &&
(SYS.system("test -s "+prcID+".pid",true) || //No PID file
SYS.system("ps -A -o \"pid cmd\" | grep \"^ *$(cat "+prcID+".pid).*"+ntfPrg.parseLine(0)+"\" > /dev/null",true)) ) //No notify already
{
ntfPrg = ntfPrg.parseLine(0);
SYS.system(ntfPrg+" -f 1000 -l 100000 &\necho $! > "+prcID+".pid", true);
}
else if(!en && !SYS.system("test -s "+prcID+".pid",true))
SYS.system("kill $(cat "+prcID+".pid); rm "+prcID+".pid "+prcID+".res;", true);
#!/bin/sh
#flags=notify0|notifyServ0
if test $en = 1; then
ntfPrg=$(which beep)
#No PID file || No notify already
if test ! -s $prcID.pid || ! ps -A -o "pid cmd" | grep "^ *$(cat $prcID.pid).*$ntfPrg" > /dev/null; then
$ntfPrg -f 1000 -l 100000 &
echo $! > $prcID.pid
fi
elif test -s $prcID.pid; then
kill $(cat $prcID.pid)
rm $prcID.pid $prcID.res
fi
//flags=notify2|notifyServ2
if(en) SYS.system("play -q alarm.ogg");
#!/bin/sh
#flags=notify2|notifyServ2
if test $en = 1; then play -q alarm.ogg; fi
//flags=queue
//flags=notify2|queue
if(doNtf && en && res.length) {
SYS.fileWrite("tmpPlay", res);
SYS.system("play -q tmpPlay");
SYS.fileRemove("tmpPlay");
}
#!/bin/sh
#flags=notify2|queue
if test $doNtf = 1 -a $en = 1 -a -s $res; then play -q $res; fi
//flags=queue
//flags=notify2|queue
if(doNtf && en && mess.length) {
SYS.fileWrite("tmpForSpeech", mess);
SYS.system("festival --tts tmpForSpeech");
SYS.fileRemove("tmpForSpeech");
}
#!/bin/sh
#flags=notify2|queue
if test $doNtf = 1 -a $en = 1 -a "x" != "x$mess"; then
echo $mess > tmpForSpeech
festival --tts tmpForSpeech
rm tmpForSpeech
fi
//flags=notify2|notifyServ2|resource
if(doRes) res = SYS.fileRead("alarm.ogg"); //Insert here a different method of the generation
if(doNtf && en && res.length) {
SYS.fileWrite("tmpPlay", res);
SYS.system("play -q tmpPlay");
SYS.fileRemove("tmpPlay");
}
#!/bin/sh
#flags=notify2|notifyServ2|resource
if test $doRes = 1; then cp -f alarm.ogg $res; fi #Insert here a different method of the generation
if test $doNtf = 1 -a $en = 1 -a -s $res; then play -q $res; fi
//flags=notify2|resource
if(en && res.length) {
SYS.fileWrite("tmpPlay", res);
SYS.system("play -q tmpPlay");
SYS.fileRemove("tmpPlay");
}
#!/bin/sh
#flags=notify2|resource
if test $en = 1 -a -s $res; then play -q $res; fi
//flags=notify2|notifyServ2|queue
if(doRes && mess.length) {
SYS.fileWrite("tmpText", mess);
SYS.system("text2wave tmpText -o tmpWAV");
res = SYS.fileRead("tmpWAV");
SYS.fileRemove("tmpText"); SYS.fileRemove("tmpWAV");
}
if(doNtf && en && res.length) {
SYS.fileWrite("tmpPlay", res);
SYS.system("play -q tmpPlay");
SYS.fileRemove("tmpPlay");
}
#!/bin/sh
#flags=notify2|notifyServ2|queue
if test $doRes = 1 -a "x" != "x$mess"; then
echo $mess > tmpText
text2wave tmpText -o $res
rm tmpText
fi
if test $doNtf = 1 -a $en = 1 -a -s $res; then play -q $res; fi
//flags=notify2|queue
if(en && res.length) {
SYS.fileWrite("tmpPlay", res);
SYS.system("play -q tmpPlay");
SYS.fileRemove("tmpPlay");
}
#!/bin/sh
#flags=notify2|queue
if test $en = 1 -a -s $res; then play -q $res; fi
Для поділу доступу до інтерфейсу ВУ та його складовим, кожний віджет містить інформацію про власника, його групи та права доступу. Права доступу записуються у вигляді тріади: "{користувач}{група[,група1,групаN]}{інші}", де кожний елемент складається з двох ознак доступу, для який прийнята наступна інтерпретація:
У режимі розробки використовується проста схема доступу "root:UI|RWRWR_", що означає — всі користувачі можуть відкривати та переглядати бібліотеки, їх компоненти та проєкти; а редагувати можуть всі користувачі групи "UI" (користувацькі інтерфейси).
У режимі виконання працюють права, описані у компонентах інтерфейсу, які передбачають можливість наслідування власника та прав, зверху додолу. Причому, по замовченню, наслідування включено у кожному віджеті, що означає — вони отримають власника та права проєкту. У той-же час, пряме встановлення прав складеного віджету розповсюдить їх на всі компоненти цього віджета.
Для надання до інтерфейсу візуалізації актуальних даних, повинні використовуватися дані підсистеми "Збір даних (DAQ)". Природа цих даних наступна:
Враховуючи перший пункт, треба забезпечити можливість групового призначення посилання. Для цього використовуємо концепцію логічного рівня.
Згідно до пункту 2, зв'язки забезпечують прозоре перетворення типів та не потребують спеціальної конфігурації.
Для задоволення можливості доступу до архівам, згідно до пункту 3, зв'язки виконують перевірку типу атрибуту та, у випадку підключення до "Адреси", до значення поміщається адреса зв'язку.
У термінах СВУ, динамічні зв'язки та конфігурація динаміки є одним процесом, для опису конфігурації якого передбачено вкладку "Обробка" віджетів. Вкладка містить таблицю конфігурації властивостей атрибутів та текст процедури обчислення віджету.
Крім полів конфігурації атрибутів, у таблиці передбачається стовпчик "Обробка", для вибіркового використання атрибутів у обчислювальній процедурі віджета, та стовпчика "Конфігурація", "Конфігураційний шаблон" для опису конфігурації зв'язків.
Якщо у стовпчику "Обробка" стоїть true, то у обчислювальній процедурі стає доступною змінна {ідентифікатор віджета}_{ідентифікатор атрибуту}, наприклад cw_value.
Стовпчик "Конфігурація" дозволяє вказати тип зв'язку атрибуту віджета:
Стовпчик "Конфігураційний шаблон" дозволяє зв'язати групи динамічних атрибутів. Наприклад, це можуть бути різні типи параметрів підсистеми "DAQ" та інші віджети інтерфейсу. При коректному формуванні цього поля працює механізм автоматичного призначення атрибутів, при визначені тільки параметру підсистеми "DAQ" або віджету інтерфейсу, що спрощує та прискорює процес конфігурації. Значення цього стовпчика має наступний формат:
Встановлення зв'язків може бути декількох типів, який визначається префіксом:
Обробка зв'язків відбувається з періодичністю обчислення віджету, у порядку:
На рисунку представлено вкладку зв'язків з груповим призначенням атрибутів, шляхом указання тільки параметру. На наступному рисунку представлено індивідуальне призначення атрибутів.
При розташуванні віджета до контейнеру віджетів всі зв'язки початкового віджета додаються до переліку результуючих зв'язків контейнеру віджетів, однак, тільки на глибину у один рівень вкладення.
З вищесказаного видно, що зв'язки встановлюються користувачем у процесі конфігурації інтерфейсу. Однак, для надання можливості створення кадрів загального призначення з функцією надання деталізованих даних різних джерел одного типу, потрібен механізм динамічного встановлення зв'язків. Такий механізм передбачається:
Розглянемо приклад, коли є кадр загального призначення "Панель контролю графіком" та багато "Графіків" на різних кадрах. "Панель контролю графіком" має зв'язки з шаблонами:
При цьому, кожний віджет "Графік" має атрибути "tSek", "tSize", "trcPer" та "valArch". За викликом сигналу відкриття "Панелі контролю графіком" з будь-якого віджету "Графік", відбувається зв'язування атрибутів "Панелі контролю графіком" з атрибутами віджету "Графік", згідно шаблону. як результат, всі зміни на "Панелі контролю графіком" будуть відображатися на графіку, за посередництвом цих зв'язків.
Якщо у віджета "Графік" наявні зовнішні зв'язки на параметри підсистеми "Збір даних", зв'язки "Панелі контролю графіком" будуть встановлюватися на зовнішнє джерело. Крім того, якщо у "Панелі контролю графіком" будуть заявлені зв'язки на атрибути, відсутні безпосередньо у віджета "Графік", то буде здійснюватися пошук наявності таких атрибутів у зовнішнього джерела — першого на який встановлено прямий зв'язок, виконуючи, тим самим, доповнення відсутніх зв'язків.
Для наочного зображення цього механізмі наведено таблицю.
Таблиця. Механізм динамічної лінковки.
Атрибути "Панелі контролю графіком" (шаблон динамичного зв'язку) | Атрибути "Графіка" | Атрибути зовнішнього "Параметру" | Результуючий зв'язок або значення атрибута, що зв'язується |
---|---|---|---|
tSek (<page>|tSek) | tSek | - | "Графік".tSek |
tSize (<page>|tSize) | tSize | - | "Графік".tSize |
trcPer (<page>|trcPer) | trcPer | - | "Графік".trcPer |
valArch (<page>|valArch) | valArch | - | "Графік".valArch |
var (<page>|var) | var | var | "Параметр".var |
ed (<page>|ed) | - | ed | "Параметр".ed |
max (<page>|max) | - | - | EVAL |
min (<page>|min) | - | - | EVAL |
Будь-який наново створюваний віджет засновується на одному з декількох примітивів — кінцевому елементі візуалізації, шляхом встановлення родинних зв'язків як прямо на примітив, так і посередництвом декільком проміжних користувацьких віджетів. Кожний з примітивів містить механізм моделі даних. Екземпляр віджету зберігає значення властивостей власної конфігурації примітиву.
До завдань інтерфейсу візуалізації входить підтримка та робота з моделлю даних примітивів віджетів. Примітиви віджетів повинні бути ретельно опрацьовані та уніфіковані, з метою охопити як можна більше можливостей у як можна меншій кількості слабко пов'язаних один з одним, по призначенню, примітивів.
Таблиця. Бібліотека примітивів віджетів — базові елементи відображення
Ідентифікатор | Найменування | Функція |
---|---|---|
ElFigure | Елементарна графічна фігура |
Примітив є основою відмальовки елементарних графічних фігур зі всілякими комбінаціями їх у одному об'єкті. Передбачається підтримка наступних елементарних фігур:
Для всіх фігур, що містяться у віджеті, встановлюються єдині властивості товщини, кольору та інше, також, передбачається можливість указання вищеперелічених атрибутів для кожної фігури окремо та їх динамізація. |
FormEl | Елемент форми |
Включає підтримку стандартних компонентів форми:
|
Text | Текст | Елемент тексту-мітка. Характеризується типом шрифту, кольором, орієнтацією та вирівнюванням. Передбачається підтримка аргументів. |
Media | Медіа | Елемент відображення растрових та векторних зображень різних форматів, програвання анімованих зображень, програвання аудіо-фрагментів та перегляд відео-фрагментів. |
Diagram | Діаграма | Елемент діаграми з підтримкою можливості відображення декількох потоків у реальному часі для: трендів (часових графіків), частотного спектру, XY діаграм. |
Protocol | Протокол | Елемент протоколу — візуалізатор повідомлень програми, з підтримкою декількох режимів роботи. |
Document | Документ | Елемент формування звітів, журналів та іншої документації на основі доступних даних. |
Box | Контейнер | Містить механізм розташування-включення інших віджетів для формування нових, більш складних, віджетів та сторінок кінцевої візуалізації. |
Function, у планах | Функція API об'єктної моделі OpenSCADA | Невізуальний віджет, на боці виконання, що дозволяє включати обчислювальні функції об'єктної моделі OpenSCADA до СВУ. |
Таблиця. Загальний набір властивостей/атрибутів віджету
Ідентифікатор | Ім'я | Номер | Значення |
---|---|---|---|
id | Ідентифікатор | - | Ідентифікатор елементу. Атрибут тільки для читання, прикликаний надати інформацію про ідентифікатор елементу. |
path | Путь | - | Шлях до цього віджету. Атрибут тільки для читання та надання вичерпної інформації про розташування елементу. |
parent | Батько | - | Шлях до батьківського віджету. Атрибут тільки для читання та надання інформації про розташування предку від якого успадковано віджет. |
owner | Власник | - | Власник та групи віджету, у вигляді "{власник}:{группа[,группа2,группаN]}", по замовченню "root:UI". |
perm | Доступ | - |
Права доступу до віджету, у вигляді "{користувач}{групи}{інші}" плюс ознака наслідування, що вмикає наслідування власника та його прав від вищестоящого віджету.
По замовченню 01000 — наслідування. |
root | Корінь | 1 | Ідентифікатор віджету-примітиву (базового елементу), який лежить у основі образу візуалізації віджету. |
name | Ім'я | - | Ім'я елементу. Доступне до модифікації ім'я елементу. |
dscr | Опис | - | Опис елементу. Текстове поле короткого опису. |
en | Ввімкнено | 5 | Стан "Ввімкнено" елементу. Вимкнений елемент не відображається при виконані. |
active | Активний | 6 | Стан "Активний" елементу. Активний елемент може отримувати фокус при виконанні, тобто — отримувати клавіатурні та інші події з подальшою їх обробкою. |
geomX | Геометрія: x | 7 | Геометрія, координата 'x' положення елементу. |
geomY | Геометрія: y | 8 | Геометрія, координата 'y' положення елементу. |
geomW | Геометрія: ширина | 9 | Геометрія, ширина елементу. |
geomH | Геометрія: висота | 10 | Геометрія, висота елементу. |
geomXsc | Геометрія: x масштаб | 13 | Масштаб елемента по горизонталі. |
geomYsc | Геометрія: y масштаб | 14 | Масштаб елемента по вертикалі. |
geomZ | Геометрія: z | 11 | Геометрія, координата 'z' (рівень) елемента на кадрі. Також визначає порядок передачі фокусу між активними елементами. |
geomMargin | Геометрія: відступ | 12 | Геометрія, поля-відступи елементу. |
tipTool | Допомога: підказка | 15 | Текст короткої допомоги або підказки по даному елементу. Типово реалізується як спливаюча підказка, при утримані курсору миші над елементом. |
tipStatus | Допомога: стан | 16 |
Текст інформації про стан елементу або рекомендації до дії над елементом. Типово реалізується у вигляді повідомлення у рядку статусу, при утримувані курсору миші над елементом.
|
contextMenu | Контекстне меню | 17 |
Контекстне меню у вигляді переліку рядків: "{ItName}:{Signal}".
|
evProc | Обробка подій | - |
Атрибут зберігання сценарію обробки подій безпосереднього управління користувацьким інтерфейсом. Сценарій представляє собою перелік команд інтерфейсу візуалізації, що генеруються при надходженні події (атрибут event). Пряма обробка подій для управління сторінками у вигляді: "{event}:{evSrc}:{com}:{prm}". Де:
Приклади:
|
Додаткові атрибути елементів, поміщених до проєкту у ролі сторінки. | |||
pgOpen | Сторінка: відкрита | - |
Ознака "Сторінка відкрита".
|
pgNoOpenProc | Сторінка: обробляти закритою | - | Ознака "Виконувати сторінку навіть якщо вона закрита". |
pgOpenSrc | Сторінка: джерело відкриття | 3 |
Повня адреса сторінки, що відкрила дану.
|
pgGrp | Сторінка: група | 4 | Група сторінок. ПОРОЖНЯ та "main" група передбачають використання цієї сторінки як Кореневу-основну сторінку, тож така буде замінювати інші Кореневі-головні сторінки; група "fl" призначена для використання у зовнішніх вікнах, які передбачено для багаторазового одночасного відкриття та які не мають відстежуватися на дублікати; решта передбачено для включення у контейнери-бокси або одноразового одночасного відкриття, тож вони примусово перевіряються на дублікати, коли останнє відкривається, а попередні закриваються. |
Додаткові атрибути режиму виконання — сеансу. (Віртуальні атрибути не доступні у процедурі віджету) | |||
event | Події | - | Спеціальний атрибут збору подій віджету у переліку, поділеному новим рядком. Доступ до атрибуту захищено критичною секцією для запобігання втрати подій. Атрибут завжди доступний у процедурі віджету. |
load | Завантаження | -1 | Віртуальна команда групового завантаження даних. |
focus | Фокус | -2 | Спеціальний атрибут індикації факту отримання фокусу, активним віджетом. Атрибут цього віджету та вкладених віджетів доступний у процедурах віджету. |
perm | Доступ | -3 | Віртуальний атрибут прав активного користувача на перегляд та контроль над віджетом. |
Рушій середовища візуалізації передбачає активацію атрибутів, специфічних до візуалізатору. Процес активації здійснюється при відкритті сеансу візуалізації проєкту та передбачає, у цьому проєкті: створення специфічного атрибуту з вказаними властивостями, якщо він відсутній, та активацію відстеження його модифікації рушієм середовища візуалізації, як для атрибутів формування образів примітивів. Для безпосереднього визначення такого атрибута можна також використовувати префікс ідентифікатору атрибуту "vs_", що швидше і виключає стадію активації. З переліком специфічних до візуалізатора атрибутів можна ознайомитися у документації відповідного візуалізатора.
Примітив є основою відмальовки елементарних графічних фігур з різноманітною їх комбінацією у одному об'єкті. Враховуючи широкий спектр можливих фігур, які повинен підтримувати примітив, та, у цей-же час, бути достатньо простим у використанні та, по можливості, у реалізації, було вирішено обмежити перелік базових фігур, використаних для побудови результуючих графічних об'єктів, до таких: лінія, дуга, крива Без'є та заливка замкнених контурів. Ґрунтуючись вже на цих базових фігурах, можна будувати довільні фігури, комбінуючи базові. У рамках примітиву існує можливість завдання прозорості кольору у діапазоні [0...255], де '0' — повна прозорість.
Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елементарна фігура (ElFigure)"
Примітив, призначений для надання, у розпорядження користувача, стандартних елементів форми. Загальний перелік атрибутів залежить від типу елементу.
Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елемент форми (FormEl)"
Ідентифікатор | Ім'я | Номер | Значення |
---|---|---|---|
elType | Тип елементу | 20 | Тип елементу, від значення якого залежить перелік додаткових атрибутів:
|
Рядок редагування: | |||
value | Значення | 21 | Вміст рядку. |
view | Вид | 22 | Вид рядка редагування:
|
cfg | Конфігурація | 23 |
Конфігурація рядку. Формат значення даного поля для різних видів рядка:
|
confirm | Підтверджувати | 24 | Включення режиму підтвердження. |
font | Шрифт | 25 |
Ім'я шрифту у вигляді "{family} {size} {bold} {italic} {underline} {strike}", де:
Приклади:
|
Редактор тексту: | |||
value | Значення | 21 | Вміст редактору. |
wordWrap | Перенесення слів | 22 | Автоматичний перенесення тексту за словами. |
confirm | Підтверджувати | 24 | Включення режиму підтвердження. |
font | Шрифт | 25 | Ім'я шрифту у вигляді "{family} {size} {bold} {italic} {underline} {strike}" (деталі вище). |
Прапорець: | |||
name | Ім'я | 26 | Ім'я/мітка прапорця. |
value | Значення | 21 | Значення прапорця. |
font | Шрифт | 25 | Ім'я шрифту у вигляді "{family} {size} {bold} {italic} {underline} {strike}" (деталі вище). |
Кнопка: | |||
name | Ім'я | 26 | Ім'я-надпис на кнопці. Допустимі символи '\n' для можливості вводу багаторядних надписів. |
value | Значення | 21 |
Значення, відрізняється для різних режимів:
|
img | Зображення | 22 |
Зображення на кнопці. Ім'я зображення у вигляді "[{src}:]{name}", де:
Приклади:
|
color | Колір | 23 |
Колір кнопки. Ім'я кольору у вигляді "{color}[-{alpha}]", де:
Приклади:
|
colorText | Колір: текст | 27 | Колір тексту (деталі вище). |
mode | Режим | 24 |
Режим роботи кнопки:
|
font | Шрифт | 25 | Ім'я шрифту у вигляді "{family} {size} {bold} {italic} {underline} {strike}" (деталі вище). |
Список: | |||
value | Значення | 21 | Поточне значення списку. |
items | Елементи | 22 | Перелік елементів списку. |
font | Шрифт | 25 | Ім'я шрифту у вигляді "{family} {size} {bold} {italic} {underline} {strike}" (деталі вище). |
mult | Множинний вибір | 23 | Дозволяти вибір множини елементів списку. |
Вибір зі списку, Дерево: | |||
value | Значення | 21 | Поточне значення переліку. |
items | Елементи | 22 | Перелік елементів списку або ієрархічних елементів дерева у вигляді шляху "/{КАТ}/{КАТ}/{ЕЛЕМ}". |
font | Шрифт | 25 | Ім'я шрифту у вигляді "{family} {size} {bold} {italic} {underline} {strike}" (деталі вище). |
Таблиця: | |||
set | Значення встановлення | 23 | Значення редагування клітинки таблиці з адресою у події "ws_TableEdit_{colN}_{rowN}". |
value | Значення | 21 |
Адреса обраного елементу. Зміна супроводжується подією "ws_TableChangeSel". Формат адреси залежить від режиму обрання таблиці:
|
items | Елементи | 22 |
Структура та вміст таблиці у вигляді XML: <tbl>
<h><s>{Заголовок1}</s><s>{Заголовок2}</s></h>
<r><s>{Рядок1Стовпчик1Рядок}</s><i>{Рядок1Стовпчик2Ціле}</i></r>
<r><b>{Рядок2Стовпчик1Логічне}</b><r>{Рядок2Стовпчик2Реальне}</r></r>
</tbl>
Теги:
|
font | Шрифт | 25 | Ім'я шрифту у вигляді "{family} {size} {bold} {italic} {underline} {strike}" (деталі вище). |
Слайдер та стрічка гортання: | |||
value | Значення | 21 | Положення слайдеру. |
cfg | Конфігурація | 22 |
Конфігурація слайдеру у форматі: "{ВертОрієнт}:{Мінімум}:{Максимум}:{ОдинКрок}:{СторКрок}".
|
Даний примітив призначено для виводу простого та HTML тексту, що використовується у ролі міток та різних підписів. З метою створення декоративних оформлень, примітив підтримує обведення тексту рамкою.
Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елемент тексту (Text)"
Ідентифікатор | Ім'я | Номер | Значення |
---|---|---|---|
backColor | Фон: колір | 20 |
Фоновий колір. Ім'я кольору у виді "{color}[-{alpha}]", де:
Приклади:
|
backImg | Фон: зображення | 21 |
Фонове зображення. Ім'я зображення у виді "[{src}:]{name}", де:
Приклади:
|
bordWidth | Границя: ширина | 22 | Ширина бордюру. |
bordColor | Границя: колір | 23 | Колір бордюру (детальніше у атрибуті 20). |
bordStyle | Границя: стиль | 24 | Стиль бордюру: "Немає" (0), "Точковий" (1), "Пунктирний" (2), "Суцільний" (3), "Подвійний" (4), "Канавка" (5), "Кромка" (6), "Втиснутий" (7), "Виступаючий" (8). |
font | Шрифт | 25 |
Ім'я шрифту у виді "{family} {size} {bold} {italic} {underline} {strike}", де:
Приклади:
|
color | Колір | 26 | Колір тексту (детальніше у атрибуті 20). |
orient | Кут повороту | 27 | Орієнтація тексту, кут повороту. |
wordWrap | Перенесення слів | 28 | Автоматичне перенесення тексту за словами. |
alignment | Вирівнювання | 29 | Вирівнювання тексту: "Зверху ліворуч" (0), "Зверху праворуч" (1), "Зверху у центрі" (2), "Зверху по ширині" (3), "Знизу ліворуч" (4), "Знизу праворуч" (5), "Знизу у центрі" (6), "Знизу по ширині" (7), "У центрі ліворуч" (8), "У центрі праворуч" (9), "У центрі" (10), "У центрі по ширині" (11). |
inHtml | В HTML | 31 | Відображення та підтримка вмісту аргументу text у HTML. |
text | Текст | 30 | Значення тексту. Використовуйте "%{x}" для розташування значення аргументу "x" (від 1). |
numbArg | Кількість аргументів | 40 | Кількість аргументів. |
Атрибути аргументів | |||
arg{x}val | Аргумент {x}: значення | 50+10*x | Значення аргументу x. |
arg{x}tp | Аргумент {x}: тип | 50+10*x+1 | Тип аргументу x: "Цілий" (0), "Реальний" (1), "Рядок" (2). |
arg{x}cfg | Аргумент {x}: конфігурація | 50+10*x+2 |
Конфігурація аргументу x:
|
Даний примітив призначено для програвання різних медіа-матеріалів, починаючи від простих зображень та закінчуючи повноцінними аудіо та відео потоками.
Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елемент відображення медіа-матеріалів (Media)"
Ідентифікатор | Ім'я | Номер | Значення |
---|---|---|---|
backColor | Фон: колір | 20 |
Фоновий колір. Ім'я кольору у виді "{color}[-{alpha}]", де:
Приклади:
|
backImg | Фон: зображення | 21 |
Фонове зображення. Ім'я зображення у виді "[{src}:]{name}", де:
Приклади:
|
bordWidth | Границя: ширина | 22 | Ширина бордюру. |
bordColor | Границя: колір | 23 | Колір бордюру (детальніше у атрибуті 20). |
bordStyle | Границя: стиль | 24 | Стиль бордюру: "Немає", "Точковий", "Пунктирний", "Суцільний", "Подвійний", "Канавка", "Кромка", "Втиснутий", "Виступаючий". |
src | Джерело | 25 |
Ім'я джерела медіа у виді "[{src}:]{name}", де:
Приклади:
|
type | Тип | 27 |
Тип медіа:
|
areas | Області карти | 28 | Кількість активних областей. |
Атрибути зображення (Image) | |||
fit | Заповнювати віджет | 26 | Ознака "Погоджувати вміст з розміром віджету". |
Атрибути анімації-відеоролику (Animation) | |||
fit | Заповнювати віджет | 26 | Ознака "Погоджувати вміст з розміром віджету". |
speed | Швидкість програвання | 29 | Швидкість програвання, у відсотках від оригінальної швидкості. Якщо значення менше або дорівнює 1% то програвання припиняється. |
Атрибути повноформатного відео (Full video) | |||
play | Грати | 29 | Відео/аудіо — "Грати". |
roll | Завертати програвання | 30 | Повторення програвання по завершенню. |
pause | Пауза | 31 | Призупиняти програвання. |
size | Розмір | 32 | Загальний розмір відео, у мілісекундах. |
seek | Положення | 33 | Позиція програвання відео, у мілісекундах. |
volume | Гучність | 34 | Гучність звуку [0...100]. |
Активні області | |||
area{x}shp | Область {x}: образ | 40+3*x | Вид області x: "Квадрат", "Полілінія", "Коло". |
area{x}coord | Область {x}: координати | 40+3*x+1 | Координати області x, через кому йдуть координати: "x1,y1,x2,y2,xN,yN". |
area{x}title | Область {x}: заголовок | 40+3*x+2 | Заголовок області x. |
Цей примітив призначено для побудови різних діаграм у часі, включаючи графіки-тренди відображення поточного процесу та архівних даних. Реалізовано наступні типи діаграм:
Для всіх типів діаграм можливе визначення, у якості джерела даних:
Підтримується режим слідкування за поточними значеннями та значеннями з архіву, а також, можлива побудова графіків параметрів, що не мають архіву значень, шляхом накопичення поточних значень у буфері діаграми та тільки на момент активного відображення цієї діаграми.
Процес доступу до архівних даних оптимізовано шляхом введення проміжного буферу відображення, а також, упаковки трафіку даних при запиті, шляхом приведення даних до якості достатньої для відображення.
Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елемент побудови діаграм (Diagram)"
Ідентифікатор | Ім'я | Номер | Значення |
---|---|---|---|
backColor | Фон: колір | 20 |
Фоновий колір. Ім'я кольору у виді "{color}[-{alpha}]", де:
Приклади:
|
backImg | Фон: зображення | 21 |
Фонове зображення. Ім'я зображення у виді "[{src}:]{name}", де:
Приклади:
|
bordWidth | Границя: ширина | 22 | Ширина бордюру. |
bordColor | Границя: колір | 23 | Колір бордюру (детальніше у атрибуті 20). |
bordStyle | Границя: стиль | 24 | Стиль бордюру: "Немає", "Точковий", "Пунктирний", "Суцільний", "Подвійний", "Канавка", "Кромка", "Втиснутий", "Виступаючий". |
trcPer | Період стеження, секунд | 25 | Режим та періодичність стеження. |
type | Тип | 26 | Тип діаграми: "Графік", "Спектр", "XY". |
Атрибути, загальні для всіх типів | |||
tSek | Час: секунди | 27 | Поточний час, секунд. |
tUSek | Час: мікросекунди | 28 | Поточний час, мікросекунди. |
tSize | Розмір, секунди | 29 | Розмір даних, секунди. |
curSek | Курсор: секунди | 30 | Положення курсору, секунди. |
curUSek | Курсор: мікросекунди | 31 | Положення курсору, мікросекунди. |
curColor | Курсор: колір | 32 | Колір курсору. |
sclColor | Шкала: колір | 33 | Колір шкали-решітки (детальніше у атрибуті 20). |
sclHor | Шкала: горизонтальна | 34 | Режим горизонтальної шкали-решітки: "Не зображувати", "Ґратка", "Маркери", "Ґратка та маркери", "Ґратка (лог)", "Маркери (лог)", "Ґратка та маркери (лог)". |
sclHorScl | Шкала: гориз. масштаб (%) | 44 | Горизонтальний масштаб графіку у відсотках, виключно для типу "XY". |
sclHorSclOff | Шкала: зміщ. гориз. масштабу (%) | 45 | Зміщення горизонтального масштабу у відсотках, виключно для типу "XY". |
sclVer | Шкала: вертикальна | 35 | Режим вертикальної шкали-решітки: "Не зображувати", "Ґратка", "Маркери", "Ґратка та маркери", "Ґратка (лог)", "Маркери (лог)", "Ґратка та маркери (лог)". |
sclVerScl | Шкала: верт. масштаб (%) | 40 | Вертикальний масштаб графіку у відсотках. |
sclVerSclOff | Шкала: зміщ. верт. масштабу (%) | 41 | Зміщення вертикального масштабу у відсотках. |
sclMarkColor | Шкала: Маркери: колір | 36 | Колір маркерів шкали-решітки (детальніше у атрибуті 20). |
sclMarkFont | Шкала: Маркери: шрифт | 37 |
Шрифт маркерів шкали-решітки. Ім'я шрифту у виді "{family} {size} {bold} {italic} {underline} {strike}", де:
Приклади:
|
valArch | Архіватор значень | 38 | Архіватор значень у вигляді "{МодульАрхівів}.{IdАрхіватору}". |
valsForPix | Значень на піксель | 42 | Кількість значень на піксель. Збільшити для розширення точності експорту на великих інтервалах часу. |
parNum | Кількість параметрів | 39 | Кількість параметрів, що відображаються на одному тренді. |
Атрибути типу: "Графік" | |||
sclHorPer | Шкала: розмір гор. ґратки, секунди | 43 | Фіксований період ґратки горизонтальної шкали — вимикає автоматичне обчислення періоду ґратки. Активується якщо кількість періодів на загальний розмір більш двох та розмір одного періоду не менше 15 пікселів. |
Індивідуальні атрибути параметрів | |||
prm{X}addr | Параметр {X}: адреса | 50+10*{X} |
Повна адреса до атрибуту параметру X DAQ або архіву.
Приклад:
|
prm{X}bordL | Параметр {X}: границя відображ.: нижня | 50+10*{X}+1 | Нижня границя значень параметру X. |
prm{X}bordU | Параметр {X}: границя відображ.: верхня | 50+10*{X}+2 | Верхня границя значень параметру X. |
prm{X}color | Параметр {X}: колір | 50+10*{X}+3 | Колір відображення графіку параметру X (детальніше у атрибуті 20). |
prm{X}width | Параметр {X}: ширина | 50+10*{X}+6 | Ширина лінії графіку параметра X, у пікселях. |
prm{X}scl | Параметр {X}: шкала | 50+10*{X}+5 | Режим окремої вертикальної шкали параметру X: "Глобально", "Маркери", "Ґратка та маркери", "Маркери (лог)", "Ґратка та маркери (лог)". |
prm{X}val | Параметр {X}: значення | 50+10*{X}+4 | Значення параметру X під курсором, або на поточний час, для типа "XY". |
prm{X}prop | Параметр {X}: властивості | 50+10*{X}+7 | Властивості реального архіву у вигляді "{BegArh}:{EndArh}:{DataPeriod}", де "BegArh", "EndArh", "DataPeriod" — початок, кінець та період даних архіву, у секундах, у реальному представлені, безпосередньо до мікросекунд (1e-6). |
Цей примітив призначено для візуалізації даних архіву повідомлень шляхом формування протоколів з різними способами візуалізації, починаючи від статичного сканувального перегляду та закінчуючи динамічним стеженням.
Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елемент побудови протоколів на основі архівів повідомлень (Protocol)"
Ідентифікатор | Ім'я | Номер | Значення |
---|---|---|---|
backColor | Фон: колір | 20 |
Фоновий колір. Ім'я кольору у виді "{color}[-{alpha}]", де:
Приклади:
|
backImg | Фон: зображення | 21 |
Фонове зображення. Ім'я зображення у виді "[{src}:]{name}", де:
Приклади:
|
font | Шрифт | 22 |
Ім'я шрифту у виді "{family} {size} {bold} {italic} {underline} {strike}", де:
Приклади:
|
headVis | Заголовок видимий | 23 | Видимість заголовку таблиці. |
time | Час, секунди | 24 | Поточний час, секунди. |
tSize | Розмір, секунди | 25 | Розмір запиту даних, секунди. Встановіть значення у '0' для отримання всіх порушень, для "lev" < 0. |
trcPer | Період стеження, секунди | 26 | Режим та періодичність стеження. |
arch | Архіватор | 27 | Архіватор повідомлень у вигляді "{МодульАрхівів}.{IdАрхіватору}". |
tmpl | Шаблон | 28 |
Шаблон категорії або регулярний вираз "/{re}/". Для шаблона зарезервовано символи:
|
lev | Рівень | 29 | Рівень повідомлень. Встановіть значення < 0 для отримання поточних порушень. |
viewOrd | Порядок відображення | 30 | Порядок відображення: "За часом", "За рівнем", "За категорією", "За повідомленням", "За часом (обернений)", "За рівнем (обернений)", "За категорією (обернений)", "За повідомленням (обернений)". |
col | Показати стовпчики | 31 |
Перелік видимих та порядок стовпчиків, поділених символом ';'. Передбачаються стовпчики:
|
itProp | Властивості елементу | 32 | Кількість властивостей елементу. |
Індивідуальні атрибути властивостей елемента | |||
it{X}lev | Елемент {X}: рівень | 40+5*{X} | Критерій: рівень елементу X більш або дорівнює вказаному. |
it{X}tmpl | Елемент {X}: шаблону | 40+5*{X}+1 | Критерій: шаблон категорії елементу X (детальніше у атрибуті 28). |
it{X}fnt | Елемент {X}: шрифт | 40+5*{X}+2 | Шрифт елементу X (детальніше у атрибуті 22). |
it{X}сolor | Елемент {X}: кольору | 40+5*{X}+3 | Колір елементу X (детальніше у атрибуті 20). |
Примітив призначено для формування звітної, оперативної та іншої документації на основі шаблонів документів.
Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елемент формування звітної документації (Document)"
Ідентифікатор | Ім'я | Номер | Значення |
---|---|---|---|
style | CSS | 20 | Правила CSS в рядках, виду "body { background-color:#818181; }". |
tmpl | Шаблон | 21 |
Шаблон документу у XHTML, починаючи з тегу "body" та включаючи процедурні вставки: <body docProcLang="JavaLikeCalc.JavaScript">
<h1>Значення<?dp return wCod+1.314;?></h1>
</body>
|
doc | Документ | 22 | Фінальний документ у XHTML, починається з тегу "body". |
font | Шрифт | 26 |
Базовий шрифт тексту документа. Ім'я шрифту у виді "{family} {size} {bold} {italic} {underline} {strike}", де:
Приклади:
|
bTime | Час: початок | 24 | Час початку документу, секунди. |
time | Час: поточне | 23 | Час генерації документу, секунди. Записати час для генерації документа від цієї точки або нуль для перегенерації. |
process | У процесі | 27 | Ознака процесу формування документу окремим потоком. |
n | Розмір архіву | 25 | Кількість документів або глибина архіву. |
Атрибути увімкненого режиму архівування | |||
aCur | Архів: курсор: поточний | - | Позиція поточного документу у архіві. Запис значення <0 здійснює архівацію поточного документу. |
vCur | Архів: курсор: вид | - |
Поточний візуалізований документ архіву. Запис значення:
|
aDoc | Архів: поточний документ | - | Поточний документ архіву у XHTML, починається з тегу "body". |
aSize | Архів: розмір | - | Реальний розмір архіву документу. |
Можливості примітиву "Документ":
У основі будь-якого документу лежить XHTML-шаблон. XHTML-шаблон це тег "body" WEB-сторінки, що містить статику документу у стандарті XHTML 1.0 та елементи виконувальних інструкцій на мові користувацького програмування OpenSCADA, у вигляді <?dp {procedure} ?>. Результуючий документ формується шляхом виконання процедур та вставки їх результату у документ.
Джерелом значень виконуваних інструкцій є атрибути віджету цього примітиву, а також всі механізми мови користувацького програмування OpenSCADA. Атрибути можуть додаватися користувачем та лінкуватися на реальні атрибути параметрів або-ж бути автономними, значення яких будуть формуватися у процедурі віджету. У випадку зі злінкованими атрибутами, значення можуть вийматися з архіву-історії.
На рисунку зображено структурну схему віджету примітива "Документ". Згідно цієї структури, "Документ" містить: XHTML-шаблон, результатні документи та процедуру обробки даних. Джерелом даних процедури та результатних документів є атрибути віджету.
Передбачено роботу віджету у двох режимах: "Динамічний" та "Архівний". Відмінністю архівного режиму є наявність архіву визначеної глибини та атрибутів, що дозволяють керувати процесом архівування та перегляду вказаного документу у архіві.
Генерація документу завжди здійснюється у момент встановлення атрибуту часу time відносно встановленого раніш початкового часу документу у атрибуті bTime. При вимкненому архіві, результатний документ поміщається безпосередньо у атрибут doc. При увімкненому архіві, результатний документ поміщається до клітинки під курсором, атрибут aCur, а також у doc, якщо значення курсору архіву aCur та курсору візуалізованого документу vCur збігаються. Атрибути архівних курсорів передбачають декілька командних значень:
Як було вказано вище, динаміка шаблону документа визначається вставками виконуваних інструкцій виду "<?dp {procedure} ?>". У процедурах можуть використовуватися однойменні атрибути віджету та функції користувацького інтерфейсу програмування OpenSCADA. Крім атрибутів віджету, зарезервовано спеціальні атрибути, дивись таблицю.
Таблиця. Спеціальні та зарезервовані елементи шаблону.
Ім'я | Призначення |
---|---|
Атрибути | |
rez | Атрибут результату виконання процедури, вміст якого поміщається у дерево документа. |
lTime | Час останнього формування. Якщо документ формується вперше то lTime дорівнює bTime. |
rTime | Містить час перебируваних значень, секунди, визначається всередині тегів з атрибутом "docRept". |
rTimeU | Містить час перебируваних значень, мікросекунди, визначається всередині тегів з атрибутом "docRept". |
rPer | Містить період перебору значень, атрибут "docRept". |
mTime, mTimeU, mLev, mCat, mVal |
Визначаються всередині тегів з атрибутом "docAMess" при розборі повідомлень архіву повідомлень:
|
Спеціальні теги | |
Спеціальні атрибути стандартних тегів | |
body.docProcLang | Мова виконуваних процедур документу, по замовченню це "JavaLikeCalc.JavaScript". |
*.docRept="1s" | Тег з указаним атрибутом розмножується, при формуванні, шляхом зсуву часу у атрибуті "rTime" на значення, вказане у даному атрибуті. |
*.docAMess="1:PLC*" | Вказує на необхідність розмноження тегу з атрибутом, повідомленнями з архіву повідомлень за вказаний інтервал часу, згідно рівня "1" та шаблону запиту "PLC*", за категорією повідомлення. У шаблоні запиту можуть вказуватися регулярні вирази у вигляді "/{re}/". Для даного тегу, у процесі розмноження, визначаються атрибути: "mTime", "mTimeU", "mLev", "mCat" и "mVal". |
*.docAMessArchs="ArchMod0.Archivator0[;ArchModN.ArchivatorN]" | Доповнює атрибут "*.docAMess" переліком архіваторів для читання повідомлень. |
*.docRevers="1" | Вказує на інвертування порядку розмноження — останній нагорі. |
*.docAppend="1" | Ознака необхідності додання результату виконання процедури до тегу процедури. Інакше результат виконання заміняє вміст тегу. |
body.docTime | Час формування документу, використовується для встановлення атрибуту lTime при наступному формуванні документа. Не встановлюється користувачем! |
table.export="1" | Ввімкнення можливості експорту вмісту вказаної таблиці у CSV-файл або інші табличні формати. |
Примітив контейнеру, використовується для формування складених віджетів та/або сторінок користувацького інтерфейсу.
Таблиця. Набір додаткових властивостей/атрибутів примітиву "Контейнер (Box)"
Ідентифікатор | Ім'я | Номер | Значення |
---|---|---|---|
pgOpenSrc | Сторінка: джерело відкриття | 3 | Повна адреса сторінки, яка включена усередину даного контейнеру. |
pgGrp | Сторінка: група | 4 | Група контейнеру включених сторінок. Лише сторінки у такій групі включатимуться до цього боксу як контейнеру. |
backColor | Фон: колір | 20 |
Фоновий колір. Ім'я кольору у виді "{color}[-{alpha}]", де:
Приклади:
|
backImg | Фон: зображення | 21 |
Фонове зображення. Ім'я зображення у виді "[{src}:]{name}", де:
Приклади:
|
bordWidth | Границя: ширина | 22 | Ширина бордюру. |
bordColor | Границя: колір | 23 | Колір бордюру (детальніше у атрибуті 20). |
bordStyle | Границя: стиль | 24 | Стиль бордюру: "Немає", "Точковий", "Пунктирний", "Суцільний", "Подвійний", "Канавка", "Кромка", "Втиснутий", "Виступаючий". |
Зберігання даних віджетів, бібліотек віджетів та проєктів реалізовано у БД, доступних OpenSCADA. БД організовано за приналежністю даних до бібліотеки-проєкту. Тобто, окрема бібліотека-проєкт зберігається у окремій групі таблиць БД. Перелік бібліотек віджетів зберігається у індексній таблиці бібліотек з іменем "VCALibs" та структурою "Libs", а перелік проєктів у індексній таблиці "VCAPrjs" та структурою "Projs". Екземпляр цих таблиць створюється у кожній БД, де зберігаються дані цього модуля. До складу таблиць, що належать бібліотеці віджетів та проєкту, входять наступні:
{DB_TBL} наразі формується у вигляді "wlb_{ID}" для бібліотек та "prj_{ID}" для проєктів, а окреме поле DB_TBL таблиць "Libs", "Projs" застаріле і буде видалене у випуску OpenSCADA 1.0!
Проекції (структури) основних таблиць такі:
API користувацького програмування рушія візуалізації безпосередньо представлено об'єктами OpenSCADA, що формують користувацький інтерфейс, а саме "Сеансом" та "Віджетами-сторінками". Для користувача ці об'єкти надають набір функцій управління:
Об'єкт "Сеанс" ( this.ownerSess() )
Об'єкт "Віджет" (this)
//Додає новий віджет на основі віджету текстового примітиву
nw = this.wdgAdd("nw", "Новий віджет", "/wlb_originals/wdg_Text");
nw.attrSet("geomX", 50).attrSet("geomY", 50);
//Встановлює посилання восьмого тренду параметром
this.linkSet("el8.name", "prm:/LogicLev/experiment/Pi", true);
Об'єкт "Віджет", примітиву "Документ" (this)
Застаріле, але підтримуване, API представляється групою функцій безпосередньо у модулі рушія СВУ. Виклик цих функцій з процедури віджету може здійснюватися прямо за ідентифікатором, оскільки їх область імен визначається у контексті процедур віджетів.
Перелік віджетів (WdgList)
Опис: Повертає перелік віджетів, у контейнері віджетів, або дочірніх віджетів. Якщо встановлено pg, то повертається перелік сторінок проєктів та сеансу.
Параметри:
Ідентифікатор | Ім'я | Тип | Режим | По замовчанню |
---|---|---|---|---|
list | Перелік | Рядок | Повернення | |
addr | Адреса | Рядок | Вхід | |
pg | Сторінки | Логічний | Вхід | 0 |
Присутність вузла (NodePresent)
Опис: Перевірка вузла на присутність, включаючи віджети, атрибути та інше.
Параметри:
Ідентифікатор | Ім'я | Тип | Режим | По замовченню |
---|---|---|---|---|
rez | Результат | Логічний | Повернення | |
addr | Адреса | Рядок | Вхід |
Перелік атрибутів (AttrList)
Опис: Повертає перелік атрибутів віджету. Якщо встановлено noUser тоді повертаються тільки атрибути не користувача.
Параметри:
Ідентифікатор | Ім'я | Тип | Режим | По замовченню |
---|---|---|---|---|
list | Перелік | Рядок | Повернення | |
addr | Адреса | Рядок | Вхід | |
noUser | Без користувацьких | Логічний | Вхід | 1 |
Отримати атрибут (AttrGet)
Опис: Отримання значення атрибуту віджета. Запит може здійснюватися як указанням повної адреси атрибуту у addr, так і окремо: адресу віджету у addr та ідентифікатор атрибута у attr.
Параметри:
Ідентифікатор | Ім'я | Тип | Режим | По замовченню |
---|---|---|---|---|
val | Значення | Рядок | Повернення | |
addr | Адреса | Рядок | Вхід | |
attr | Атрибут | Логічний | Вхід |
Встановити атрибут (AttrSet)
Опис: Встановлення значення атрибуту віджета. Встановлення може здійснюватися як указанням повної адреси атрибуту у addr, так і окремо: адресу віджету у addr та ідентифікатор атрибута у attr.
Параметри:
Ідентифікатор | Ім'я | Тип | Режим | По замовченню |
---|---|---|---|---|
addr | Адреса | Рядок | Вхід | |
val | Значення | Рядок | Вхід | |
attr | Атрибут | Логічний | Вхід |
Користувач сеансу (SesUser)
Опис: Повертає користувача сеансу за шляхом віджета сеансу.
Параметри:
Ідентифікатор | Ім'я | Тип | Режим | По замовченню |
---|---|---|---|---|
user | Користувач | Рядок | Повернення | |
addr | Адреса | Рядок | Вхід |
Сервісні функції — це інтерфейс доступу до OpenSCADA із зовнішніх систем посередництвом Інтерфейсу Управління. Цей механізм покладено в основу усього обміну всередині OpenSCADA, реалізованого шляхом слабких зв'язків та власного протоколу обміну OpenSCADA.
Загальні віджети
<get path="/UI/VCAEngine/wlb_AGLKS/wdg_CM101/wdg_ElFigure1/%2fserv%2fattr" rez="0" user="roman">
<el id="id">ElFigure1</el>
<el id="path">/wlb_AGLKS/wdg_CM101/wdg_ElFigure1</el>
<el id="parent">/wlb_originals/wdg_ElFigure</el>
<el id="owner">root:UI</el>
<el id="perm">948</el>
<el id="root" p="1">ElFigure</el>
<el id="name" />
<el id="dscr" />
</get>
<set path="/UI/VCAEngine/wlb_AGLKS/wdg_CM101/wdg_ElFigure1/%2fserv%2fattr">
<el id="name">Нова назва</el>
<el id="dscr">Новий опис</el>
</set>
<get path="/UI/VCAEngine/wlb_AGLKS/wdg_CM101/%2fserv%2fattrBr" rez="0" user="roman">
<el id="id">CM101</el>
<el id="path">/wlb_AGLKS/wdg_CM101</el>
<el id="parent">/wlb_originals/wdg_Box</el>
<el id="owner">root:UI</el>
<el id="perm">948</el>
<el id="root" p="1">Box</el>
<el id="name">КМ101</el>
<w id="AT101_1" lnkPath="/wlb_mnEls/wdg_cooler">
<el id="id">AT101_1</el>
<el id="path">/wlb_AGLKS/wdg_CM101/wdg_AT101_1</el>
<el id="parent">/wlb_mnEls/wdg_cooler</el>
<el id="owner">root:UI</el>
<el id="perm">948</el>
<el id="root" p="1">ElFigure</el>
<el id="name">АТ101 1</el>
</w>
</get>
Бібліотеки віджетів
<get disIconsCW="1" disIconsW="1" item="/wlb_AGLKS" path="/UI/VCAEngine/%2fserv%2fwlbBr" rez="0" user="roman">
<wlb id="AGLKS">АГЛКС
<ico>iVBORw0KGgoAA...AAAElFTkSuQmCC</ico>
<w id="CM101" parent="/wlb_originals/wdg_Box">КМ101
<cw id="AT101_1">АТ101 1</cw>
<cw id="AT101_2">АТ101 1</cw>
<cw id="C101_1">C101/1</cw>
<cw id="C101_2">C101/1</cw>
<cw id="C101_3">C101/1</cw>
<cw id="CM101">CM101</cw>
<cw id="CM101_1">CM101_1</cw>
<cw id="CM101_2">CM101_2</cw>
<cw id="ElFigure1">ElFigure1</cw>
<cw id="ElFigure2">ElFigure2</cw>
<cw id="ElFigure3">ElFigure3</cw>
<cw id="ElFigure4">ElFigure4</cw>
<cw id="ElFigure5">ElFigure5</cw>
<cw id="ElFigure6">ElFigure6</cw>
<cw id="ElFigure7">ElFigure7</cw>
</w>
<w id="KCH_MN1" parent="/wlb_originals/wdg_Box">KCH_MN1
<cw id="BC1">Кульовий кран</cw>
<cw id="BC2">Кульовий кран</cw>
<cw id="BC21">Кульовий кран</cw>
<cw id="BC22">Кульовий кран</cw>
</w>
<w id="comprEn" parent="/wlb_originals/wdg_ElFigure">Робота компресора</w>
</wlb>
</get>
Проєкти СВУ
<get getChPgN="1" path="/UI/VCAEngine/%2fbr%2fprj_" rez="0" user="roman">
<el chPgN="2" id="AGLKS">АГЛКС</el>
<el chPgN="2" id="archBrowser">Огляд архівів</el>
<el chPgN="2" id="tmplSO">Групи сигналізації (шаблон)</el>
</get>
<read path="/UI/VCAEngine/prj_AGLKS/%2fserv%2faccess" rez="0" user="roman">1</read>
Сеанси проєктів
<get path="/UI/VCAEngine/%2fses%2fses" rez="0" onlyMy="1" user="roman">
<el user="roman" proj="AGLKS">AGLKS</el>
<el user="roman" proj="AGLKS">AGLKS0</el>
</get>
<list path="/UI/VCAEngine/%2fserv%2fsess" prj="AGLKS" rez="0" user="roman">
<el>AGLKS</el>
</list>
<connect conId="50860885" path="/UI/VCAEngine/%2fserv%2fsess" prj="AGLKS" rez="0" sess="AGLKS" user="roman" userIsRoot="1" />
<disconnect path="/UI/VCAEngine/%2fserv%2fsess" sess="AGLKS" conId="50860885" />
<openlist conId="52760577" path="/UI/VCAEngine/ses_AGLKS/%2fserv%2fpg" rez="0" tm="1403" user="roman">
<pg>/ses_AGLKS/pg_so</pg>
<pg pgGrp="so">/ses_AGLKS/pg_so/pg_1/pg_mn/pg_1</pg>
<pg pgGrp="cntr">/ses_AGLKS/pg_control/pg_ElCadr</pg>
</openlist>
<get path="/UI/VCAEngine/ses_AGLKS/%2fserv%2falarm" mode="resource" tp="1" rez="0" user="roman"
alarmSt="460554" tm="0" resTp="audio/ogg;73.3428" lang="en_US.UTF-8">
T2dnUwACA...Dg6gwAjo+PAQ==
</get>
<quietance path="/UI/VCAEngine/ses_AGLKS/%2fserv%2falarm" tmpl="7" />
<get path="/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1/%2fserv%2fattr" rez="0" tm="0" user="roman">
<el id="perm" p="-3">6</el>
<el id="root" p="1">ElFigure</el>
<el id="en" p="5">1</el>
<el id="active" p="6">0</el>
<el id="geomX" p="7">488</el>
<el id="geomY" p="8">250</el>
<el id="geomW" p="9">16</el>
<el id="geomH" p="10">100</el>
<el id="geomXsc" p="13">1</el>
<el id="geomYsc" p="14">0.75</el>
<el id="geomZ" p="11">-9</el>
</get>
<set path="/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1/%2fserv%2fattr">
<el id="name">Нова назва</el>
<el id="dscr">Новий опис</el>
</set>
<activate path="/UI/VCAEngine/ses_AGLKS/pg_so/%2fserv%2fattr%2frunWin" aNm="Вікно виконання" aTp="1" aFlg="1" aVls="0;1;2" aNms="Original size;Maximize;Full screen">0</activate>
<get path="/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/%2fserv%2fattrBr" rez="0" tm="0" user="roman">
<el id="name" p="-4">CM101</el>
<el id="perm" p="-3">6</el>
<el id="root" p="1">Box</el>
<el id="en" p="5">1</el>
<el id="active" p="6">0</el>
<el id="geomX" p="7">0</el>
<el id="geomY" p="8">0</el>
<el id="geomW" p="9">900</el>
<el id="geomH" p="10">580</el>
<w id="AT101_1">
<el id="perm" p="-3">6</el>
<el id="root" p="1">ElFigure</el>
<el id="en" p="5">1</el>
<el id="active" p="6">0</el>
<el id="geomX" p="7">338</el>
<el id="geomY" p="8">320</el>
<el id="geomW" p="9">80</el>
<el id="geomH" p="10">100</el>
</w>
</get>
<get path="/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/%2fserv%2fattrSess%2ftestA" rez="0" user="roman">тестове значення</get>
<set path="/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/%2fserv%2fattrSess%2ftestA">тестове значення</set>
За посередництвом інтерфейсу управління OpenSCADA компоненти, які його використовують, можна конфігурувати з будь-якого конфігуратору OpenSCADA. Даним модулем надається інтерфейс доступу до всіх об'єктів даних СВУ. Головна вкладка конфігураційної сторінки модуля надає доступ до бібліотек віджетів та проєктів (рис.4.1). Вкладка "Сеанси" надає доступ до відкритих сеансів проєктів (рис.4.2).
Крім переліку відкритих сеансів, вкладка на рисунку 4.2 містить таблицю з переліком сеансів, які мають створюватися та запускатися у момент завантаження OpenSCADA. Створення сеансів за посередництвом цього механізму може бути корисним для Web-інтерфейсу. У такому випадку, при підключені Web-користувача, всі дані вже готові та забезпечується неперервність формування архівних документів.
Конфігурація контейнерів віджетів у особі бібліотек віджетів та проєктів виконується за посередництвом сторінок на рисунку 4.3 (для проєкту) та рисунку 4.5 (для бібліотеки віджетів). Бібліотека віджетів містить віджети, а проєкт — сторінки. Обидва типи контейнеру містять вкладку конфігурації ресурсів, що використовуються віджетами (рис.4.6). Сторінка проєкту також містить вкладку "Діагностика" (рис.4.4) для налагодження та контролю за виконанням сторінки у сеансах.
За допомогою цієї сторінки можна встановити:
У цій вкладці Ви можете обрати час (або оновити до поточного) та розмір для отримання діагностичних повідомлень сеансів виконання даного проєкту.
За допомогою цієї сторінки можна встановити:
Конфігурація сеансу проєкту значно відрізняється від конфігурації проєкту (рис.4.7), однак, також, містить сторінки проєкту.
За допомогою цієї сторінки можна встановити:
Сторінки конфігурації візуальних елементів, розташованих у різних контейнерах, можуть сильно відрізнятися, однак, ця різниця полягає у наявності або відсутності окремих вкладок. Головна вкладка візуальних елементів фактично всюди однакова, відрізняючись на одне конфігураційне поле та три у сеансі (рис.4.8). У сторінок присутні вкладки дочірніх сторінок та вкладених віджетів. У контейнерних віджетів міститься вкладка вкладених віджетів. Всі візуальні елементи містять вкладку атрибутів (рис.4.9), крім логічних контейнерів проєктів. Елементи, на рівні яких можна формувати користувацьку процедуру та визначати зв'язки, містять вкладки "Обробка" (рис.4.10) та "Зв'язки" (рис.4.11). Рядки ім'я атрибуту у вкладці "Обробка" після першого опрацьовуються як допомога.
За допомогою цієї сторінки можна отримати:
Modules/VCAEngine/uk - GFDL | March 2024 | OpenSCADA 0.9.7 |