Модуль | Ім'я | Версія | Ліцензія | Джерело | Мови | Платформи | Тип | Автор |
---|---|---|---|---|---|---|---|---|
WebVision | Робочий користувацький інтерфейс (WEB) | 6.10 | GPL2 | ui_WebVision.so | en,uk,ru,de | x86,x86_64,ARM | Користувацькі інтерфейси | Роман Савоченко Максим Лисенко (2007-2012), Ксенія Яшина (2007-2008) |
Опис | ||||||||
Робочий інтерфейс користувача, заснований на WEB — зовнішній інтерфейс до рушія СВУ.
|
Модуль надає до OpenSCADA механізм кінцевої візуалізації середовища візуалізації та управління (СВУ). Модуль засновано на WEB технологіях (XHTML, JavaScript, CSS, AJAX). У своїй роботі модуль використовує дані рушія СВУ — модуль VCAEngine.
Среда визуализации и управления (СВУ) является неотъемлемой составляющей SCADA системы. Она применяется на клиентских станциях с целью доступного предоставления информации об объекте управления и выдачи управляющих воздействий на объект. В различных практических ситуациях и условиях могут применяться СВУ, построенные на различных принципах визуализации. Например, это могут быть библиотеки виджетов Qt, GTK+, wxWidgets или гипертекстовые механизмы на основе технологий HTML, XHTML, XML, CSS и JavaScript или сторонние приложения визуализации, реализованные на различных языках программирования Java, Python и т.д. Любой из этих принципов имеет свои преимущества и недостатки, комбинация которых может стать непреодолимым препятствием в возможности использования СВУ в том или ином практическом случае. Например, технологии вроде библиотеки Qt позволяют создавать высокопроизводительные СВУ, что несомненно важно для станций оператора управления технологическим процессом (ТП). Однако, необходимость инсталляции данного клиентского ПО может сделать его использование невозможным в отдельных ситуациях. С другой стороны, Web-технологии не требуют инсталляции на клиентские системы и являются предельно многоплатформенными (достаточно указать ссылку на Web-сервер в любом Web-браузере), что наиболее важно для различных инженерных и административных станций. С другой стороны, производительность и надёжность таких интерфейсов ниже, что практически исключает их использование на станциях оператора ТП.
OpenSCADA имеет предельно гибкую архитектуру, которая позволяет создавать внешние интерфейсы, в том числе и пользовательские, на любой основе и вкус. Например, среда конфигурации OpenSCADA доступна как на Qt-библиотеке, так и на Web-основе.
В тоже время, независимое создание реализаций СВУ на различной основе может повлечь за собой невозможность использования данных конфигурации одной СВУ в другой. Что неудобно и ограничено с пользовательской стороны, а также накладно в плане реализации и последующей поддержки.
З метою запобігання цих проблем, а також створення у коротші терміни повного спектру різних типів СВУ, засновано проєкт створення концепції СВУ. Результатом цього проєкту й став цей модуль безпосередньої візуалізації (на основі Web-технологій), модуль безпосередньої візуалізації Vision та рушій СВУ VCAEngine.
Даний модуль безпосередньої візуалізації СВУ призначено тільки для виконання інтерфейсів СВУ у середовищі WEB-технологій!
Інтерфейс користувача формується у WEB-браузері шляхом звернення до WEB-серверу та отримання від нього XHTML-документу за протоколом HTTP. У цьому випадку, у ролі WEB-серверу виступає OpenSCADA, яка підтримує стандартні комунікаційні механізми TCP-мереж (модуль Transport.Sockets), протокол передачі гіпертексту (модуль Protocol.HTTP), а також шифрування трафіку між браузером та сервером (Transport.SSL). Виходячи з цього, для отримання доступу до інтерфейсу користувача, який надається цим модулем, потрібно у OpenSCADA налаштувати транспорт (Transport.Sockets або Transport.SSL) у поєднані з протоколом HTTP (Protocol.HTTP). Разом з OpenSCADA постачаються конфігураційні файли, які містять налаштування Transport.Sockets для порту 10002. Відповідно, інтерфейс модуля, по замовченню, буде доступний за URL: "http://localhost:10002".
Фінальна версія цього модуля СВУ, яка побудована на основі даного модуля, забезпечить:
Перелічимо можливості, які зможе та забезпечує СВУ, побудована на основі даного проєкту:
Виконання інтерфейсу СВУ полягає в запуску нового сеансу проєкту, або підключення до існуючого, на рівні рушія СВУ (рис.2). Перед запитом на підключення до сеансу здійснюється запит на аутентифікацію користувача (рис.1). Далі, модуль безпосередньої візуалізації відображає та керує даними сеансу. Головне вікно режиму виконання даного модуля має вигляд, наведений на рисунку 3. Адміністративні користувачі ("root" або у групі "root") можуть закривати відкриті сеанси.
Інтерфейс вікна виконання повністю будується динамічно, скриптом JavaScript та виходячи із вмісту сеансу проєкту, шляхом прямих XML запитів до серверу.
Реалізовано оновлення вмісту відкритих сторінок інтерфейсу візуалізації з періодичністю виконання візуалізованого сеансу проєкту візуалізації. В процесі оновлення здійснюється:
Механізм запиту тільки змінених даних засновано на абсолютному лічильнику виконання сеансу. При внесенні реальних змін до атрибутів віджетів здійснюється запам'ятовування значення цього лічильника, що й дозволяє ідентифікувати змінені атрибути. Такий підхід дозволяє підвищити продуктивність та зменшити трафік, у випадку доступу до рушія СВУ через мережу.
Ієрархічно, модулем передбачається можливість розташування сторінок проєкту як на головному вікні виконання (рис.3), так і вкладаючи всередину віджетів контейнерів, а також шляхом відкриття додаткових вікон поверх основного.
На рядку статусу розташовуються:
Модуль підтримує багатомовність, яка вмикається динамічним перекладом повідомлень OpenSCADA. Отримана мова передається модулем Protocol.HTTP та визначається шляхом та у послідовності:
Даною версією модуля реалізовано не всі образи примітивів, закладені проєктом. Загалом, проєктом закладено примітиви:
Ідентифікатор | Найменування | Функція |
---|---|---|
ElFigure | Елементарна графічна фігура |
Примітив є основою відмальовки елементарних графічних фігур зі всілякими комбінаціями їх у одному об'єкті. Передбачається підтримка наступних елементарних фігур:
Для всіх фігур, що містяться у віджеті, встановлюються єдині властивості товщини, кольору та інше, також, передбачається можливість указання вищеперелічених атрибутів для кожної фігури окремо та їх динамізація. |
FormEl | Елемент форми |
Включає підтримку стандартних компонентів форми:
|
Text | Текст | Елемент тексту-мітка. Характеризується типом шрифту, кольором, орієнтацією та вирівнюванням. Передбачається підтримка аргументів. |
Media | Медіа | Елемент відображення растрових та векторних зображень різних форматів, програвання анімованих зображень, програвання аудіо-фрагментів та перегляд відео-фрагментів. |
Diagram | Діаграма | Елемент діаграми з підтримкою можливості відображення декількох потоків у реальному часі для: трендів (часових графіків), частотного спектру, XY діаграм. |
Protocol | Протокол | Елемент протоколу — візуалізатор повідомлень програми, з підтримкою декількох режимів роботи. |
Document | Документ | Елемент формування звітів, журналів та іншої документації на основі доступних даних. |
Box | Контейнер | Містить механізм розташування-включення інших віджетів для формування нових, більш складних, віджетів та сторінок кінцевої візуалізації. |
Function, у планах | Функція API об'єктної моделі OpenSCADA | Невізуальний віджет, на боці виконання, що дозволяє включати обчислювальні функції об'єктної моделі OpenSCADA до СВУ. |
Модулем візуалізатору надається та використовується низка специфічних атрибутів загального характеру, інформацію про які наведено у таблиці. Ці атрибути автоматично створюються візуалізатором за їх відсутності та під час першого запуску, або створюються користувачем у кадрі вказаної області, за потреби.
Ідентифікатор (область) | Ім'я | Призначення |
---|---|---|
keepAspectRatio (головна сторінка) | Зберігати пропорцію при масштабуванні | Зберігати пропорцію сторінок при масштабуванні. |
stBarNoShow (головна сторінка) | Не показувати рядок статусу | Приховати рядок статусу головного вікна. |
notify{N}, notifyVisWebVision{N} (сторінка) | Сповіщувач: тип {N} | ![]() Визначає сповіщувач та процедуру отримання ресурсу сповіщення згідно до концепції "Сигналізації (Аларми)". |
statLine (головна сторінка) | Елементи рядку статусу | ![]() Текстове поле з описом елементів рядка статусу користувача, у форматі рядка "{Id}:{Label}:{ToolTip}:{Color}:{Img}", де:
|
userSetVis (головна сторінка) | Встановлення користувача | ![]() Зміна користувача або виклик діалогу для його обрання. Варіанти значення:
if((SYS.time()-this.ownerSess().userActTm()) < 60)userSetVis = "";
else if(this.ownerSess().reqUser() != "user") userSetVis = "user";
|
prjDoc (головна сторінка) | Документ проєкту | ![]() Визначення документу проєкту виклику кнопкою рядка статусу із можливістю вимкнення-приховання кнопки за порожнього значення. Документ визначається у вигляді "{OffLine}|{OnLineOpenSCADAWiki}", до прикладу для проєкту АГЛКС — "AGLCS|Using/Model_AGLKS". Мережева частина використовується у першу чергу за її визначення. |
vs_goHttpUrl (вигляд "Кнопка" примітиву "FormEl") | Перехід за HTTP URL | ![]() Перехід на визначений URL за натисканням кнопки. |
vs_background (види "Line edit", "Text edit", "Combo box", "List", "Tree", "Table" примітиву "FormEl") | Користувацький фон | ![]() Визначає користувацький фон у формі {color}-{transp} {image}. |
vs_border (види "Line edit", "Text edit", "Combo box", "List", "Tree", "Table" примітиву "FormEl") | Користувацька границя | ![]() Визначає користувацьку границю у стандартній формі CSS {wdth}px {style} {color}. |
vs_winTitle (вид "Box") | Заголовок вікна | ![]() Значення динамічного заголовку вікна. |
Розглянемо реалізацію кожного примітиву більш детально.
Реалізовано підтримку елементарних фігур: лінії, еліптичної дуги, кривої Без'є та заливка замкнених контурів кольором та зображенням; з властивостями:
На рисунку представлено частину екрану з кадром, який містить елементарні фігури.
Реалізовано підтримку елементу тексту зі властивостями:
На рисунку представлено частину екрана з кадром, що містить приклади тексту з використанням різних параметрів.
Реалізовано підтримку елементів форми на кадрах СВУ із закладеними властивостями, включаючи наступні типи:
Реалізовано режими "Ввімкнено" та "Активний", а також передача змін та повідомлень у модель даних СВУ — рушій. Режим "Активний" призводить до встановлення курсору активності для непорожнього фону та додаткових умов різних видів "Text", "Media" та "Box":
На рисунку представлено частину екрану з кадром, що містить вищеперелічені елементи форми.
Реалізовано підтримку елементу відображення медіа-матеріалів з властивостями:
На рисунку представлено частину екрану з кадром, що містить приклади перегляду/програвання медіа-даних.
Реалізовано підтримку елементу побудови діаграм для типів "Графік", "Спектр" та "XY", з властивостями:
На рисунку представлено частину екрану з кадром, що містить приклади діаграм: "Графік", "Спектр" та "XY".
Реалізовано підтримку елементу формування протоколу з властивостями:
На рисунку представлено частину екрану з кадром, що містить приклад протоколу.
Реалізовано підтримку елементу формування звітної документації з властивостями:
У основі будь-якого документу лежить XHTML-шаблон. XHTML-шаблон це тег "body" WEB-сторінки, що містить статику документу у стандарті XHTML 1.0 та елементи виконувальних інструкцій на мові користувацького програмування OpenSCADA, у вигляді <?dp {procedure} ?>. Результуючий документ формується шляхом виконання процедур та вставки їх результату у документ.
Джерелом значень виконуваних інструкцій є атрибути віджету цього примітиву, а також всі механізми мови користувацького програмування OpenSCADA. Атрибути можуть додаватися користувачем та лінкуватися на реальні атрибути параметрів або-ж бути автономними, значення яких будуть формуватися у процедурі віджету. У випадку зі злінкованими атрибутами, значення можуть вийматися з архіву-історії.
На рисунку представлено кадр, який містить приклад документу.
Реалізовано підтримку примітиву контейнеру, що, за сумісництвом, виконує роль сторінок проєктів. Даний примітив є єдиним елементом-контейнером, який може включати у себе посилання на кадри з бібліотеки, формуючи тим самим користувацькі елементи потрібної конфігурації. Примітив реалізує передбачені проєктом властивості. Перелічимо, по пунктах, властивості даного примітиву:
Для конфігурації та керування цим модулем, надається конфігураційна сторінка інтерфейсу керування OpenSCADA (Рис.4) де Ви можете здійснювати:
Ви можете глибоко налаштувати основний інтерфейс модуля замінивши та доповнивши код HTML і JavaScript шляхом розташування до теки вашого проєкту OpenSCADA файлів WebVisionVCA.html і WebVisionVCA.js, які початково можете отримати з вихідного коду модуля — UI.WebVision.
31.07.2019
GROUNDS: The Web-sessions may create many objects servicing the VCA-session for generating images, processing documents and performing other background functions of the end user Web-interface. Moreover, in difference to Vision, the VCA-sessions may be created, closed and recreated again multiple times for different users and remote hosts. In the time the memory heap is affected by the memory fragmentation, so the program consumes more memory than at the start. The table below represents the phenomenon for different environments and the first page of the DemoDB (AGLKS) project reopening:
Environment | Initially, MB | Iter. 1, MB | Iter. 2, MB | Iter. 3, MB | Iter. 4, MB | Iter. 5, MB | Resume | |
---|---|---|---|---|---|---|---|---|
Complete creation the Web- and VCA-sessions | ||||||||
Debian 10 amd64, GLibC 2.28, GCC 8.3.0 + MALLOC_ARENA_MAX=2 | 181 | 189 | 190 | 195 | 195 | 194 | Satiated on the iteration 3, base consumption 8 MB, extra consumption 5 MB (62.5 %), liboscada.so 3.5 MB, ui_WebVision.so 0.75 MB | |
Debian 10 amd64, GLibC 2.28, GCC 8.3.0 + MALLOC_ARENA_MAX=1 | 177 | 185 | 186 | 186 | 185 | 186 | Satiated on the iteration 2, base consumption 8 MB, extra consumption 1 MB (13 %), liboscada.so 3.5 MB, ui_WebVision.so 0.75 MB | |
Debian 9 amd64, GLibC 2.28, GCC 8.3.0 + MALLOC_ARENA_MAX=1 | 160 | 168 | 168 | 168.5 | 168.5 | 168.5 | Satiated on the iteration 1, base consumption 8 MB, extra consumption 0.5 MB (6 %), liboscada.so 3.5 MB, ui_WebVision.so 0.75 MB | |
Debian 10 amd64, GLibC 2.28, GCC 8.3.0 + optional background objects in WebVision | 184 | 194.5 | 200 | 207 | 207 | 212.5 | Satiated on the iteration 5, base consumption 10.5 MB, extra consumption 18 MB (171 %), liboscada.so 3.5 MB, ui_WebVision.so 0.75 MB | |
Debian 10 amd64, GLibC 2.28, GCC 8.3.0 | 182 | 191.5 | 199 | 206 | 212 | 212 | Satiated on the iteration 4, base consumption 9.5 MB, extra consumption 20 MB (200 %), liboscada.so 3.5 MB, ui_WebVision.so 0.74 MB | |
Debian 9 amd64, GLibC 2.24, GCC 6.3.0 | 160 | 170 | 178 | 179 | 183 | 185 | Satiated on the iteration 5, base consumption 10 MB, extra consumption 15 MB (150 %), liboscada.so 3.5 MB, ui_WebVision.so 0.72 MB | |
Debian 8 amd64, GLibC 2.19, GCC 4.9.2 | 125.5 | 133 | 139 | 139 | 139 | 139 | Satiated on the iteration 2, base consumption 7.5 MB, extra consumption 6 MB (80 %), liboscada.so 3.8 MB, ui_WebVision.so 0.79 MB | |
Debian 7 amd64, GLibC 2.13, GCC 4.7.2 | 101 | 108 | 111 | 112 | 112 | 112 | Satiated on the iteration 2, base consumption 7 MB, extra consumption 4 MB (57 %), liboscada.so 3.4 MB, ui_WebVision.so 0.85 MB | |
Debian 10 i386, GLibC 2.28, GCC 8.3.0 + MALLOC_ARENA_MAX=1 | 144 | 152 | 152 | 152 | 152 | 152 | Satiated on the iteration 1, base consumption 8 MB, extra consumption 0 MB (0 %), liboscada.so 3.7 MB, ui_WebVision.so 0.9 MB | |
Debian 9 i386, GLibC 2.24, GCC 6.3.0 + MALLOC_ARENA_MAX=1 | 126.5 | 132.5 | 133 | 133 | 133 | 133 | Satiated on the iteration 1, base consumption 6 MB, extra consumption 0.5 MB (8 %), liboscada.so 3.7 MB, ui_WebVision.so 0.9 MB | |
Debian 10 i386, GLibC 2.28, GCC 8.3.0 | 151 | 158 | 162.5 | 166 | 166 | 166 | Satiated on the iteration 3, base consumption 7 MB, extra consumption 8 MB (114 %), liboscada.so 3.7 MB, ui_WebVision.so 0.9 MB | |
Debian 9 i386, GLibC 2.24, GCC 6.3.0 | 125 | 131 | 132 | 136 | 136 | 139 | Satiated on the iteration 5, base consumption 6 MB, extra consumption 8 MB (133 %), liboscada.so 3.7 MB, ui_WebVision.so 0.9 MB | |
Debian 8 i386, GLibC 2.19, GCC 4.9.2 | 92.5 | 99 | 101.5 | 103 | 103.5 | 103.5 | Satiated on the iteration 2, base consumption 6.5 MB, extra consumption 4.5 (69 %), liboscada.so 3.6 MB, ui_WebVision.so 0.94 MB | |
Debian 7 i386, GLibC 2.13, GCC 4.7.2 | 70 | 76 | 76 | 76 | 77 | 77 | Satiated on the iteration 2, base consumption 6 MB, extra consumption 1 MB (16 %), liboscada.so 3.6 MB, ui_WebVision.so 0.9 MB | |
ALTLinux 6 i386, GLibC 2.11.3, GCC 4.5.4 | 69 | 74 | 75 | 75 | 75 | 75 | Satiated on the iteration 2, base consumption 5 MB, extra consumption 1 MB (20 %), liboscada.so 2.3 MB, ui_WebVision.so 0.9 MB | |
Creation only VCA-session, from remote connection to the visualizer server | ||||||||
Debian 10 amd64, GLibC 2.28, GCC 8.3.0 | 180 | 186 | 186 | 186 | 186 | 186 | Satiated on the iteration 1, extra consumption 0.2 MB (3 %) | |
Debian 7 amd64, GLibC 2.13, GCC 4.7.2 | 100 | 104 | 105 | 105 | 105 | 105 | Satiated on the iteration 1, extra consumption 1 MB (25 %) | |
Debian 10 i386, GLibC 2.28, GCC 8.3.0 | 148 | 154 | 155 | 155 | 155 | 155 | Satiated on the iteration 1, extra consumption 1 MB (16 %) | |
Debian 7 i386, GLibC 2.13, GCC 4.7.2 | 69 | 72 | 72 | 72 | 72 | 72 | Satiated on the iteration 1, extra consumption 0 MB (0 %) |
CONCLUSION: We see obvious degradation in the memory effectivity on the last Debian releases starting at Debian 8 (GLibC 2.19) on I386 and Debian 9 (GLibC 2.24) on AMD64, when the memory consumption increased up to 200% after 3,4 free-allocate iterations of the same data. To more presenting of the problem there have built follow images on the data basis:
MEASURES:
20.06.2013
GROUNDS: At working with the board MOPSlcdLX, attention was drawn to the heavy load of the task of forming full-size trends. As it turned out later, a large load is created by the formation of a PNG image in the GD2 library, or rather, the packing procedure of ZLib. The subject analysis of the performance of the formation of images of various formats on this board is summarized in the table below:
Format | Trend building, milliseconds | Converting to the image format, milliseconds | Size of the image, bytes |
---|---|---|---|
PNG (0) | 200 | 800 | 1700365 |
PNG (1) | 200 | 690 | 24000 |
PNG (-1) | 200 | 1000 | 14800 |
PNG (9) | 200 | 1900 | 13354 |
JPEG (-1) | 200 | 180 | 53157 |
GIF | 200 | 380 | 14300 |
CONCLUSION: As can be seen from the table above, the operation of forming PNG as a whole is resource-intensive and the most optimal level of compression is "1". At the same time, the formation of JPEG and GIF is much faster, but these image formats have a number of critical flaws, namely: JPEG does not have an alpha channel (transparency), and GIF is limited by the number of colors, which in both cases leads to loss of transparency and distortion of text smoothing and images in general.
MEASURES: The ability to select the compression level for the generated PNG images is added, and the default value is set to the optimal level "1". The implementation of the formation of the "Diagram" primitive on the browser side in the "svg" or "canvas" tags is planned.
На цьому етапі модуль може бути використаний для побудови реальних інтерфейсів користувача з підтримкою основних функцій. Однак, окремі проблеми можуть виникати як з причини недопрацьованості, так й різниці браузерів. На цей час достатньо якісно забезпечено працездатність на браузерах: Chromium (Google Chrome), FireFox, Opera, Konqueror.
Modules/WebVision/uk - GFDL | May 2024 | OpenSCADA 0.9.7 |