From OpenSCADAWiki
Jump to: navigation, search
This page is a translated version of the page Modules/VCAEngine and the translation is 100% complete.

Other languages:
English • ‎российский • ‎українська
Модуль Ім'я Версія Ліцензія Джерело Мови Платформи Тип Автор Опис
VCAEngine Рушій Середовища Візуалізації та Управління 5.1 GPL2 ui_VCAEngine.so en,uk,ru,de x86,x86_64,ARM UI Роман Савоченко Загальний рушій середовища візуалізації та керування.

Contents

Модуль надає до OpenSCADA рушій середовища візуалізації та управління (СВУ). Сам модуль не реалізує візуализації СВУ, а містить дані відповідно до концепції "Модель/дані – Інтерфейс". Візуалізація даних цього модуля виконується модулями візуалізації СВУ, наприклад, модулем Vision та WebVision.

Середовище візуалізації та управління (СВУ) є невід'ємною складовою SCADA системи. Воно застосовується на клієнтських станціях з метою доступного представлення інформації про об'єкт управління та видачі керуючого впливу на об'єкт. У різних практичних ситуаціях та умовах можуть застосовуватися СВУ, побудовані на різних принципах візуалізації. Наприклад, це можуть бути бібліотеки віджетів Qt, GTK+, wxWidgets або гіпертекстові механізми на основі технологій HTML, XHTML, XML, CSS та JavaScript або сторонні додатки візуалізації, реалізовані на різних мовах програмування Java, Python та інше. Будь-який з цих принципів має свої переваги та недоліки, комбінація яких може стати непереборною перепоною у можливості використання СВУ у тому або іншому практичному випадку. Наприклад, технології на кшталт бібліотеки Qt дозволяють створювати високопродуктивні СВУ, що безсумнівно важливо для станцій оператору управління технологічним процесом (ТП). Однак, необхідність інсталяції даного клієнтського ПЗ може зробити його використання неможливим у окремих випадках. З іншого боку, Web-технології не потребують інсталяції на клієнтські системи та є гранично багатоплатформними (достатньо вказати посилання на Web-сервер у будь-якому Web-браузері), що найбільш важливо для різних інженерних та адміністративних станцій. З іншого боку, продуктивність та надійність таких інтерфейсів нижче, що практично виключає їх використання на станціях оператору ТП.

OpenSCADA має гранично гнучку архітектуру, яка дозволяє створювати зовнішні інтерфейси, у тому числі й користувацькі, на будь-якій основі та смак. Наприклад, середовище конфігурації OpenSCADA доступне як на Qt-бібліотеці, так і на Web-основі.

У той-же час, незалежне створення реалізацій СВУ на різній основі може потягти за собою неможливість використання даних конфігурації однієї СВУ на іншій. Що незручно та обмежено з користувацького боку, а також витратно у плані реалізації та подальшої підтримки.

З метою запобігання цих проблем, а також створення у найкоротший термін повного спектру різних типів СВУ, засновано проект створення концепції СВУ. Результатом цього проекту став даний модуль рушія(моделі даних) СВУ, а також модулі безпосередньої візуалізації Vision та WebVision.

1 Призначення

Даний модуль рушія(моделі даних) СВУ призначено для формування логічної структури СВУ та виконання сеансів окремих екземплярів проектів СВУ. Також, модуль надає кінцевим візуалізаторам СВУ всі необхідні дані, як за посередництвом локальних механізмів взаємодії OpenSCADA, так і інтерфейсу управління OpenSCADA, для віддаленого доступу.

Фінальна версія цього модуля СВУ забезпечить:

Перелічимо можливості, які зможе та забезпечує СВУ, побудована на основі даного проекту:

  • три рівні складності у формуванні інтерфейсу візуалізації, які дозволяють органічно освоювати та застосовувати інструментарій за принципом — від простого до складного:
  1. формування з шаблонних кадрів, шляхом призначення динаміки та без графічної конфігурації;
  2. графічне формування нових кадрів, шляхом використання готових елементів візуалізації з бібліотеки — мнемосхеми;
  3. формування, у бібліотеці, нових: кадрів, шаблонних кадрів та елементів відображення.
  • побудова інтерфейсів візуалізації практично будь-якої складності (обмежену "дискретністю" функцій примітивів), починаючи від простих інтерфейсів моніторингу та, закінчуючи повноцінними ієрархічними інтерфейсами, що використовуються у SCADA системах;
  • надання різних способів формування та конфігурації користувацького інтерфейсу, заснованих на різних інтерфейсах графічного представлення (Qt, Web, ...), або-ж за посередництвом стандартного інтерфейсу управління OpenSCADA;
  • побудова та корекція інтерфейсу, призначення та зміна динаміки у процесі виконання;
  • побудова, на рівні користувача, нових шаблонних кадрів та формування спеціалізованих, під область застосування, бібліотек кадрів (наприклад, включення кадрів параметрів, графіків та інших елементів з ув'язкою їх один з другим), згідно до ідеї вторинного використання, накопичення та вдосконалення;
  • побудова нових користувацьких елементів візуалізації та формування спеціалізованих, під область застосування, бібліотек кадрів, згідно до ідеї вторинного використання, накопичення та вдосконалення;
  • опис логіки нових шаблонних кадрів та користувацьких елементів візуалізації як простими зв'язками, так і лаконічною, повноцінною мовою користувацького програмування;
  • можливість включення, до користувацьких елементів візуалізації, функцій (або кадрів обчислення функцій) об'єктної моделі OpenSCADA, практично зв'язуючи представлення з алгоритмом обчислення; наприклад, візуалізуючи бібліотеку моделей апаратів ТП, для подальшої візуальної побудови моделей ТП;
  • розподіл даних користувацьких інтерфейсів та інтерфейсів представлення цих даних, що дозволяє будувати інтерфейс користувача у одному середовищі, а виконувати у багатьох інших (Qt, Web, ...);
  • можливість підключення до виконуваного інтерфейсу для спостереження та корекції дій; наприклад, при навчанні операторів та контролю за його діями у реальному часі;
  • візуальна побудова різних схем з накладанням логічних зв'язків та подальшим централізованим виконанням у фоні — візуальна побудова та виконання математичних моделей, логічних схем, релейних схем та іншого;
  • надання, до OpenSCADA, функцій об'єктного API; може використовуватися для управління властивостями інтерфейсу візуалізації із користувацьких процедур;
  • побудова серверів для: кадрів, елементів візуалізації та проектів інтерфейсів візуалізації; з можливістю обслуговування множинних клієнтських підключень;
  • проста організація клієнтських станцій на різній основі (Qt, Web, ...), з підключенням до центрального серверу;
  • повноцінний механізм розподілу повноважень між користувачами, що дозволяє створювати та виконувати проекти з різними правами доступу до його компонентів;
  • гнучке формування правил сигналізацій та повідомлень, з урахуванням та підтримкою різних способів повідомлення;
  • підтримка користувацького формування палітри та шрифтових переваг інтерфейсу візуалізації, в стилях;
  • підтримка користувацького формування карт повідомлень під різне обладнання управління та переваги користувача;
  • підтримка профілів користувача, що дозволяють визначати різні властивості інтерфейсу візуалізації (гама кольорів, шрифтові особливості, переважні карти повідомлень);
  • гнучке зберігання та розповсюдження бібліотек віджетів, кадрів та проектів інтерфейсів візуалізації у БД, підтримуваних OpenSCADA; практично, користувачу треба тільки зареєструвати отриману БД з даними.


2 Конфігурація та формування інтерфейсів СВУ

Сам модуль не містить механізмів візуального формування інтерфейсів СВУ, такі інструменти можуть надаватися модулями кінцевої візуалізації СВУ, наприклад, він надається модулем Vision.

Хоча візуальних механізмів формування СВУ модулем не надається, для управління логічної структури надається механізм, реалізований на основі інтерфейсу управління OpenSCADA, а значить, доступний для використання у будь-якому конфігураторі OpenSCADA. Діалоги цього інтерфейсу розглянуто далі, у контексті розгляду архітектури модуля та його даних.

3 Архітектура

СВУ, загалом, може працювати у двох режимах — розробки та виконання. У режимі розробки формується інтерфейс СВУ та його компоненти, визначаються механізми взаємодії. У режимі виконання здійснюється формування інтерфейсу СВУ та відбувається взаємодія з кінцевим користувачем, на основі розроблених СВУ.

Інтерфейс СВУ формується з кадрів, кожний з яких, своєю чергою, формується з елементів примітивів або користувацьких елементів інтерфейсу. При цьому, користувацькі елементи інтерфейсу також формуються з примітивів або інших користувацьких елементів. Таким чином забезпечується ієрархічність та повторне використання вже розроблених компонентів.

Кадри та користувацькі елементи розташовуються у бібліотеках віджетів. З елементів цих бібліотек формуються проекти інтерфейсів кінцевої візуалізації СВУ. На основі-ж цих проектів формуються сеанси візуалізації.

Описану структуру СВУ приведено на рисунку.

VCA struct uk.png

Дана архітектура СВУ дозволяє реалізовувати підтримку трьох рівнів складності у процесі розробки інтерфейсів управління:

  • Формування інтерфейсу візуалізації та управління (ВУ) за допомогою бібліотеки шаблонних кадрів, шляхом розташування шаблонів кадрів до проекту та призначення динаміки.
  • Додатково до першого рівня здійснюється формування власних кадрів на основі бібліотеки похідних та базових віджетів. Можливе як пряме призначення динаміки у віджеті, так і подальше її призначення у проекті.
  • Додатково до другого рівня здійснюється самостійне формування довільних віджетів, нових шаблонних кадрів, та кадрів з використанням механізму опису логіки взаємодії та обробки повідомлень на мові користувацького програмування OpenSCADA.


3.1 Кадри та елементи відображення (віджети)

Кадр це вікно, яке безпосередньо надає інформацію користувачу у графічній та/або текстовій формі. Група взаємопов'язаних кадрів формує цілісний користувацький інтерфейс ВУ.

Вміст кадру формується з елементів відображення (віджетів). Віджети можуть бути базовими примітивами (різні елементарні фігури, текст, тренд та інше) та похідні, сформовані з базових або інших похідних віджетів. Всі віджети групуються за бібліотеками. У процесі роботи, користувач може формувати власні бібліотеки похідних віджетів.

Власне сам кадр також є віджетом, який використовується у ролі кінцевого елементу візуалізації. А це означає, що бібліотеки віджетів можуть зберігати і заготовки кадрів, та шаблони результуючих сторінок користувацького інтерфейсу.

Кадри та віджети є пасивними елементами, які зазвичай не містять зв'язків з динамікою та іншими кадрами, а тільки надають інформацію про властивості та характер динаміки(конфігурації), що підключається до властивостей. Активовані кадри, ті що містять посилання на динаміку та активні зв'язки, формують користувацький інтерфейс та зберігаються у проектах. У деяких випадках можливе пряме призначення динаміки у заготовках кадрів.

Похідні кадри/віджети можуть містити вкладені віджети, які можуть бути склеєні-зв'язані один з одним логікою, за допомогою мови користувацького програмування OpenSCADA.

VCA widget uk.png

Віджет є елементом, за посередництвом якого забезпечується:

  • візуалізація оперативної та архівної інформації ведення ТП;
  • сигналізація про порушення ведення ТП;
  • перемикання між кадрами ТП;
  • управління технологічним обладнанням та параметрами ведення ТП.

Налаштування та зв'язування віджетів здійснюється за посередництвом їх властивостей. Батьківський віджет, та віджети що містяться у ньому, можуть доповнюватися користувацькими властивостями. Надалі, користувацькі та статичні атрибути пов'язуються з властивостями вкладених віджетів, за посередництвом внутрішньої логіки. Для відображення динаміки (поточних та архівних даних) властивості віджетів динамізуються, тобто пов'язуються з атрибутами параметрів OpenSCADA або властивостями інших віджетів. Використання, для зв'язування вкладених віджетів внутрішньою логікою, мови користувацького програмування OpenSCADA знімає питання реалізації складної логіки візуалізації, забезпечуючи тим самим високу гнучкість. Практично, можна створювати повністю динамізовані кадри зі складними взаємозв'язками на рівні користувача.


3.2 Проект

Безпосередня конфігурація, та властивості кінцевого інтерфейсу візуалізації, містяться у проекті інтерфейсу візуалізації СВУ, яких може бути створено багато.

Кожний проект включає сторінки з бібліотек кадрів-віджетів. Для низки режимів, сама сторінка може включати у себе вкладені сторінки як незалежні від батьківської, так і з використанням батьківського у ролі шаблону. Шаблонні сторінки-віджети дозволяють гранично спростити процес створення однотипних кадрів простого моніторингу, інженером АСУ ТП або користувачем OpenSCADA. Прикладом таких однотипних кадрів можуть бути: групи контурів, групи графіків, протоколи та різні зведені таблиці. Мнемосхеми технологічних процесів рідко підпадають під таку схему та формуються у окремій сторінці-віджеті.

Сторінка, як і віджет на якому вона заснована, надає можливість прив'язки динаміки до описаних у ній властивостей — зв'язки, які можуть бути встановлені динамікою або константами. Крім того, зв'язування безпосередньо на рівні сторінки проекту є переважним, ніж здійснення цього на рівні віджетів бібліотек.

Приклад ієрархічного представлення компонентів проекту класичного інтерфейсу ВУ технологічного процесу, з описом виразів стандартних викликів, приведено на рисунку.

VCA prog tree uk.png

Передбачено наступні спеціальні властивості сторінок:

  • Контейнер — сторінка є контейнером вкладених сторінок.
  • Шаблон — сторінка є шаблоном вкладених сторінок.
  • Порожньо — порожня та неактивна сторінка. Ця властивість використовується спільно зі властивістю Контейнер, для організації логічних контейнерів сторінок.

На комбінаціях вищевказаних спеціальних властивостей сторінок реалізовано наступні їх типи:

  • Стандарт — стандартна сторінка (не встановлено жодної з властивостей), є повноцінною кінцевою сторінкою.
  • Контейнер — повноцінна сторінка з властивістю контейнера (Контейнер).
  • Логічний контейнер — логічний контейнер, фактично сам не є сторінкою (Контейнер|Порожньо), виконує роль проміжного та групуючого елементу у дереві сторінок.
  • Шаблон — сторінка-шаблон (Шаблон). Чиста шаблонна сторінка, використовується для опису загальних властивостей та довизначення їх у вкладених сторінках, у приватному порядку.
  • Контейнер та шаблон — сторінка шаблону та контейнер (Шаблон|Контейнер), поєднує функції шаблону та контейнеру.

На боці візуалізації (RunTime) побудовано логіку, що регулює яким чином відкривати сторінки, на основі наступних атрибутів базового елементу "Box":

  • pgOpen — ознака "Сторінка відкрита";
  • pgNoOpenProc — ознака "Виконувати сторінку навіть якщо вона не відкрита";
  • pgOpenSrc — містить адресу виджета, або сторінки, що відкрила поточну сторінку; у випадку вкладеного контейнерного віджета тут міститься адреса включеної сторінки; для відкриття сторінки із скрипта достатньо тут вказати адресу віджета-джерела відкриття;
  • pgGrp — група сторінок, використовується для зв'язки контейнерів сторінок зі сторінками, згідно загальної групи.

Логіка визначення способу відкриття сторінок працює наступним чином:

  • якщо сторінка має групу "main" або збігається з групою сторінки у головному вікні або немає сторінки на головному вікні, то відкривати сторінку у головному вікні;
  • якщо сторінка має групу, яка збігається з групою одного з контейнерів поточної сторінки, то відкрити у цьому контейнері;
  • якщо джерело відкриття сторінки збігається з потоковою сторінкою, то відкрити у вигляді додаткового вікна над потоковою сторінкою;
  • передати виклик на запит відкриття додатковим вікнам, з обробкою у кожного по першим трьом пунктам;
  • якщо ніхто з родинних вікон не відкрив нову сторінку то відкрити її як родинне вікно головного вікна.


3.3 Сеанс виконання проекту

Сеанс проекту це розгорнуте дерево проекту безпосереднього його виконання, що включає окреме завдання ієрархічного виконання процедур віджетів. Для кожного проекту може бути відкрито багато сеансів. Формування кінцевого інтерфейсу візуалізації здійснюється візуалізаторами, виходячи з даних сеансу проекту, після створення сеансу за запитом.

Між віджетами, на різних рівнях ієрархії, у кінцевому рахунку вибудовуються достатньо складні спадкові зв'язки, які визначаються можливістю використання одних віджетів іншими, починаючи з бібліотечного віджета та закінчуючи віджетом сеансу. Для роз'яснення цих особливостей взаємодії, на рисунку зображено вичерпну карту "використального" наслідування.

VCA map inher uk.png

На рівні сеансів, віджет містить об'єкт значень процедури обрахунку. Цей об'єкт ініціюється та використовується у випадку наявності самої процедури обчислення. У момент ініціалізації створюється перелік параметрів процедури та виконується її компіляція з цими параметрами, у модулі, що реалізує обрану мову програмування та з назвою результуючої процедури у вигляді закодованого повного ім'я виджета. Скомпільована функція підключається до об'єкту значень процедури обрахунку, а далі виконується її обчислення з періодом сеансу.

Обчислення та обробка віджету виконується у наступній послідовності:

  • обираються повідомлення, доступні на момент обчислення, з атрибуту "event" віджету;
  • повідомлення завантажуються до параметру "event" об'єкта обчислення;
  • до об'єкту обчислення завантажуються значення за вхідними зв'язками;
  • до об'єкту обчислення завантажуються значення спеціальних змінних (f_frq, f_start та f_stop);
  • до об'єкту обчислення завантажуються значення обраних параметрів віджету;
  • обчислення;
  • вивантаження значень об'єкту обчислення у обрані параметри віджету;
  • вивантаження повідомлень з параметру "event" об'єкта обчислення;
  • обробка повідомлень та передача необроблених на рівень вище.

Об'єкти сеансу успадковуються від абстрактного об'єкту "Widget" та використовують відповідні об'єкти проекту. Так, сеанс "Session" використовує проект "Project" та формує на його основі розгорнуте дерево. Сторінка проекту "Page" прямо використовується сторінкою сеансу "SessPage". Решта об'єктів "SessWdg" розгортаються відповідно до ієрархії елементів сторінки.

Додатково до стандартних властивостей абстрактного віджета "Widget", елементи сторінки та самі сторінки сеансу отримують властивості: зберігання об'єкту значень обчислювальної процедури, обрахунку процедур та механізм обробки повідомлень. Сторінки сеансу, додатково до всього, містять контейнер наступних за ієрархією сторінок. Сеанс, загалом, обчислюється з вказаною періодичністю та у послідовності:

  • "Сторінка верхнього рівня" -> "Сторінка нижнього рівня"
  • "Віджет нижнього рівня" -> "Віджет верхнього рівня"

Така політика дозволяє обходити сторінки відповідно до їх ієрархії, а повідомленням у віджетах "спливати" нагору за одну ітерацію.

Сеанси підтримують багатомовність на рівні інтерфейсу управління OpenSCADA, яка залежить від значень загальних атрибутів "lang" та "user", та які візуалізатор може встановлювати згідно до своєї мови. Ця функція вмикається динамічним перекладом повідомлень OpenSCADA.


3.4 Стилі

Відомо, що людина може мати індивідуальні особливості сприйняття графічної інформації. Якщо ці особливості не враховувати то можна отримати несприйняття та відторгнення користувача до інтерфейсу ВУ. Таке несприйняття та відторгнення може призвести до фатальних помилок при управлінні ТП, а також травмувати людину постійною роботою з інтерфейсом. У SCADA системах прийнято домовленості, які регламентують вимоги по створенню уніфікованого інтерфейсу ВУ, що нормально сприймається більшістю людей. При цьому, практично відсутнє врахування особливостей людей з деякими відхиленнями.

З метою врахувати цю обставину, та надати можливість централізовано та просто змінювати візуальні властивості інтерфейсу, проектом реалізується менеджер стилів інтерфейсу візуалізації.

Користувачем може бути створено багато стилів, кожний з яких буде зберігати кольорові, шрифтові та інші властивості елементів кадру. Проста зміна стилю дозволить швидко видозмінити інтерфейс ВУ, та можливість призначення індивідуального стилю до користувача дозволить врахувати його особливості.

Для реалізації цієї можливості, при створені кадрів, необхідно для властивостей кольору, шрифту та інших встановити параметр "Конфігурація" (таблиці у вкладці "Обробка") у значення "З стилю". А у параметрі "Конфігураційний шаблон" вказати ідентифікатор поля стиля. Далі, це поле автоматично з'явиться у менеджері стилів та його можна буде там змінювати. Менеджер стилів доступний на сторінці конфігурації проекту у вкладці "Стилі". На цій вкладці можна стилі створювати, видаляти та змінювати, видаляти їх поля.

Рисунок. Вкладка "Стилі" сторінки конфігурації проекту.

Загалом, стилі доступні починаючи з рівня проектів. На рівні бібліотек віджетів можна тільки визначати поля стилів у віджетів. На рівні проекту, при виборі стиля, включається робота зі стилями, що передбачає доступ до полів стилів замість безпосередніх значень атрибутів. Фактично, це означає, що при читанні або записі атрибуту віджету, вказані операції будуть здійснюватися над відповідним полем обраного стилю.

При запуску проекту на виконання буде використано встановлений у проекті стиль. Надалі, користувач може обрати стиль з переліку доступних. Обраний користувачем стиль буде збережено та використано при наступному запуску проекту.


3.5 Повідомлення, їх оброка та карти повідомлень

Враховуючи спектр задач, для яких може використовуватися OpenSCADA, треба передбачити механізм управління інтерактивними користувацькими повідомленнями. Це пов'язано з тим, що при вирішені окремих задач вбудованих систем, пристрої вводу та управління можуть значно відрізнятися. Власне, достатньо поглянути на звичайну офісну клавіатуру та клавіатуру ноутбука, щоб зняти будь-які сумніви у необхідності менеджеру повідомлень.

Менеджер повідомлень має працювати використовуючи карти повідомлень. Карта повідомлень — це перелік іменованих повідомлень з указанням його походження. Походженням повідомлення може бути клавіатура, маніпулятор миші, джойстик та інше. При виникненні повідомлення менеджер повідомлень шукає його у активній карті та співставляє з ім'ям повідомлення. Співставлене ім'я повідомлення поміщається у чергу на обробку. Віджети, у цьому випадку, повинні обробляти отриману чергу повідомлень.

Активна карта повідомлень вказується у профілі кожного користувача або встановлюється по замовченню, у планах.

Загалом, передбачено чотири типи повідомлень:

  • повідомлення образів-примітивів СВУ (префікс: ws_), наприклад, повідомлення натискання екранної кнопки — "ws_BtPress";
  • клавішні повідомлення (префікс: key_) — всі повідомлення від клавіатури та миші у вигляді "key_presAlt1";
  • користувацькі повідомлення (префікс: usr_), генеруються користувачем у процедурах обрахунку віджетів;
  • маповані повідомлення (префікс: map_) — повідомлення, отримані з карти повідомлень, у планах.

Саме повідомлення надає недостатньо інформації, особливо якщо його обробка відбувається на рівнях вище. Для однозначної ідентифікації повідомлення та його джерела, повідомлення, загалом, записується наступним чином: "ws_BtPress:/curtime". Де:

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 Друк екрану — "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_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}". Де:

  • event — очікуване повідомлення;
  • evSrc — шлях вкладеного віджета-джерела повідомлення;
  • com — команда сеансу;
  • prm — параметр команди.

Реалізовано наступні команди:

  • open — відкриття сторінки; сторінка, що відкривається, вказується у параметрі prm як прямо, так і у вигляді шаблону, наприклад — /pg_so/1/*/*;
  • next — відкриття наступної сторінки; сторінка, що відкривається, вказується у параметрі prm, у вигляді шаблону, наприклад: /pg_so/*/*/$;
  • prev — відкриття попередньої сторінки; сторінка, що відкривається, вказується у параметрі prm, у вигляді шаблону, наприклад: /pg_so/*/*/$.

Спеціальні символи шаблону розшифровуються наступним чином:

  • pg_so — пряме ім'я потрібної-статичної сторінки (з префіксом), потребує обов'язкової відповідності та використовується для ідентифікації попередньої відкритої сторінки;
  • 1 — ім'я та місце нової сторінки у загальному шляху (без префіксу);
  • * — сторінка береться з ім'я попередньої відкритої сторінки або підставляється перша доступна сторінка, якщо попередня відкрита відсутня;
  • $ — вказує на місце відкритої сторінки, відносно якої треба шукати наступну або попередню.

Для правильного розуміння роботи механізму шаблонів, при виборі сторінки, приведемо декілька реальних прикладів:

  • Перемикання об'єкту сигналізації:
Початково: /pg_so/pg_1/pg_mn/pg_1
Команда: open:/pg_so/2/*/*
Результат: /pg_so/pg_2/pg_mn/pg_1
  • Перемикання виду відображення:
Початково: /pg_so/pg_1/pg_mn/pg_1
Команда: open:/pg_so/*/gkadr/*
Результат: /pg_so/pg_1/pg_gkadr/pg_1
  • Наступна/попередня сторінка виду відображення:
Початково: /pg_so/pg_1/pg_mn/pg_1
Команда: next:/pg_so/*/*/$
Результат: /pg_so/pg_1/pg_mn/pg_2

У якості прикладу, наведемо сценарій забезпечення роботи головної сторінки інтерфейсу користувача:

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;


3.6 Сигналізація

Важливим елементом будь-якого інтерфейсу візуалізації є повідомлення користувача про порушення — сигналізація. Для спрощення сприйняття, а також через тісний зв'язок візуалізації та повідомлення (як правило, повідомлення доповнює візуалізацію) вирішено інтегрувати інтерфейс повідомлення у інтерфейс візуалізації. Для цього, у всіх віджетах, передбачається два додаткових атрибути рівня сеансу: "alarm" та "alarmSt". Атрибут "alarm" використовується для формування сигналу віджетом згідно до його логіки, а атрибут "alarmSt" використовується для контролю за фактом сигналізації гілки дерева сеансу.

Атрибут "alarm" є рядком, який має наступний формат: "{lev}|{categ}|{message}|{type}|{tp_arg}"
Де:

  • lev — рівень сигналізації: число від 0 до 255;
  • categ — категорія сигналу: параметр підсистеми збору, об'єкт, шлях або комбінація;
  • message — повідомлення сигналізації;
  • type — типи повідомлення, вказуються у вигляді цілого числа (0...7), що містять ознаки способів повідомлень; типові способи повідомлення:
    • 1 — візуальне;
    • 2 — гудок, часто відбувається через PC-speaker;
    • 4 — звуковий сигнал з файлу звуку або синтез мови; якщо у tp_arg вказано ім'я ресурсу звукового файлу, то відтворюється саме він, інакше виконується синтез мови з тексту, вказаного у message.
  • tp_arg — аргумент типу; часто використовується для прямого вказання ресурсу звукового сигналу — файл звукового формату, при здійснені звукової сигналізації.

Атрибут "alarmSt" є цілим числом, яке відображає максимальний рівень сигналу та факт квітування гілки дерева сеансу. Формат числа має наступний вигляд:

  • перший байт (0...255) характеризує рівень сигналу гілки;
  • другий байт вказує тип повідомлення, так як і у атрибуті "alarm";
  • третій байт вказує тип несквітованого повідомлення, так як і у атрибуті "alarm";
  • четвертий байт має спеціальне значення, яке визначається окремими бітами:
    • біт 0 — вказує, встановленням, на факт квітування повідомлень у першому байті;
    • біт 1 — вказує, при встановленні його та бита 0, на повернення квітування — включення повідомлення.

Формування сигналу та отримання його візуалізатором.
Формування сигналу здійснюється самим віджетом, шляхом встановлення власного атрибуту "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 або "ревуном", довільним звуком, синтезованою мовою та інше.

Для здійснення такої можливості, зовнішні способи повідомлення, та відповідні до них типи повідомлення, вільно описуються для серверу візуалізації та самого візуалізатору. На боці серверу візуалізації описується формування/отримання ресурсу повідомлення та саме повідомлення. На боці візуалізатору описується повідомлення згідно ресурсам серверу візуалізації.

Опис правил та сценаріїв зовнішнього повідомлення здійснюється за допомогою користувацьких атрибутів текстового типу для сторінок проекту візуалізації, які застосовуються при відкритті цих сторінок. Тобто, потенційно, для кожної відкриваної сторінки можна описати власні правила повідомлення, хоча, зазвичай достатньо та описуються загальні правила повідомлення на головній сторінці проекту — сторінці, яка відкривається одноразово та не закривається при роботі:

  • Для серверу/рушія візуалізації, атрибутом "notify{N}" у форматі:
//flags=notify[{DL}][|resource[|queue[|qMergeMess]]];
if(doRes) { Текст команди формування ресурсу. }
if(doNtf) { Текст команди повідомлення. }
  • Для візуалізатору, атрибутом "notifyVis[Vision|WebVision]{N}" у форматі:
//flags=notify[{DL}][|resource[|queue[|quietanceRet]]];
//name={Ім'я повідомника}
//ico={Ім'я іконки}
{ Текст команди повідомлення для будь-якого або конкретного візуалізатору. }

Прапорці:

  • notify[{DL}] — включає повідомлення з повтором через час DL, якщо вказано; для DL = 0 повтор здійснюється одразу.
  • resource — запитувати-формувати (примусово) ресурс повідомлення у сервера візуалізації, може бути звуковим файлом, текстом або іншими даними формування повідомлення.
  • queue — ресурси повідомлення визначаються не тільки за глобальною ознакою порушення та квітації, а й згідно до пріоритетної черги джерел повідомлення-ресурсів. Черга формується на боці серверу візуалізації, а для візуалізаторів вказується необхідність роботи з нею при запиті ресурсів.
  • qMergeMess — поєднувати повідомлення у черзі за рівністю повідомлення.
  • quietanceRet — можливість відкликання-повернення квітації візуалізатору, тобто, по факту — зворотнього включення повідомлення.

Змінні обміну:

  • en[0,1] — повідомлення ввімкнути (1) або вимкнути (0);
  • doNtf[0,1] — виклик сценарію повідомлення;
  • doRes[0,1] — виклик сценарію формування ресурсу;
  • res — вміст або ім'я файлу з вмістом ресурсу, для зовнішніх сценаріїв;
  • mess — повідомлення-параметри формування ресурсу або повідомлення.
  • lang — мова поточного користувача або системи.

Приклади та коментарі до роботи типових способів повідомлень:

  • Бузер на боці візуалізатору або серверу візуалізації:
  • alarm = "10|Prm||0x02"
  • notifyVisVision1 | notify1 =
//flags=notify
if(en) SYS.system("beep -f 1000 -l 1000000 &", true);
else if((beepPID=SYS.system("pidof beep")).toInt()) SYS.system("kill "+beepPID); 
  • notifyVisVision1 | notify1 =
#!/bin/sh
#flags=notify
if test $en = 1; then
	beep -f 1000 -l 1000000 &
else
	beepPID=$(pidof beep)
	if test "x$beepPID" != "x"; then kill $beepPID; fi
fi 
  • Повторюване програвання готового звукового файлу, одного загального, на боці візуалізатору або серверу візуалізації:
  • alarm = "10|Prm||0x04"
  • notify2 | notifyVisVision2 =
//flags=notify2
if(en) SYS.system("play -q alarm.ogg");
  • notify2 | notifyVisVision2 =
#!/bin/sh
#flags=notify2
if test $en = 1; then play -q alarm.ogg; fi
  • Програвання індивідуального, для джерела, звукового файлу, на боці візуалізатору:
  • alarm = "10|Prm||0x04|res:al_prm1"
  • notify2 =
//flags=queue
  • notifyVisVision2 =
//flags=notify2|queue
if(doNtf && en && res.length) {
  SYS.fileWrite("tmpPlay", res);
  SYS.system("play -q tmpPlay");
  SYS.fileRemove("tmpPlay");
}
  • notifyVisVision2 =
#!/bin/sh
#flags=notify2|queue
if test $doNtf = 1 -a $en = 1 -a -s $res; then play -q $res; fi
  • Синтез мови індивідуального повідомлення, для джерела, на боці візуалізатору:
  • alarm = "10|Prm|Текстове повідомлення синтезу мови|0x04"
  • notify2 =
//flags=queue
  • notifyVisVision2 =
//flags=notify2|queue
if(doNtf && en && mess.length) {
  SYS.fileWrite("tmpForSpeech", mess);
  SYS.system("festival --tts tmpForSpeech");
  SYS.fileRemove("tmpForSpeech");
}
  • notifyVisVision2 =
#!/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
  • Приготування звукового файлу, одного загального, та його програвання на боці візуалізатору або серверу візуалізації:
  • alarm = "10|Prm||0x04"
  • notify2 =
//flags=notify2|resource
if(doRes) res = SYS.fileRead("alarm.ogg");  //Вставити сюди інший метод генерації
if(doNtf && en && res.length) {
  SYS.fileWrite("tmpPlay", res);
  SYS.system("play -q tmpPlay");
  SYS.fileRemove("tmpPlay");
}
  • notify2 =
#!/bin/sh
#flags=notify2|resource
if test $doRes = 1; then cp -f alarm.ogg $res; fi  #Вставити сюди інший метод генерації
if test $doNtf = 1 -a $en = 1 -a -s $res; then play -q $res; fi
  • notifyVisVision2 =
//flags=notify2|resource
if(en && res.length) {
  SYS.fileWrite("tmpPlay", res);
  SYS.system("play -q tmpPlay");
  SYS.fileRemove("tmpPlay");
}
  • notifyVisVision2 =
#!/bin/sh
#flags=notify2|resource
if test $en = 1 -a -s $res; then play -q $res; fi
  • Приготування індивідуального, для джерела повідомлення, звукового файлу через синтез мови, на боці візуалізатору або серверу візуалізації:
  • alarm = "10|Prm|Текстове повідомлення синтезу мови|0x04"
  • notify2 =
//flags=notify2|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");
}
  • notify2 =
#!/bin/sh
#flags=notify2|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
  • notifyVisVision2 =
//flags=notify2|queue
if(en && res.length) {
 SYS.fileWrite("tmpPlay", res);
 SYS.system("play -q tmpPlay");
 SYS.fileRemove("tmpPlay");
}
  • notifyVisVision2 =
#!/bin/sh
#flags=notify2|queue
if test $en = 1 -a -s $res; then play -q $res; fi


3.7 Управління правами

Для поділу доступу до інтерфейсу ВУ та його складовим, кожний віджет містить інформацію про власника, його групи та права доступу. Права доступу записуються у вигляді тріади: "{користувач}{група[,група1,групаN]}{інші}", де кожний елемент складається з двох ознак доступу, для який прийнята наступна інтерпретація:

  • r — право на перегляд віджету;
  • w — право на контроль над віджетом.

У режимі розробки використовується проста схема доступу "root.UI:RWRWR_", що означає — всі користувачі можуть відкривати та переглядати бібліотеки, їх компоненти та проекти; а редагувати можуть всі користувачі групи "UI" (користувацькі інтерфейси).

У режимі виконання працюють права, описані у компонентах інтерфейсу, які передбачають можливість наслідування власника та прав, зверху додолу. Причому, по замовченню, наслідування включено у кожному віджеті, що означає — вони отримають власника та права проекту. У той-же час, пряме встановлення прав складеного віджету розповсюдить їх на всі компоненти цього віджета.


3.8 Зв'язування з динамікою

Для надання до інтерфейсу візуалізації актуальних даних, повинні використовуватися дані підсистеми "Збір даних (DAQ)". Природа цих даних наступна:

  1. параметри, що містять деяку кількість атрибутів;
  2. атрибути параметру можуть надавати дані п'яти типів: Логічний, Цілий, Реальний, Рядок та Об'єкт;
  3. атрибути параметру можуть мати архів (історію);
  4. атрибути параметру можуть бути на читання, запис та з повним доступом.

Враховуючи перший пункт, треба забезпечити можливість групового призначення посилання. Для цього використовуємо концепцію логічного рівня.

Згідно до пункту 2, зв'язки забезпечують прозоре перетворення типів та не потребують спеціальної конфігурації.

Для задоволення можливості доступу до архівам, згідно до пункту 3, зв'язки виконують перевірку типу атрибуту та, у випадку підключення до "Адреси", до значення поміщається адреса зв'язку.

У термінах СВУ, динамічні зв'язки та конфігурація динаміки є одним процесом, для опису конфігурації якого передбачено вкладку "Обробка" віджетів. Вкладка містить таблицю конфігурації властивостей атрибутів та текст процедури обчислення віджету.

Рисунок. Вкладка "Обробка" сторінки конфігурації віджета.

Крім полів конфігурації атрибутів, у таблиці передбачається стовпчик "Обробка", для вибіркового використання атрибутів у обчислювальній процедурі віджета, та стовпчика "Конфігурація", "Конфігураційний шаблон" для опису конфігурації зв'язків.

Якщо у стовпчику "Обробка" стоїть true, то у обчислювальній процедурі стає доступною змінна {ідентифікатор віджета}_{ідентифікатор атрибуту}, наприклад cw_value.

Стовпчик "Конфігурація" дозволяє вказати тип зв'язку атрибуту віджета:

  • Постійна — у вкладці зв'язків віджету з'являється поле визначення постійної, наприклад, особливого кольору або заголовку шаблонних кадрів.
  • Вхідний зв'язок — зв'язок з динамікою тільки для читання.
  • Вихідний зв'язок — зв'язок з динамікою тільки для запису.
  • Повний зв'язок — повний зв'язок з динамікою, читання та запис.
  • Зі стиля — брати значення зі стиля проекту.

Стовпчик "Конфігураційний шаблон" дозволяє зв'язати групи динамічних атрибутів. Наприклад, це можуть бути різні типи параметрів підсистеми "DAQ" та інші віджети інтерфейсу. При коректному формуванні цього поля працює механізм автоматичного призначення атрибутів, при визначені тільки параметру підсистеми "DAQ" або віджету інтерфейсу, що спрощує та прискорює процес конфігурації. Значення цього стовпчика має наступний формат:

  • Для постійної: пряме значення атрибуту.
  • Для зв'язку: "{параметр}|{ідентифікатор}", де:
    • параметр — група атрибутів;
    • ідентифікатор — ідентифікатор атрибуту; саме значення у цьому полі співставляється з атрибутами параметрів DAQ після указання групового зв'язку, при автоматичному зв'язувані;
  • Для стиля: ідентифікатор-ім'я поля стиля.

Встановлення зв'язків може бути декількох типів, який визначається префіксом:

  • val: — Пряме завантаження значення через механізм зв'язків. Наприклад, зв'язок "val:100" завантажує значення 100 до атрибуту віджета. Часто використовується у випадку відсутності кінцевої точки зв'язку, з метою прямого встановлення значення.
  • prm: — Зв'язок на атрибут параметру або параметр, загалом, для групи атрибутів підсистеми "Збір даних". Наприклад, зв'язок "prm:/LogicLev/experiment/Pi/var" здійснює доступ атрибуту віджета до атрибуту параметра підсистеми "Збір даних". Знак "(+)", у кінці адреси, вказує на вдалу лінковку та присутність цільового об'єкту. Для атрибутів об'єктного типу допустимий ієрархічний доступ до конкретної властивості об'єкту, шляхом вказання її шляху через символ '#', наприклад: "prm:/LogicLev/experiment/Pi/var#pr1/pr2".
  • wdg: — Зв'язок на атрибут іншого віджета або віджет, загалом, для групи атрибутів. Наприклад, зв'язок "wdg:/ses_AGLKS/pg_so/pg_1/pg_ggraph/pg_1/a_bordColor" здійснює доступ атрибуту одного віджету до атрибуту іншого. Підтримуються як абсолютні, так і відносні шляхи зв'язків. Точкою відліку адреси абсолютного зв'язку виступає об'єкт кореня модуля "VCAEngine", що означає — першим елементом абсолютної адреси є ідентифікатор сеансу або проекту. Перший елемент, на боці сеансу, опускається, тому зв'язки, встановлені у проекті, там працюють. Відносні зв'язки беруть відлік від віджету, де зв'язок вказано. Спеціальним елементом відносного зв'язку є елемент вищестоящого вузла "..".
  • arh: — Особливий тип зв'язку, доступний тільки для окремого атрибуту типу "Адреса", який дозволяє підключитися прямо до архіву значень ("arh:CPU_load"). Може бути корисний для вказання архіву у якості джерела даних примітиву "Діаграма".

Обробка зв'язків відбувається з періодичністю обчислення віджету, у порядку:

  • отримання даних вхідних зв'язків;
  • виконання обчислення процедури віджету;
  • передача значень за вихідними зв'язками.

На рисунку представлено вкладку зв'язків з груповим призначенням атрибутів, шляхом указання тільки параметру. На наступному рисунку представлено індивідуальне призначення атрибутів.

Рисунок. Вкладка "Зв'язки" сторінки конфігурації віджету з груповим призначенням атрибутів шляхом вказання тільки параметру.
Рисунок. Вкладка "Зв'язки" сторінки конфігурації віджету з індивідуальним призначенням атрибутів.

При розташуванні віджета до контейнеру віджетів всі зв'язки початкового віджета додаються до переліку результуючих зв'язків контейнеру віджетів, однак, тільки на глибину у один рівень вкладення.

Рисунок. Вкладка "Зв'язки" сторінки конфігурації контейнеру віджетів, що включає віджети зі зв'язками.

З вищесказаного видно, що зв'язки встановлюються користувачем у процесі конфігурації інтерфейсу. Однак, для надання можливості створення кадрів загального призначення з функцією надання деталізованих даних різних джерел одного типу, потрібен механізм динамічного встановлення зв'язків. Такий механізм передбачається:

  • резервуванням ключового ідентифікатору "<page>" для групи атрибутів зв'язків у кадрів загального призначення;
  • динамічним призначенням зв'язків з ідентифікатором "<page>", у процесі відкриття кадру загального призначення за сигналом від іншого віджета.

Розглянемо приклад, коли є кадр загального призначення "Панель контролю графіком" та багато "Графіків" на різних кадрах. "Панель контролю графіком" має зв'язки з шаблонами:

  • tSek -> "<page>|tSek"
  • tSize -> "<page>|tSize"
  • trcPer -> "<page>|trcPer"
  • valArch -> "<page>|valArch"

При цьому, кожний віджет "Графік" має атрибути "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


3.9 Примітиви віджетів

Будь-який наново створюваний віджет засновується на одному з декількох примітивів — кінцевому елементі візуалізації, шляхом встановлення родинних зв'язків як прямо на примітив, так і посередництвом декільком проміжних користувацьких віджетів. Кожний з примітивів містить механізм моделі даних. Екземпляр віджету зберігає значення властивостей власної конфігурації примітиву.

До завдань інтерфейсу візуалізації входить підтримка та робота з моделлю даних примітивів віджетів. Примітиви віджетів повинні бути ретельно опрацьовані та уніфіковані, з метою охопити як можна більше можливостей у як можна меншій кількості слабко пов'язаних один з одним, по призначенню, примітивів.

Таблиця. Бібліотека примітивів віджетів — базові елементи відображення

Ідентифікатор Найменування Функція
ElFigure Елементарна графічна фігура

Примітив є основою відмальовки елементарних графічних фігур зі всілякими комбінаціями їх у одному об'єкті. Передбачається підтримка наступних елементарних фігур:

  • Лінія.
  • Дуга.
  • Крива Без'є.
  • Заливка замкненого простору.

Для всіх фігур, що містяться у віджеті, встановлюються єдині властивості товщини, кольору та інше, також, передбачається можливість указання вищеперелічених атрибутів для кожної фігури окремо та їх динамізація.

FormEl Елемент форми

Включає підтримку стандартних компонентів форми:

  • Редагування рядку.
  • Редагування тексту.
  • Прапорець.
  • Кнопка.
  • Вибір з переліку.
  • Перелік.
  • Дерево.
  • Таблиця.
  • Слайдер.
  • Стрічка прокрутки.
Text Текст Елемент тексту-мітка. Характеризується типом шрифту, кольором, орієнтацією та вирівнюванням. Передбачається підтримка аргументів.
Media Медіа Елемент відображення растрових та векторних зображень різних форматів, програвання анімованих зображень, програвання аудіо-фрагментів та перегляд відео-фрагментів.
Diagram Діаграма Елемент діаграми з підтримкою можливості відображення декількох потоків у реальному часі для: трендів (часових графіків), частотного спектру, XY діаграм.
Protocol Протокол Елемент протоколу — візуалізатор повідомлень програми, з підтримкою декількох режимів роботи.
Document Документ Елемент формування звітів, журналів та іншої документації на основі доступних даних.
Box Контейнер Містить механізм розташування-включення інших віджетів для формування нових, більш складних, віджетів та сторінок кінцевої візуалізації.
Function, у планах Функція API об'єктної моделі OpenSCADA Невізуальний віджет, на боці виконання, що дозволяє включати обчислювальні функції об'єктної моделі OpenSCADA до СВУ.

Таблиця. Загальний набір властивостей/атрибутів віджету

Ідентифікатор Ім'я Номер Значення
id Ідентифікатор - Ідентифікатор елементу. Атрибут тільки для читання, прикликаний надати інформацію про ідентифікатор елементу.
path Путь - Шлях до цього віджету. Атрибут тільки для читання та надання вичерпної інформації про розташування елементу.
parent Батько - Шлях до батьківського віджету. Атрибут тільки для читання та надання інформації про розташування предку від якого успадковано віджет.
owner Власник - Власник та групи віджету, у вигляді "{власник}:{группа[,группа2,группаN]}", по замовченню "root:UI".
perm Доступ -

Права доступу до віджету, у вигляді "{користувач}{групи}{інші}" плюс ознака наслідування, що вмикає наслідування власника та його прав від вищестоящого віджету.
Де "користувач", "групи" та "інші" це:

  • "__" — немає доступу;
  • "R_" — тільки читання;
  • "RW" — читання та запис.

По замовченню 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}".
Де:

  • "ItName" — ім'я елементу;
  • "Signal" — ім'я сигналу, що формується при обрані: "usr_{Signal}".
evProc Обробка повідомлень -

Атрибут зберігання сценарію обробки повідомлень безпосереднього управління користувацьким інтерфейсом. Сценарій представляє собою перелік команд інтерфейсу візуалізації, що генеруються при надходженні повідомлення (атрибут event). Пряма обробка повідомлень для управління сторінками у вигляді: "{event}:{evSrc}:{com}:{prm}". Де:

  • "event" — очікуване повідомлення;
  • "evSrc" — джерело повідомлення;
  • "com" — команда сеансу: open, next, prev;
  • "prm" — параметр команди, де використовується:
    • pg_so — пряме ім'я бажаної сторінки, з префіксом;
    • 1 — ім'я нової сторінки у загальному шляху, без префіксу;
    • * — ім'я сторінки береться з ім'я попередньої сторінки;
    • $ — вказує на місце, відносно якого відкривається сторінка.

Приклади:

  • 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
Додаткові атрибути елементів, поміщених до проекту у ролі сторінки.
pgOpen Сторінка: відкрита -

Ознака "Сторінка відкрита".

* Модифікація з сеансу здійснює негайне відкриття/закриття даної сторінки.
pgNoOpenProc Сторінка: обробляти закритою - Ознака "Виконувати сторінку навіть якщо вона закрита".
pgOpenSrc Сторінка: джерело відкриття 3

Повня адреса сторінки, що відкрила дану.

* Запис/очищення адреси віджету (ініціатору відкриття), здійснює негайне відкриття/закриття сторінки. У випадку запису адреси, та виконання інших умов, здійснюється динамічне зв'язування поточного віджету з ініціатором.
pgGrp Сторінка: група 4 Група сторінок.
Додаткові атрибути режиму виконання — сеансу.
(Віртуальні атрибути не доступні у процедурі віджету)
event Повідомлення - Спеціальний атрибут збору повідомлень віджету у переліку, поділеному новим рядком. Доступ до атрибуту захищено критичною секцією для запобігання втрати повідомлень. Атрибут завжди доступний у процедурі віджету.
load Завантаження -1 Віртуальна команда групового завантаження даних.
focus Фокус -2 Спеціальний атрибут індикації факту отримання фокусу, активним віджетом. Атрибут цього віджету та вкладених віджетів доступний у процедурах віджету.
perm Доступ -3 Віртуальний атрибут прав активного користувача на перегляд та контроль над віджетом.
* — Спеціальна функція атрибуту віджета, виконувана у сеансі проекту при користувацькій модифікації.

Рушій середовища візуалізації передбачає активацію атрибутів, специфічних до візуалізатору. Процес активації здійснюється при відкритті сеансу візуалізації проекту та передбачає, у цьому проекті: створення специфічного атрибуту з вказаними властивостями, якщо він відсутній, та активацію відстеження його модифікації рушієм середовища візуалізації, як для атрибутів формування образів примітивів. З переліком специфічних до візуалізатора атрибутів можна ознайомитися у документації відповідного візуалізатора.

3.9.1 Елементарна графічна фігура (ElFigure)

Примітив є основою у відмальовці елементарних графічних фігур з різноманітною їх комбінацією у одному об'єкті. Враховуючи широкий спектр можливих фігур, які повинен підтримувати примітив, та, у цей-же час, бути достатньо простим у використанні та, по можливості, у реалізації, було вирішено обмежити перелік базових фігур, використаних для побудови результуючих графічних об'єктів, до таких: лінія, дуга, крива Без'є та заливка замкнених контурів. Ґрунтуючись вже на цих базових фігурах, можна будувати довільні фігури, комбінуючи базові. У рамках примітиву існує можливість завдання прозорості кольору у діапазоні [0...255], де '0' — повна прозорість.

Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елементарна фігура (ElFigure)"

Ідентифікатор Ім'я Номер Значення
lineWdth Лінія: ширина 20 Ширина лінії.
lineClr Лінія: колір 21

Ім'я кольору у вигляді "{color}[-{alpha}]", де:

  • "color" — стандартне ім'я кольору або його числове представлення з трьох шістнадцяткових чисел окремих кольорів "#RRGGBB";
  • "alpha" — рівень альфа-каналу [0...255], де 0 — повністю прозорий.

Приклади:

  • "red" — суцільний червоний колір;
  • "#FF0000" — суцільний червоний колір у цифровому коді;
  • "red-127" — напівпрозорий червоний колір.
lineStyle Лінія: стиль 22 Стиль лінії: суцільна, пунктир, точкова.
bordWdth Границя: ширина 23 Ширина бордюру лінії. Нульова ширина вказує на відсутність бордюру.
bordClr Границя: колір 24 Колір бордюру (деталі у атрибуті 21).
fillColor Заповнення: колір 25 Колір заливки (деталі у атрибуті 21).
fillImg Заповнення: зображення 26

Ім'я зображення у вигляді "[{src}:]{name}", де:

  • "src" — джерело зображення:
    • file — прямо з локального файлу за шляхом;
    • res — з таблиці mime ресурсів БД.
  • "name" — шлях файлу або ідентифікатор mime-ресурсу.

Приклади:

  • "res:backLogo" — з таблиці mime ресурсів БД для ідентифікатору "backLogo";
  • "backLogo" — як і попередній;
  • "file:/var/tmp/backLogo.png" — з локального файлу за шляхом "/var/tmp/backLogo.png".
orient Кут повороту 28 Кут повороту вмісту виджета.
mirror Віддзеркалення 29 Віддзеркалення вмісту віджету, наразі обмежене.
elLst Перелік елементів 27

Перелік графічних елементів у форматі:

  • Лінія. Загальна форма запису у переліку, для статичних та динамічних параметрів (можуть змішуватися):
"line:({x}|{y}):({x}|{y})[:{width}[:{color}[:{bord_w}[:{bord_clr}[:{line_stl}]]]]]"
"line:{p1}:{p2}[:w{n}[:c{n}[:w{n}[:c{n}[:s{n}]]]]]"
  • Дуга. Загальна форма запису у переліку, для статичних та динамічних параметрів (можуть змішуватися):
"arc:({x}|{y}):({x}|{y}):({x}|{y}):({x}|{y}):({x}|{y})[:{width}[:{color}[:{bord_w}[:{bord_clr}[:{line_stl}]]]]]"
"arc:{p1}:{p2}:{p3}:{p4}:{p5}[:w{n}[:c{n}[:w{n}[:c{n}[:s{n}]]]]]"
VCA arc.png
p1, p2 — початкова та кінцева точка еліптичної дуги, відповідно;
p3 — центр дуги;
p4 — перший радіус;
p5 — другий радіус.
  • Крива Без'є. Загальна форма запису у переліку, для статичних та динамічних параметрів (можуть змішуватися):
"bezier:({x}|{y}):({x}|{y}):({x}|{y}):({x}|{y})[:{width}[:{color}[:{bord_w}[:{bord_clr}[:{line_stl}]]]]]"
"bezier:{p1}:{p2}:{p3}:{p4}[:w{n}[:c{n}[:w{n}[:c{n}[:s{n}]]]]]"
  • Заливка. Загальна форма запису у переліку, для статичних та динамічних параметрів (можуть змішуватися):
"fill:({x}|{y}):({x}|{y}):...:({x}|{y})[:{fill_clr}[:{fill_img}]]"
"fill:{p1}:{p2}:...:{pN}[:c{n}[:i{n}]]"

Де:

x, y — пряма точка (x,y), координати у пікселях з плаваючою точкою;
p1 ... pN — динамічна точка 1...N;
width, bord_w — пряма ширина лінії та бордюру у пікселях з плаваючою точкою;
w{n} — динамічна ширина 'n';
color, bord_clr, fill_clr — прямий колір лінії, бордюру та заповнення, у вигляді назви або 32-бітного коду з альфа: {ім'я}[-{AAA}], #RRGGBB-AAA;
c{n} — динамічний колір 'n';
line_stl — прямий стиль лінії: 0-Суцільна, 1-Пунктирна, 2-Точкова;
s{n} — динамічний стиль 'n';
fill_img — пряме зображення заповнення у виді "[{src}%3A]{name}", де:
"src" — джерело зображення:
file — безпосередньо з локального файлу за шляхом;
res — з таблиці mime-ресурсів БД.
"name" — шлях файлу або ідентифікатор mime-ресурсу.
i{n} — динамічне зображення заповнення 'n'.

Наприклад:

  • line:(50|25):(90.5|25):2:yellow:3:green:2
  • arc:(25|50):(25|50):1:4:(25|50)::#000000-0
  • fill:(25|50):(25|50):c2:i2
  • fill:(50|25):(90.5|25):(90|50):(50|50):#d3d3d3:h_31
Атрибути кожної точки з переліку графічних фігур elLst
p{n}x Точка {n}:x 30+n*6 Координата 'x' точки n.
p{n}y Точка {n}:y 30+n*6+1 Координата 'y' точки n.
w{n} Ширина {n} 30+n*6+2 Ширина n.
с{n} Колір {n} 30+n*6+3 Колір n (деталі у атрибуті 21).
i{n} Зображення {n} 30+n*6+4 Зображення n (деталі у атрибуті 26).
s{n} Стиль {n} 30+n*6+5 Стиль n.

3.9.2 Елемент форми (FormEl)

Примітив, призначений для надання, у розпорядження користувача, стандартних елементів форми. Загальний перелік атрибутів залежить від типу елементу.

Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елемент форми (FormEl)"

Ідентифікатор Ім'я Номер Значення
elType Тип елементу 20 Тип елементу, від значення якого залежить перелік додаткових атрибутів:
  • Рядок редагування
  • Редактор тексту
  • Прапорець
  • Кнопка
  • Вибір з переліку (ComboBox)
  • Перелік
  • Дерево
  • Таблиця
  • Слайдер
  • Стрічка гортання
Рядок редагування:
value Значення 21 Вміст рядку.
view Вид 22 Вид рядка редагування:
  • "Текст"
  • "Комбобокс"
  • "Ціле"
  • "Реальне"
  • "Час"
  • "Дата"
  • "Дата та час"
cfg Конфігурація 23

Конфігурація рядку. Формат значення даного поля для різних видів рядка:

Текст — конфігурація форматованого воду за шаблоном з параметрами (підтримується тільки Qt у UI.Vision):
A — Потрібно ASCII алфавітний символ, [A-Za-z].
a — Дозволено, але не обов'язково, ASCII алфавітний символ.
N — Потрібно ASCII алфавітно-цифровий символ, [A-Za-z0-9].
n — Дозволено, але не обов'язково, ASCII алфавітно-цифровий символ.
X — Потрібно будь-який символ.
x — Дозволено, але не обов'язково, будь-який символ.
9 — Необхідно ASCII цифру, [0-9].
0 — Дозволено, але не обов'язково, ASCII цифру.
D — Необхідно ASCII цифру, [1-9].
d — Дозволено, але не обов'язково, ASCII цифру.
# — Дозволено, але не обов'язково, ASCII цифру або знаки плюс/мінус.
H — Необхідно символ шістнадцяткового числа, [A-Fa-f0-9].
h — Дозволено, але не обов'язково, символ шістнадцяткового числа.
B — Необхідно бінарний символ, [0-1].
b — Дозволено, але не обов'язково, бінарний символ.
> — Всі наступні алфавітні символи у верхньому регістрі.
< — Всі наступні алфавітні символи у нижньому регістрі.
! — Виключення перетворення регістру.
\\ — Використовуйте у роздільниках, для екранування спеціальних символів, які перелічено.
Комбобокс — перелік значень редагованого комбо-боксу, за рядками.
Ціле — значення цілого числа у формі: "{Мінімум}:{Максимум}:{КрокЗміни}:{Префікс}:{Суфікс}".
Реальне — значення реального числа в формі: "{Мінімум}:{Максимум}:{КрокЗміни}:{Префікс}:{Суфікс}:{ЗнаківПісляКрапки}".
Час, Дата, Дата та час — формувати дату за шаблоном з параметрами:
d — номер дня (1-31);
dd — номер дня (01-31);
ddd — скорочене найменування дня ("Mon" ... "Sun");
dddd — повне найменування дня ("Monday" ... "Sunday");
M — номер місяця (1-12);
MM — номер місяця (01-12);
MMM — скорочене ім'я місяця ("Jan" ... "Dec");
MMMM — повне ім'я місяця ("January" ... "December");
yy — останні дві цифри року;
yyyy — рік повністю;
h — час (0-23);
hh — час (00-23);
m — хвилини (0-59);
mm — хвилини (00-59);
s — секунди (0-59);
ss — секунди (00-59);
AP,ap — відображати AM/PM або am/pm.
confirm Підтверджувати 24 Включення режиму підтвердження.
font Шрифт 25

Ім'я шрифту у вигляді "{family} {size} {bold} {italic} {underline} {strike}", де:

  • "family" — сімейство шрифту, для пробілів використовуйте символ '_', на кшталт: "Arial", "Courier", "Times_New_Roman";
  • "size" — розмір шрифту у пікселях;
  • "bold" — підсилення шрифту (0 або 1);
  • "italic" — нахиленість шрифту (0 або 1);
  • "underline" — підкреслення шрифту (0 або 1);
  • "strike" — перекреслення шрифту (0 або 1).

Приклади:

  • "Arial 10 1 0 0 0" — Arial шрифт розміром 10 пікселів та підсилений.
Редактор тексту:
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

Значення, відрізняється для різних режимів:

  • "Стандарт" — параметри повтору повідомлень при утримані {затримка}-{інтервал}, час у мілісекундах;
  • "Перемикач" — значення перемикача;
  • "Меню" — перелік адрес елементів меню виду /grp1/grp2/item1;
  • "Завантаження" — рядок опису {ШаблонФайлів}|{Заголовок}|{ФайлПоЗамовчТаЗав}|{ФайлMime} та вміст завантаженого файлу. Шаблон файлів у вигляді "Зображення (*.png *.xpm *.jpg);;CSV-файл (*.csv)".
  • "Збереження" — рядок опису {ШаблонФайлів}|{Заголовок}|{ФайлПоЗамовч}|{ФайлMime} та вміст файлу, що зберігається. Шаблон файлів як і вище.
img Зображення 22

Зображення на кнопці. Ім'я зображення у вигляді "[{src}:]{name}", де:

  • "src" — джерело зображення:
    • file — прямо з локального файлу за шляхом;
    • res — з таблиці mime ресурсів БД.
  • "name" — шлях файлу або ідентифікатор mime-ресурсу.

Приклади:

  • "res:backLogo" — з таблиці mime ресурсів БД для ідентифікатору "backLogo";
  • "backLogo" — як і попередній;
  • "file:/var/tmp/backLogo.png" — з локального файлу за шляхом "/var/tmp/backLogo.png".
color Колір 23

Колір кнопки. Ім'я кольору у вигляді "{color}[-{alpha}]", де:

  • "color" — стандартне ім'я кольору або його числове представлення з трьох шістнадцяткових чисел окремих кольорів "#RRGGBB";
  • "alpha" — рівень альфа-каналу [0...255], де 0 — повністю прозорий.

Приклади:

  • "red" — суцільний червоний колір;
  • "#FF0000" — суцільний червоний колір у цифровому коді;
  • "red-127" — напівпрозорий червоний колір.
colorText Колір: текст 27 Колір тексту (деталі вище).
mode Режим 24

Режим роботи кнопки:

  • "Стандарт" — звичайна кнопка з можливістю повтору повідомлень при утримані, параметри у "value";
  • "Перемикач" — кнопка з фіксацією, значення у "value";
  • "Меню" — відкриття меню за натиском, перелік елементів у "value";
  • "Завантаження" — організація користувацького завантаження невеликих файлів через інтерфейс візуалізації; за натиском кнопки, у цьому режимі, відкривається діалог вибору файлу завантаження, а вміст обраного файлу завантажується до атрибуту "value";
  • "Збереження" — організація користувацького збереження невеликих файлів через інтерфейс візуалізації; при запису вмісту файлу до атрибуту "value" користувачу буде відкрито діалог обрання/вказання файлу для збереження, після обрання, вміст атрибуту "value" збережеться до файлу, а "value" очиститься.
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". Формат адреси залежить від режиму обрання таблиці:

  • "Клітинка" — адреса клітинки у форматі "{row}:{col}".
  • "Рядок", "Стовпчик" — номер рядка-стовпчика або вміст клітинки ключа рядка-стовпчика, вказаного атрибутом "keyID".
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>

Теги:

"tbl" — Таблиця, властивості таблиці загалом:
  • "sel" — режим обрання-виділення елементів таблиці: "row" — за рядками, "col" — за стовпчиками, "cell" — клітинками (по замовченню);
  • "keyID" — номер ключового рядка-стовпчика, для отримання значення вибору;
  • "colsWdthFit" — підлаштовувати розмір стовпчиків, розмір яких не фіксовано, під заповнення всієї ширини таблиці;
  • "hHdrVis", "vHdrVis" — встановлення видимості горизонтального, вертикального заголовків;
  • "sortEn" — включення прямого сортування за стовпчиками.
"h" — Рядок заголовків, можливі атрибути тегів клітинок заголовку, для стовпчика загалом:
  • "width" — ширина стовпчика, у пікселях або відсотках (10%);
  • "edit" — можливість редагування (0 або 1) клітинок стовпчика, по замовченню — ні (0);
  • "color" — колір стовпчика, загалом, у вигляді ім'я кольору або його коду;
  • "colorText" — колір тексту стовпчика, загалом, у вигляді ім'я кольору або його коду;
  • "font" — шрифт тексту стовпчика, загалом, у вигляді типового рядка OpenSCADA;
  • "sort" — сортування за даним стовпчиком [0 — по убуванню; 1 — по зростанню].
"r" — Рядок значень, можливі атрибути тегів клітинок заголовку, для рядка загалом:
  • "color" — колір рядку, загалом, у вигляді ім'я кольору або його коду;
  • "colorText" — колір тексту рядка, загалом, у вигляді ім'я кольору або його коду;
  • "font" — шрифт тексту рядка, загалом, у вигляді типового рядка OpenSCADA.
"s", "i", "r", "b" — клітинки типів даних: "Рядок", "Ціле", "Реальне" та "Логічне". Можливі атрибути:
  • "color" — колір клітинки;
  • "colorText" — колір тексту клітинки, у вигляді ім'я кольору або його коду;
  • "font" — шрифт тексту клітинки, у вигляді типового рядка OpenSCADA;
  • "img" — зображення клітинки, у вигляді "[{src}:]{name}", деталі вище;
  • "edit" — можливість редагування (0 або 1) клітинки, по замовченню — немає (0).
font Шрифт 25 Ім'я шрифту у вигляді "{family} {size} {bold} {italic} {underline} {strike}" (деталі вище).
Слайдер та стрічка гортання:
value Значення 21 Положення слайдеру.
cfg Конфігурація 22

Конфігурація слайдеру у форматі: "{ВертОрієнт}:{Мінімум}:{Максимум}:{ОдинКрок}:{СторКрок}".
Де:

  • "ВертОрієнт" — ознака вертикальної орієнтації (0 або 1), по замовченню орієнтація горизонтальна;
  • "Мінімум" — мінімальне значення;
  • "Максимум" — максимальне значення;
  • "ОдинКрок" — розмір одного кроку;
  • "СторКрок" — розмір сторінкового кроку.

3.9.3 Елемент тексту (Text)

Даний примітив призначено для виводу простого та HTML тексту, що використовується у ролі міток та різних підписів. З метою створення декоративних оформлень, примітив підтримує обведення тексту рамкою.

Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елемент тексту (Text)"

Ідентифікатор Ім'я Номер Значення
backColor Фон: колір 20

Фоновий колір. Ім'я кольору у виді "{color}[-{alpha}]", де:

  • "color" — стандартне ім'я кольору або його числове представлення з трьох шістнадцяткових чисел окремих кольорів "#RRGGBB";
  • "alpha" — рівень альфа-каналу [0...255], де 0 — повністю прозорий.

Приклади:

  • "red" — суцільний червоний колір;
  • "#FF0000" — суцільний червоний колір у цифровому коді;
  • "red-127" — напівпрозорий червоний колір.
backImg Фон: зображення 21

Фонове зображення. Ім'я зображення у виді "[{src}:]{name}", де:

  • "src" — джерело зображення:
    • file — прямо з локального файлу за шляхом;
    • res — з таблиці mime ресурсів БД.
  • "name" — шлях файлу або ідентифікатор mime-ресурсу.

Приклади:

  • "res:backLogo" — з таблиці mime ресурсів БД для ідентифікатору "backLogo";
  • "backLogo" — як і попередній;
  • "file:/var/tmp/backLogo.png" — з локального файлу за шляхом "/var/tmp/backLogo.png".
bordWidth Границя: ширина 22 Ширина бордюру.
bordColor Границя: колір 23 Колір бордюру (детальніше у атрибуті 20).
bordStyle Границя: стиль 24 Стиль бордюру: "Немає", "Точковий", "Пунктирний", "Суцільний", "Подвійний", "Канавка", "Кромка", "Втиснутий", "Виступаючий".
font Шрифт 25

Ім'я шрифту у виді "{family} {size} {bold} {italic} {underline} {strike}", де:

  • "family" — сімейство шрифту, для пробілів використовуйте символ '_', на кшталт: "Arial", "Courier", "Times_New_Roman";
  • "size" — розмір шрифту у пікселях;
  • "bold" — підсилення шрифту (0 або 1);
  • "italic" — нахиленість шрифту (0 або 1);
  • "underline" — підкреслення шрифту (0 або 1);
  • "strike" — перекреслення шрифту (0 або 1).

Приклади:

  • "Arial 10 1 0 0 0" — Arial шрифт розміром 10 пікселів та підсилений.
color Колір 26 Колір тексту (детальніше у атрибуті 20).
orient Кут повороту 27 Орієнтація тексту, кут повороту.
wordWrap Перенос слів 28 Автоматичний перенос тексту за словами.
alignment Вирівнювання 29 Вирівнювання тексту: "Зверху ліворуч", "Зверху праворуч", "Зверху у центрі", "Зверху по ширині", "Знизу ліворуч", "Знизу праворуч", "Знизу у центрі", "Знизу по ширині", "У центрі ліворуч", "У центрі праворуч", "У центрі", "У центрі по ширині".
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: "Цілий", "Реальний", "Рядок".
arg{x}cfg Аргумент {x}: конфігурація 50+10*x+2

Конфігурація аргументу x:

  • "Рядок": {len} — ширина рядка;
  • "Реальний": {wdth};{form};{prec} — ширина, форма ('g', 'e', 'f') та точність значення;
  • "Цілий": {len} — ширина значення.

3.9.4 Елемент відображення медіа-матеріалів (Media)

Даний примітив призначено для програвання різних медіа-матеріалів, починаючи від простих зображень та закінчуючи повноцінними аудіо та відео потоками.

Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елемент відображення медіа-матеріалів (Media)"

Ідентифікатор Ім'я Номер Значення
backColor Фон: колір 20

Фоновий колір. Ім'я кольору у виді "{color}[-{alpha}]", де:

  • "color" — стандартне ім'я кольору або його числове представлення з трьох шістнадцяткових чисел окремих кольорів "#RRGGBB";
  • "alpha" — рівень альфа-каналу [0...255], де 0 — повністю прозорий.

Приклади:

  • "red" — суцільний червоний колір;
  • "#FF0000" — суцільний червоний колір у цифровому коді;
  • "red-127" — напівпрозорий червоний колір.
backImg Фон: зображення 21

Фонове зображення. Ім'я зображення у виді "[{src}:]{name}", де:

  • "src" — джерело зображення:
    • file — прямо з локального файлу за шляхом;
    • res — з таблиці mime ресурсів БД.
  • "name" — шлях файлу або ідентифікатор mime-ресурсу.

Приклади:

  • "res:backLogo" — з таблиці mime ресурсів БД для ідентифікатору "backLogo";
  • "backLogo" — як і попередній;
  • "file:/var/tmp/backLogo.png" — з локального файлу за шляхом "/var/tmp/backLogo.png".
bordWidth Границя: ширина 22 Ширина бордюру.
bordColor Границя: колір 23 Колір бордюру (детальніше у атрибуті 20).
bordStyle Границя: стиль 24 Стиль бордюру: "Немає", "Точковий", "Пунктирний", "Суцільний", "Подвійний", "Канавка", "Кромка", "Втиснутий", "Виступаючий".
src Джерело 25

Ім'я джерела медіа у виді "[{src}:]{name}", де:

  • "src" — джерело:
    • file — прямо з локального, візуалізатор та рущій, файлу за шляхом;
    • res — з таблиці mime ресурсів БД;
    • stream — URL потоку програвання відео або аудіо.
  • "name" — шлях файлу або ідентифікатор mime-ресурсу.

Приклади:

  • "res:workMedia" — з таблиці mime ресурсів БД для ідентифікатору "workMedia";
  • "workMedia" — як і попередній;
  • "file:/var/tmp/workMedia.mng" — з локального файлу за шляхом "/var/tmp/workMedia.mng";
  • "stream:http://localhost.localhost:5050" — програвання відео або аудіо з URL.
type Тип 27

Тип медіа:

  • "Зображення" — растрове або векторне (може не підтримуватися) зображення, на кшталт: PNG, JPEG, GIF, SVG;
  • "Анімація" — просте анімоване зображення, на кшталт: GIF, MNG;
  • "Повне відео" — повне відео, аудіо або потік, на кшталт: OGG, OGM, AVI, MKV, MPG, MP3, MP4.
areas Області карти 28 Кількість активних областей.
Атрибути зображення (Image)
fit Заповнювати віджет 26 Ознака "Погоджувати вміст з розміром віджету".
Атрибути відеоролику (Movie)
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.

3.9.5 Елемент побудови діаграм (Diagram)

Цей примітив призначено для побудови різних діаграм у часі, включаючи графіки-тренди відображення поточного процесу та архівних даних. Реалізовано наступні типи діаграм:

  • "Графік-тренд" — будує графік значень параметру у часі.
  • "Спектр" — будує частотний спектр із значень параметрів. Вікно даних частотного спектру формується виходячи із розміру віджету по горизонталі, у пікселях, та доступних даних параметрів, накладених на ґратку горизонтального розміру. У зв'язку з цим, мінімальна виділювана частота визначається значенням атрибуту "tSize" — "1/tSize", а максимальна, половинною шириною графіка у пікселях помноженою на мінімальну частоту "width/(2*tSize)".
  • "XY" — будує двомірний графік значень параметрів, парами на графік, де парні по осі Y (0,2,4...) та непарні по осі X (1,3,5...). Вказаний діапазон часу даних використовується у отримані значень параметрів осі X та Y, з подальшим зображенням.

Для всіх типів діаграм можливе визначення, у якості джерела даних:

  • параметру підсистеми "Збір Даних";
  • архіву значень;
  • прямого блоку даних користувача.

Підтримується режим слідкування за поточними значеннями та значеннями з архіву, а також, можлива побудова графіків параметрів, що не мають архіву значень, шляхом накопичення поточних значень у буфері діаграми та тільки на момент активного відображення цієї діаграми.

Процес доступу до архівних даних оптимізовано шляхом введення проміжного буферу відображення, а також, упаковки трафіку даних при запиті, шляхом приведення даних до якості достатньої для відображення.

Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елемент побудови діаграм (Diagram)"

Ідентифікатор Ім'я Номер Значення
backColor Фон: колір 20

Фоновий колір. Ім'я кольору у виді "{color}[-{alpha}]", де:

  • "color" — стандартне ім'я кольору або його числове представлення з трьох шістнадцяткових чисел окремих кольорів "#RRGGBB";
  • "alpha" — рівень альфа-каналу [0...255], де 0 — повністю прозорий.

Приклади:

  • "red" — суцільний червоний колір;
  • "#FF0000" — суцільний червоний колір у цифровому коді;
  • "red-127" — напівпрозорий червоний колір.
backImg Фон: зображення 21

Фонове зображення. Ім'я зображення у виді "[{src}:]{name}", де:

  • "src" — джерело зображення:
    • file — прямо з локального файлу за шляхом;
    • res — з таблиці mime ресурсів БД.
  • "name" — шлях файлу або ідентифікатор mime-ресурсу.

Приклади:

  • "res:backLogo" — з таблиці mime ресурсів БД для ідентифікатору "backLogo";
  • "backLogo" — як і попередній;
  • "file:/var/tmp/backLogo.png" — з локального файлу за шляхом "/var/tmp/backLogo.png".
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}", де:

  • "family" — сімейство шрифту, для пробілів використовуйте символ '_', на кшталт: "Arial", "Courier", "Times_New_Roman";
  • "size" — розмір шрифту у пікселях;
  • "bold" — підсилення шрифту (0 або 1);
  • "italic" — нахиленість шрифту (0 або 1);
  • "underline" — підкреслення шрифту (0 або 1);
  • "strike" — перекреслення шрифту (0 або 1).

Приклади:

  • "Arial 10 1 0 0 0" — Arial шрифт розміром 10 пікселів та підсилений.
valArch Архіватор значень 38 Архіватор значень у вигляді "{МодульАрхівів}.{IdАрхіватору}".
valsForPix Значень на піксель 42 Кількість значень на піксель. Збільшити для розширення точності експорту на великих інтервалах часу.
parNum Кількість параметрів 39 Кількість параметрів, що відображаються на одному тренді.
Атрибути типу: "Графік"
sclHorPer Шкала: розмір гор. ґратки, секунди 43 Фіксований період ґратки горизонтальної шкали — вимикає автоматичне обчислення періоду ґратки. Активується якщо кількість періодів на загальний розмір більш двох та розмір одного періоду не менше 15 пікселів.
Індивідуальні атрибути параметрів
prm{X}addr Параметр {X}: адреса 50+10*{X}

Повна адреса до атрибуту параметру X DAQ або архіву.
Підтримується пряме встановлення даних за префіксом:

  • "data:{XMLNodeData}" — зображення з прямо встановлених даних;
  • "line:{значення}" — зображення горизонтальної лінії за значенням, не має сенсу для типу "XY".

Приклад:

  • "/DAQ/System/AutoDA/MemInfo/use" — адреса до атрибуту "use" параметру "MemInfo" об'єкту контролера "AutoDA" DAQ модуля "System";
  • "/Archive/va_CPULoad_load" — адреса до архіву "CPULoad_load";
  • "data:<d s="1" aprox="1" tm="1369465209" tm_grnd="1369465200" per="1">
0 3.14
1 3.141
5 3.1415</d>" — 10 секунд даних з періодом 1 секунда від "25.05.2013 10:00:00"; можливо "tm" та "tm_grnd" не вказувати, у результаті чого буде підставлено значення діапазону діаграми, також, встановленням атрибуту "s", можна вказати на час у секундах; "aprox" — апроксимувати перехід від однієї точки до іншої замість підставки попереднього значення у всі точки періодичності від упаковки;
  • "line:3.14159265" — горизонтальна лінія за значенням "3.14159265".
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).

3.9.6 Елемент побудови протоколів на основі архівів повідомлень (Protocol)

Цей примітив призначено для візуалізації даних архіву повідомлень шляхом формування протоколів з різними способами візуалізації, починаючи від статичного сканувального перегляду та закінчуючи динамічним стеженням.

Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елемент побудови протоколів на основі архівів повідомлень (Protocol)"

Ідентифікатор Ім'я Номер Значення
backColor Фон: колір 20

Фоновий колір. Ім'я кольору у виді "{color}[-{alpha}]", де:

  • "color" — стандартне ім'я кольору або його числове представлення з трьох шістнадцяткових чисел окремих кольорів "#RRGGBB";
  • "alpha" — рівень альфа-каналу [0...255], де 0 — повністю прозорий.

Приклади:

  • "red" — суцільний червоний колір;
  • "#FF0000" — суцільний червоний колір у цифровому коді;
  • "red-127" — напівпрозорий червоний колір.
backImg Фон: зображення 21

Фонове зображення. Ім'я зображення у виді "[{src}:]{name}", де:

  • "src" — джерело зображення:
    • file — прямо з локального файлу за шляхом;
    • res — з таблиці mime ресурсів БД.
  • "name" — шлях файлу або ідентифікатор mime-ресурсу.

Приклади:

  • "res:backLogo" — з таблиці mime ресурсів БД для ідентифікатору "backLogo";
  • "backLogo" — як і попередній;
  • "file:/var/tmp/backLogo.png" — з локального файлу за шляхом "/var/tmp/backLogo.png".
font Шрифт 22

Ім'я шрифту у виді "{family} {size} {bold} {italic} {underline} {strike}", де:

  • "family" — сімейство шрифту, для пробілів використовуйте символ '_', на кшталт: "Arial", "Courier", "Times_New_Roman";
  • "size" — розмір шрифту у пікселях;
  • "bold" — підсилення шрифту (0 або 1);
  • "italic" — нахиленість шрифту (0 або 1);
  • "underline" — підкреслення шрифту (0 або 1);
  • "strike" — перекреслення шрифту (0 або 1).

Приклади:

  • "Arial 10 1 0 0 0" — Arial шрифт розміром 10 пікселів та підсилений.
headVis Заголовок видимий 23 Видимість заголовку таблиці.
time Час, секунди 24 Поточний час, секунди.
tSize Розмір, секунди 25 Розмір запиту даних, секунди. Встановіть значення у '0' для отримання всіх порушень, для "lev" < 0.
trcPer Період стеження, секунди 26 Режим та періодичність стеження.
arch Архіватор 27 Архіватор повідомлень у вигляді "{МодульАрхівів}.{IdАрхіватору}".
tmpl Шаблон 28

Шаблон категорії або регулярний вираз "/{re}/". Для шаблона зарезервовано символи:

  • '*' — множина будь-яких, група символів;
  • '?' — будь-який, один символ;
  • '\\' — використовуйте для екранування спеціальних символів.
lev Рівень 29 Рівень повідомлень. Встановіть значення < 0 для отримання поточних порушень.
viewOrd Порядок відображення 30 Порядок відображення: "За часом", "За рівнем", "За категорією", "За повідомленням", "За часом (обернений)", "За рівнем (обернений)", "За категорією (обернений)", "За повідомленням (обернений)".
col Показати стовпчики 31

Перелік видимих та порядок стовпчиків, поділених символом ';'. Передбачаються стовпчики:

  • "pos" — номер рядку;
  • "tm" — дата та час повідомлення;
  • "utm" — мікросекундна частина часу повідомлення;
  • "lev" — рівень повідомлення;
  • "cat" — категорія повідомлення;
  • "mess" — текст повідомлення.
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).

3.9.7 Елемент формування звітної документації (Document)

Примітив призначено для формування звітної, оперативної та іншої документації на основі шаблонів документів.

Таблиця. Набір додаткових властивостей/атрибутів примітиву "Елемент формування звітної документації (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}", де:

  • "family" — сімейство шрифту, для пробілів використовуйте символ '_', на кшталт: "Arial", "Courier", "Times_New_Roman";
  • "size" — розмір шрифту у пікселях;
  • "bold" — підсилення шрифту (0 або 1);
  • "italic" — нахиленість шрифту (0 або 1);
  • "underline" — підкреслення шрифту (0 або 1);
  • "strike" — перекреслення шрифту (0 або 1).

Приклади:

  • "Arial 10 1 0 0 0" — Arial шрифт розміром 10 пікселів та підсилений.
bTime Час: початок 24 Час початку документу, секунди.
time Час: поточне 23 Час генерації документу, секунди. Записати час для генерації документа від цієї точки або нуль для перегенерації.
process У процесі 27 Ознака процесу формування документу окремим потоком.
n Розмір архіву 25 Кількість документів або глибина архіву.
Атрибути увімкненого режиму архівування
aCur Архів: курсор: поточний - Позиція поточного документу у архіві. Запис значення <0 здійснює архівацію поточного документу.
vCur Архів: курсор: вид -

Поточний візуалізований документ архіву. Запис значення:

  • -1 — вибір наступного документу;
  • -2 — вибір попереднього документу.
aDoc Архів: поточний документ - Поточний документ архіву у XHTML, починається з тегу "body".
aSize Архів: розмір - Реальний розмір архіву документу.

Можливості примітиву "Документ":

  • Гнучке формування структури документу на основі мови гіпертекстової розмітки, що надає підтримку широких можливостей форматування документів.
  • Формування документів за командою або розкладом, що необхідно для формування звітної документації до архіву, з подальшим переглядом архіву.
  • Формування документів у режимі реального часу, для надання їх повністю динамічно та на основі архівів за вказаний час.
  • Використання атрибутів віджету для передачі у документ значень та адрес на архіви, що дозволяє використовувати віджет документу як шаблон, при формуванні звітів з іншими вхідними даними.

У основі будь-якого документу лежить XHTML-шаблон. XHTML-шаблон це тег "body" WEB-сторінки, що містить статику документу у стандарті XHTML 1.0 та елементи виконувальних інструкцій на мові користувацького програмування OpenSCADA, у вигляді <?dp {procedure} ?>. Результуючий документ формується шляхом виконання процедур та вставки їх результату у документ.

Джерелом значень виконуваних інструкцій є атрибути віджету цього примітиву, а також всі механізми мови користувацького програмування OpenSCADA. Атрибути можуть додаватися користувачем та лінкуватися на реальні атрибути параметрів або-ж бути автономними, значення яких будуть формуватися у процедурі віджету. У випадку зі злінкованими атрибутами, значення можуть вийматися з архіву-історії.

На рисунку зображено структурну схему віджету примітива "Документ". Згідно цієї структури, "Документ" містить: XHTML-шаблон, результатні документи та процедуру обробки даних. Джерелом даних процедури та результатних документів є атрибути віджету.

Рисунок. Структурна схема примітиву "Документ".

Передбачено роботу віджету у двох режимах: "Динамічний" та "Архівний". Відмінністю архівного режиму є наявність архіву визначеної глибини та атрибутів, що дозволяють керувати процесом архівування та перегляду вказаного документу у архіві.

Генерація документу завжди здійснюється у момент встановлення атрибуту часу time відносно встановленого раніш початкового часу документу у атрибуті bTime. При вимкненому архіві, результатний документ поміщається безпосередньо у атрибут doc. При увімкненому архіві, результатний документ поміщається до клітинки під курсором, атрибут aCur, а також у doc, якщо значення курсору архіву aCur та курсору візуалізованого документу vCur збігаються. Атрибути архівних курсорів передбачають декілька командних значень:

  • "aCur < 0" — переміщує курсор архіватору на наступну позицію, тим самим залишаючи попередній документ у архіві та очищаючи документ під курсором, якщо кільцевий архів замкнувся.
  • "vCur == -1" — вибір наступного документу для відображення, обраний документ копіюється до атрибуту doc.
  • "vCur == -2" — вибір попереднього документу для відображення, обраний документ копіюється до атрибуту doc.

Як було вказано вище, динаміка шаблону документа визначається вставками виконуваних інструкцій виду "<?dp {procedure} ?>". У процедурах можуть використовуватися однойменні атрибути віджету та функції користувацького інтерфейсу програмування OpenSCADA. Крім атрибутів віджету, зарезервовано спеціальні атрибути, дивись таблицю.

Таблиця. Спеціальні та зарезервовані елементи шаблону.

Ім'я Призначення
Атрибути
rez Атрибут результату виконання процедури, вміст якого поміщається у дерево документа.
lTime Час останнього формування. Якщо документ формується вперше то lTime дорівнює bTime.
rTime Містить час перебируваних значень, секунди, визначається всередині тегів з атрибутом "docRept".
rTimeU Містить час перебируваних значень, мікросекунди, визначається всередині тегів з атрибутом "docRept".
rPer Містить період перебору значень, атрибут "docRept".
mTime, mTimeU, mLev, mCat, mVal

Визначаються всередині тегів з атрибутом "docAMess" при розборі повідомлень архіву повідомлень:

mTime — час повідомлення, секунди;
mTimeU — час повідомлення, мікросекунди;
mLev — рівень повідомлення;
mCat — категорія повідомлення;
mVal — значення повідомлення.
Спеціальні теги
Спеціальні атрибути стандартних тегів
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-файл або інші табличні формати.

3.9.8 Контейнер (Box)

Примітив контейнеру, використовується для формування складених віджетів та/або сторінок користувацького інтерфейсу.

Таблиця. Набір додаткових властивостей/атрибутів примітиву "Контейнер (Box)"

Ідентифікатор Ім'я Номер Значення
pgOpenSrc Сторінка: джерело відкриття 3 Повна адреса сторінки, яка включена усередину даного контейнеру.
pgGrp Сторінка: група 4 Група контейнеру сторінок.
backColor Фон: колір 20

Фоновий колір. Ім'я кольору у виді "{color}[-{alpha}]", де:

  • "color" — стандартне ім'я кольору або його числове представлення з трьох шістнадцяткових чисел окремих кольорів "#RRGGBB";
  • "alpha" — рівень альфа-каналу [0...255], де 0 — повністю прозорий.

Приклади:

  • "red" — суцільний червоний колір;
  • "#FF0000" — суцільний червоний колір у цифровому коді;
  • "red-127" — напівпрозорий червоний колір.
backImg Фон: зображення 21

Фонове зображення. Ім'я зображення у виді "[{src}:]{name}", де:

  • "src" — джерело зображення:
    • file — прямо з локального файлу за шляхом;
    • res — з таблиці mime ресурсів БД.
  • "name" — шлях файлу або ідентифікатор mime-ресурсу.

Приклади:

  • "res:backLogo" — з таблиці mime ресурсів БД для ідентифікатору "backLogo";
  • "backLogo" — як і попередній;
  • "file:/var/tmp/backLogo.png" — з локального файлу за шляхом "/var/tmp/backLogo.png".
bordWidth Границя: ширина 22 Ширина бордюру.
bordColor Границя: колір 23 Колір бордюру (детальніше у атрибуті 20).
bordStyle Границя: стиль 24 Стиль бордюру: "Немає", "Точковий", "Пунктирний", "Суцільний", "Подвійний", "Канавка", "Кромка", "Втиснутий", "Виступаючий".


3.10 Використання БД для зберігання бібліотек віджетів та проектів

Зберігання даних віджетів, бібліотек віджетів та проектів реалізовано у БД, доступних OpenSCADA. БД організовано за приналежністю даних до бібліотеки-проекту. Тобто, окрема бібліотека-проект зберігається у окремій групі таблиць БД. Перелік бібліотек віджетів зберігається у індексній таблиці бібліотек з іменем "VCALibs" та структурою "Libs", а перелік проектів у індексній таблиці "VCAPrjs" та структурою "Projs". Екземпляр цих таблиць створюється у кожній БД, де зберігаються дані цього модуля. До складу таблиць, що належать бібліотеці віджетів та проекту, входять наступні:

  • "{DB_TBL}" — таблиця віджетів, що належать бібліотеці (структура "LibWigets"), або сторінок, що належать проекту (структура "ProjPages");
  • "{DB_TBL}_io" — таблиця робочих властивостей віджетів та вкладених віджетів бібліотеки (структура "LibWidgetIO") або властивостей сторінок проекту (структура "ProjPageIO");
  • "{DB_TBL}_uio" — таблиця користувацьких властивостей віджетів та вкладених віджетів бібліотеки (структура "LibWidgetUserIO") або користувацьких властивостей сторінок проекту (структура "ProjPageUserIO");
  • "{DB_TBL}_incl" — таблиця віджетів, вкладених у віджети-контейнери, бібліотеки (структура "LibWidgetIncl") або проекту (структура "ProjPageWIncl");
  • "{DB_TBL}_mime" — таблиця ресурсів бібліотеки та її віджетів (структура "LibWidgetMime"), або проекту та його сторінок (структура "ProjMime");
  • "{DB_TBL}_stl" — таблиця значень стильових параметрів проекту (структура "PrjStlIO");
  • "{DB_TBL}_ses" — таблиця даних режиму виконання проекту, тобто сеансів (структура "PrjSesIO").

Проекції (структури) основних таблиць такі:

  • Libs(ID, NAME, DSCR, DB_TBL, ICO) — бібліотеки віджетів ID.
ID — ідентифікатор;
NAME — ім'я;
DSCR — опис;
DB_TBL — корінь таблиць БД з віджетами;
ICO — закодоване (Base64) зображення іконки бібліотеки.
  • LibWigets(ID, ICO, PARENT, PROC, PROC_PER, ATTRS, TIMESTAMP) — віджети ID бібліотеки.
ID — ідентифікатор;
ICO — закодоване (Base64) зображення іконки віджету;
PARENT — адреса віджету основи, у вигляді /wlb_originals/wdg_Box;
PROC — внутрішня процедура та мова процедури віджету;
PROC_PER — період обчислення процедури віджету;
ATTRS — перелік атрибутів віджету, модифікованих користувачем;
TIMESTAMP — мітка часу останньої модифікації.
  • LibWidgetIO(IDW, ID, IDC, IO_VAL, SELF_FLG, CFG_TMPL, CFG_VAL) — робочі атрибути ID віджету IDW дочірнього віджету IDC.
IDW — ідентифікатор віджету;
ID — ідентифікатор атрибуту;
IDC — ідентифікатор дочірнього віджету;
IO_VAL — значення атрибуту;
SELF_FLG — внутрішні прапорці атрибутів;
CFG_TMPL — шаблон елементу конфігурації, заснованого на даному атрибуті;
CFG_VAL — значення елементу конфігурації (посилання, константа ...).
  • LibWidgetUserIO(IDW, ID, IDC, NAME, IO_TP, IO_VAL, SELF_FLG, CFG_TMPL, CFG_VAL) — користувацькі атрибути ID віджету IDW дочірнього віджету IDC.
IDW — ідентифікатор віджету;
ID — ідентифікатор атрибуту;
IDC — ідентифікатор дочірнього віджету;
NAME — ім'я атрибуту;
IO_TP — тип та головні прапорці атрибуту;
IO_VAL — значення атрибуту;
SELF_FLG — внутрішні прапорці атрибуту;
CFG_TMPL — шаблон елементу конфігурації, заснованого на даному атрибуті;
CFG_VAL — значення елементу конфігурації (посилання, константа ...).
  • LibWidgetIncl(IDW, ID, PARENT, ATTRS) — включені у контейнер IDW віджети ID.
IDW — ідентифікатор віджету;
ID — ідентифікатор екземпляру вкладеного віджету;
PARENT — адреса віджету основи, у вигляді /wlb_originals/wdg_Box;
ATTRS — перелік атрибутів віджету, модифікованих користувачем.
  • LibWidgetMime(ID, MIME, DATA) — audio, video, media та інші ресурси віджетів ID бібліотеки.
ID — ідентифікатор ресурсу;
MIME — Mime тип даних ресурсу, у форматі — "{mimeType};{Size}";
DATA — дані ресурсу, кодовані Base64.
  • Projs(ID, NAME, DSCR, DB_TBL, ICO, USER, GRP, PERMIT, PER, FLGS, STYLE) — проекти ID інтерфейсу візуалізації.
ID — ідентифікатор проекту;
NAME — ім'я проекту;
DSCR — опис проекту;
DB_TBL — корінь таблиць БД зі сторінками;
ICO — закодоване (Base64) зображення іконки проекту;
USER — ім'я власника проекту;
GRP — ім'я групи користувачів проекту;
PERMIT — права доступу до проекту;
PER — період обчислення проекту, у мілісекундах;
FLGS — прапорці проекту;
STYLE — типовий стиль проекту.
  • ProjPages(OWNER, ID, ICO, PARENT, PROC, PROC_PER, FLGS, ATTRS, TIMESTAMP) — сторінки ID, що містяться у проекті-сторінці OWNER.
OWNER — проект-сторінка — власник даної сторінки, у вигляді — "/AGLKS/so/1/gcadr";
ID — ідентифікатор сторінки;
ICO — закодоване (Base64) зображення іконки сторінки;
PARENT — адреса віджету основи, у вигляді /wlb_originals/wdg_Box;
PROC — внутрішня процедура та мова процедури сторінки;
PROC_PER — період обчислення процедури сторінки;
FLGS — прапорці типів сторінки;
ATTRS — перелік атрибутів сторінки, модифікованих користувачем;
TIMESTAMP — мітка часу останньої модифікації.
  • ProjPageIO(IDW, ID, IDC, IO_VAL, SELF_FLG, CFG_TMPL, CFG_VAL) — робочі атрибути сторінок, структура фактично збігається з таблицею "LibWidgetIO".
  • ProjPageUserIO(IDW, ID, IDC, NAME, IO_TP, IO_VAL, SELF_FLG, CFG_TMPL, CFG_VAL) — користувацькі атрибути сторінок, структура фактично збігається з таблицею "LibWidgetUserIO".
  • ProjPageWIncl(IDW, ID, PARENT, ATTRS) — віджети, включені на сторінки, структура фактично збігається з таблицею "LibWidgetIncl".
  • ProjMime(ID, MIME, DATA) — audio, video, media та інші ресурси сторінок проектів, структура фактично збігається з таблицею "LibWidgetMime".
  • PrjStl(ID, V_0, V_1, V_2, V_3, V_4, V_5, V_6, V_7, V_8, V_9) — значення поля стилю ID проекту.
ID — ідентифікатор поля стилю;
V_{N} — значення поля стилю для стилю N.
  • ProjSess(IDW, ID, IO_VAL) — таблиця проекту IDW для збереження даних сеансів, що виконують проект.
IDW — повний шлях елементу проекту;
ID — атрибут елементу;
IO_VAL — значення атрибуту.


3.11 API користувацького програмування та сервісні інтерфейси OpenSCADA

3.11.1 API користувацького програмування

API користувацького програмування рушія візуалізації безпосередньо представлено об'єктами OpenSCADA, що формують користувацький інтерфейс, а саме "Сеансом" та "Віджетами-сторінками". Для користувача ці об'єкти надають набір функцій управління:

Об'єктна модель користувача модуля VCAEngine.

Об'єкт "Сеанс" ( this.ownerSess() )

  • string user( ) — поточний користувач сеансу.
  • int alrmQuietance( int quit_tmpl, string wpath = "", bool ret = false ) — квітує порушення wpath з шаблоном quit_tmpl. Якщо wpath це порожній рядок то здійснюється глобальна квітація. У рядку wpath, через символ ';', може бути перелічено адреси декількох віджетів. При встановлені ret здійснюється повернення квітації.
  • int reqTm( ) — час останнього запиту.
  • string reqUser( ) — користувач останнього запиту.
  • string reqLang( ) — мова останнього запиту.
  • int userActTm( ) — час останньої дії користувача.

Об'єкт "Віджет" (this)

  • TCntrNodeObj ownerSess( ) — об'єкт сеансу даного віджету.
  • TCntrNodeObj ownerPage( ) — об'єкт батьківської сторінки даного віджету.
  • TCntrNodeObj ownerWdg( bool base = false ) — об'єкт батьківського віджету даного віджету. При указанні base буде повернено й об'єкти сторінок.
  • TCntrNodeObj wdgAdd( string wid, string wname, string parent ) — додає віджет wid з ім'ям wname на основі бібліотечного віджету parent.
//Додає новий віджет на основі віджету текстового примітиву
nw = this.wdgAdd("nw", "Новий віджет", "/wlb_originals/wdg_Text");
nw.attrSet("geomX", 50).attrSet("geomY", 50);
  • bool wdgDel( string wid ) — видаляє віджет wid.
  • TCntrNodeObj wdgAt( string wid, bool byPath = false ) — підключається до дочірнього або глобального віджету, за посередництвом шляху byPath. У випадку глобального підключення можна використати абсолютний або відносний шлях до віджету. Точкою відліку абсолютної адреси виступає об'єкт кореня модуля "VCAEngine", а значить, першим елементом абсолютної адреси є ідентифікатор сеансу, який опускається. Відносна адреса бере відлік від поточного віджету. Спеціальним елементом відносної адреси є елемент вищестоящого вузла "..".
  • bool attrPresent( string attr ) — перевіряє атрибут віджета attr на факт присутності.
  • ElTp attr( string attr, bool fromSess = false ) — значення атрибуту віджету attr або з сеансу fromSess. Для відсутніх атрибутів повертає порожній рядок.
  • TCntrNodeObj attrSet( string attr, ElTp vl, bool toSess = false ) — встановлює значення vl у атрибут віджету attr або сеанс, для toSess. Повертає поточний об'єкт, для конкатенації функцій встановлення.
  • string link( string attr, bool prm = false ) — посилання атрибуту віджету attr. При встановленні prm запитує посилання групи атрибутів (параметр), представлене вказаним атрибутом.
  • string linkSet( string attr, string vl, bool prm = false ) — встановлює посилання атрибуту віджету attr. При встановленні prm здійснює встановлення посилання групи атрибутів (параметр), представленого вказаним атрибутом.
//Встановлює посилання восьмого тренду параметром
this.linkSet("el8.name", "prm:/LogicLev/experiment/Pi", true);
  • string mime( string addr, string type = "" ) — "mime" об'єкту за адресою addr (пряме посилання на ресурс або атрибут віджету з цим посиланням) з типом у type, з таблиці сеансу або джерела. Призначено для редагування "mime" об'єкта та підстановки його у контексті сеансу, наприклад, зображень SVG.
  • int mimeSet( string addr, string data, string type = "" ) — встановлює "mime" об'єкту у data з типом type за адресою addr.
  • int messDebug( string mess ); int messInfo( string mess ); int messNote( string mess ); int messWarning( string mess ); int messErr( string mess ); int messCrit( string mess ); int messAlert( string mess ); int messEmerg( string mess ); — формує повідомлення програми mess з категорією — шлях до даного віджету.

Об'єкт "Віджет", примітиву "Документ" (this)

  • string getArhDoc( int nDoc) — текст документу архіву на глибині nDoc (0-{aSize-1}).


Застаріле, але підтримуване, 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 Адреса Рядок Вхід

3.11.2 Сервісні інтерфейси OpenSCADA

Сервісні інтерфейси це інтерфейси доступу до OpenSCADA за посередництвом інтерфейсу управління OpenSCADA. Даний механізм покладено у основу всіх механізмів обміну всередині OpenSCADA, реалізованих за посередництвом слабких зв'язків та стандартного протоколу обміну OpenSCADA.

3.11.2.1 Доступ до значень атрибутів елементів візуалізації (віджети)

З метою надання уніфікованого, групового та порівняно швидкого доступу до значень атрибутів візуальних елементів, передбачено сервісну функція візуального елементу "/serv/attr" та команди отримання-установки значень атрибутів:

  • отримання: <get path="/UI/VCAEngine/{wdg_addr}/%2fserv%2fattr"/>;
  • установка: <set path="/UI/VCAEngine/{wdg_addr}/%2fserv%2fattr"/>.

Таблиця. Атрибути команд отримання та встановлення атрибутів візуальних елементів

Ідентифікатор Ім'я Значення
Команда запиту візуальних атрибутів віджету: <get path="/UI/VCAEngine/{wdg_addr}/%2fserv%2fattr"/>
tm Час-лічильник змін Встановлення часу-лічильника змін для запиту тільки атрибутів, що змінилися.
<el id="{attr}" p="{a_id}">{val}</el> Формування дочірніх елементів з результатами атрибутів У дочірньому елементі вказуються: строковий ідентифікатор attr, індекс a_id та значення val атрибуту.
Команда встановлення візуальних атрибутів віджету: <set path="/UI/VCAEngine/{wdg_addr}/%2fserv%2fattr"/>
<el id="{attr}">{val}</el> Встановлення атрибутів У дочірніх елементах вказується: строковий ідентифікатор attr та значення val атрибуту.
Команда активації-створення специфічного до візуалізатору атрибуту: <activate path="/UI/VCAEngine/{wdg_addr}/%2fserv%2fattr/{attrId}" aNm="{Name}" aTp="{Type} aFlg="{Flags}"/>
attrId Ідентифікатор атрибуту
aNm Ім'я атрибуту
aTp Тип атрибуту
aFlg Прапорці атрибуту
3.11.2.2 Груповий доступ до значень атрибутів елементів візуалізації (віджетам)

З метою оптимізації трафіку мережевої взаємодії шляхом виключення мілких запитів та використання одного великого, передбачено груповий запит значень атрибутів візуальних елементів. Групування даного запиту передбачає запит атрибутів всієї гілки віджету, включаючи й вкладені елементи. Для даного запиту передбачено сервісну команду "/serv/attrBr". Запит даної сервісної команди еквівалентний сервісній команді "/serv/attr" та виглядає наступним чином:
<get path="/UI/VCAEngine/{wdg_addr}/%2fserv%2fattrBr"/>

tm — час-лічильник змін. Встановлення часу-лічильника змін для запиту тільки змінений атрибутів.

Результат:

<el id="{attr}" p="{a_id}">{val}</el> — елементи з результатами атрибутів. У елементі вказуються: строковий ідентифікатор attr, індекс a_id та значення val атрибуту.
<w id="{wid}" lnkPath="{lnk_path}">{childs+attrs}</w> — елементи з дочірніми віджетами та їх атрибутами. У елементі вказуються: ідентифікатор дочірнього віджету wid та шлях віджету, на який посилається даний віджет якщо він є посиланням lnk_path.
3.11.2.3 Доступ до сторінок сеансу

З метою уніфікації та оптимізації доступу до сторінок, передбачено сервісну функцію сеансу "/serv/pg" та команди:

  • запит переліку відкритих сторінок: <openlist path="/UI/VCAEngine/ses_{Session}/%2fserv%2fpg"/>;
  • відкриття сторінки: <open path="/UI/VCAEngine/ses_{Session}/%2fserv%2fpg"/>;
  • закриття сторінки: <close path="/UI/VCAEngine/ses_{Session}/%2fserv%2fpg"/>.

Результатом запиту переліку відкритих сторінок є дочірні елементи <el>{OpPage}</el>, що містять повний шлях відкритої сторінки. Крім переліку відкритих сторінок запит повертає значення поточного лічильника обчислення сеансу, у атрибуті tm. Якщо даний атрибут встановлюється при запиті, то, для кожної відкритої сторінки, повертається перелік змінених, з моменту вказаного значення лічильника, віджетів відкритої сторінки.

3.11.2.4 Управління сигналізацією

Для надання механізму глобального контролю за сигналізацією сеансу, передбачено сервісну функцію сеансу "/serv/alarm" та команди:

  • запит статусу сигналів: <get path="/UI/VCAEngine/ses_{Session}/%2fserv%2falarm"/>;
  • квітація сигналів: <quietance path="/UI/VCAEngine/ses_{Session}/%2fserv%2falarm"/>.

Запит статусу сигналів повертає узагальнений стан сигналів, а також ресурс повідомлення, якщо атрибут "mode" дорівнює "resource". Результатом запиту ресурсу повідомлення, зазвичай, є звуковий файл, для відтворення. В той-же час, забезпечується відстеження послідовності сигналізації та квітації окремих ресурсів повідомлень.

Запит на квітацію виконує квітацію, вказаного у атрибуті wdg, віджету, згідно до шаблону у атрибуті tmpl.

3.11.2.5 Маніпуляція сеансами проектів

Для надання уніфікованого механізму маніпуляції сеансами, модулем рушія СВУ (VCAEngine), для візуалізаторів СВУ, передбачено сервісну функцію "/serv/sess" та команди:

  • запиту переліку відкритих сеансів: <list path="/UI/VCAEngine/%2fserv%2fsess"/>;
  • підключення-створення нового сеансу: <connect path="/UI/VCAEngine/%2fserv%2fsess"/>;
  • відключення-видалення сеансу: <disconnect path="/UI/VCAEngine/%2fserv%2fsess"/>.

Таблиця. Атрибути команд механізму маніпуляції сеансами

Ідентифікатор Ім'я Значення
Команда запиту переліку відкритих сеансів для проекту: <list path="/UI/VCAEngine/%2fserv%2fsess"/>
prj Визначення проекту Визначає проект, для якого повертати перелік відкритих сеансів.
<el>{Session}</el> Контроль переліку сеансів У дочірніх елементах вказуються сеанси, відкриті для запитаного проекту.
Команда підключення-відкриття сеансу: <connect path="/UI/VCAEngine/%2fserv%2fsess"/>
sess Встановлення та контроль ім'я сеансу Якщо атрибут визначений, то здійснюється підключення до чинного сеансу, інакше — створення нового сеансу. У випадку відкриття нового сеансу, до даного атрибуту поміщається його ім'я.
prj Встановлення імені проекту Використовується для відкриття нового сеансу для вказаного проекту та коли атрибут sess не вказано.
Команда відключення-закриття сеансу: <disconnect path="/UI/VCAEngine/%2fserv%2fsess"/>
sess Встановлення імені сеансу Вказує ім'я сеансу від якого виконується відключення або закриття. Сеанси, що не є фоновими, та до яких не підключено жодного візуалізатору, автоматично закриваються.
3.11.2.6 Груповий запит дерева бібліотек віджетів

З метою оптимізації продуктивності локальної та, особливо, мережевої взаємодії, передбачено сервісну функцію "/serv/wlbBr" та команду запиту дерева бібліотек віджетів: <get path="/UI/VCAEngine/%2fserv%2fwlbBr"/>. Результатом запиту є дерево з елементами бібліотек віджетів — теги wlb. Всередині тегів бібліотек віджетів міститься тег іконки ico та теги віджетів бібліотеки w. Теги віджетів, своєю чергою, містять тег іконки та теги дочірніх віджетів cw.


4 Конфігурація модуля за посередництвом інтерфейсу управління OpenSCADA

За посередництвом інтерфейсу управління OpenSCADA компоненти, які його використовують, можна конфігурувати з будь-якого конфігуратору OpenSCADA. Даним модулем надається інтерфейс доступу до всіх об'єктів даних СВУ. Головна вкладка конфігураційної сторінки модуля надає доступ до бібліотек віджетів та проектів (рис.4.1). Вкладка "Сеанси" надає доступ до відкритих сеансів проектів (рис.4.2).

Рис.4.1. Головна конфігураційна сторінка модуля.
Рис.4.2. Вкладка "Сеанси" конфігураційної сторінки модуля.

Крім переліку відкритих сеансів, вкладка на рисунку 4.2 містить таблицю з переліком сеансів, які мають створюватися та запускатися у момент завантаження OpenSCADA. Створення сеансів за посередництвом цього механізму може бути корисним для Web-інтерфейсу. У такому випадку, при підключені Web-користувача, всі дані вже готові та забезпечується неперервність формування архівних документів.

Конфігурація контейнерів віджетів, у особі бібліотек віджетів та проектів, виконується за посередництвом сторінок на рисунку 4.3 (для проекту) та рисунку 4.5 (для бібліотеки віджетів). Бібліотека віджетів містить віджети, а проект — сторінки. Обидва типи контейнеру містять вкладку конфігурації Mime-даних, що використовуються віджетами (рис.4.6). Сторінка проекту, також, містить вкладку "Діагностика" (рис.4.4) для налагодження та контролю за виконанням сторінки у сеансах.

Рис.4.3. Сторінка конфігурації проектів.

За допомогою цієї сторінки можна встановити:

  • Стан контейнеру, а саме: "Ввімкнено", ім'я БД (що містить конфігурацію), дата та час останньої модифікації, лічильник використання.
  • Ідентифікатор, ім'я, опис та іконка контейнеру.
  • Власник, група користувачів та права доступу до елементу.
  • Період обчислення сеансів, заснованих на даному проекті.
  • Ознака увімкнення за потреби.
Рис.4.4. Вкладка "Діагностика" проекту.

У цій вкладці Ви можете обрати час (або оновити до поточного) та розмір для отримання діагностичних повідомлень сеансів виконання даного проекту.

Рис.4.5. Сторінка конфігурації бібліотек віджетів.

За допомогою цієї сторінки можна встановити:

  • Стан контейнеру, а саме: "Ввімкнено", ім'я БД (що містить конфігурацію), дата та час останньої модифікації, лічильник використання.
  • Ідентифікатор, ім'я, опис та іконка контейнеру.
Рис.4.6. Вкладка конфігурації mime-даних контейнеру.

Конфігурація сеансу проекту значно відрізняється від конфігурації проекту (рис.4.7), однак, також, містить сторінки проекту.

Рис.4.7. Сторінка конфігурації сеансів проектів.

За допомогою цієї сторінки можна встановити:

  • Стан сеансу, а саме: "Ввімкнено"; "Виконується"; користувач; власник; група користувачів; доступ; початковий проект; режим виконання у фоні; час виконання сеансу; лічильник клієнтських підключень; час, користувач, мова останнього запиту; остання дія користувача та залишок часу до примусового закриття.
  • Період обрахунку сеансу.
  • Поточний стиль проекту.
  • Перелік відкритих сторінок.

Сторінки конфігурації візуальних елементів, розташованих у різних контейнерах, можуть сильно відрізнятися, однак, ця різниця полягає у наявності або відсутності окремих вкладок. Головна вкладка візуальних елементів фактично всюди однакова, відрізняючись на одне конфігураційне поле та три у сеансі (рис.4.8). У сторінок присутні вкладки дочірніх сторінок та вкладених віджетів. У контейнерних віджетів міститься вкладка вкладених віджетів. Всі візуальні елементи містять вкладку атрибутів (рис.4.9), крім логічних контейнерів проектів. Елементи, на рівні яких можна формувати користувацьку процедуру та визначати зв'язки, містять вкладки "Обробка" (рис.4.10) та "Зв'язки" (рис.4.11).

Рис.4.8. Головна вкладка конфігурації візуальних елементів.

За допомогою цієї сторінки можна встановити:

  • Стан елементу, а саме: "Ввімкнено", кількість використання, батьківський елемент та перехід до нього, дата та час останьої модифікації.
  • Стан режиму сеансу виконання: "Відкрито", "Обробка" та використано часу при виконанні піддерева та елемента, у режимі налагодження.
  • Ідентифікатор, тип, корінь, шлях, ім'я, опис та іконка елементу.
  • Команда — очистити зміни.
  • Команда — опустити зміни віджета його предку.
Рис.4.9. Вкладка атрибутів візуальних елементів.
Рис.4.10. Вкладка обробки візуальних елементів.
Рис.4.11. Вкладка зв'язків візуальних елементів.