Модуль |
Ім'я |
Версія |
Ліцензія |
Джерело |
Мови |
Платформи |
Тип |
Автор |
Опис
|
WebUser |
WWW-сторінка користувача
|
2.0 |
GPL2 |
ui_WebUser.so |
en,uk,ru,de |
x86,x86_64,ARM
|
Користувацькі інтерфейси |
Роман Савоченко |
Забезпечує створення власних WWW-сторінок на внутрішній мові OpenSCADA.
|
Модуль надає користувачу механізм створення WWW-сторінок, а також дозволяє обробляти інші WWW-запити на внутрішній мові OpenSCADA, зазвичай це JavaLikeCalc, не залучаючи при цьому низькорівневого програмування. У ролі обробнику сторінок, модуль дозволяє використовувати стандартні DAQ-Шаблони. Використання DAQ-Шаблонів дозволяє створювати бібліотеки WWW-сторінок і здійснювати виклик їх у цьому модулі багаторазово, як їх реалізації, а також надає контекст даних виконання шаблону із їх зв'язуванням з даними підсистеми "Збір Даних".
Окрім приналежності модуля до OpenSCADA, він також належить і є модулем модуля транспортного протоколу Protocol.HTTP. Власне, виклик модулю WebUser здійснюється із Protocol.HTTP і за посередництвом розширеного механізму комунікації — експортованою функцією HTTP() цього модуля.
Адресація сторінок починається із другого елементу URI. Що пов'язано із тим, що перший елемент URI використовується для ідентифікації самого модуля користувацького WWW-інтерфейсу. Наприклад, URL http://localhost.localdomain:10002/WebUser/UserPage можна розшифрувати як виклик користувацької сторінки "UserPage" цього модуля на хості "localhost.localdomain" через порт 10002. У випадку відсутності другого елементу URI та вказання на відображення індексу користувацьких сторінок у конфігурації — формується індекс сторінок (рис.1).
Рис.1. Індекс користувацьких сторінок.
Головна вкладка конфігурації модуля (рис.2) містить стан модуля, надає можливість обрання сторінки по замовченню та дозволяє формувати перелік користувацьких сторінок.
Рис.2. Основна вкладка конфігурації модуля.
WWW-сторінки
Модуль надає можливість створення реалізацій WWW-сторінок у об'єкті "Користувацька WWW-сторінка" (рис.3).
Рис.3. Головна вкладка конфігурації користувацької сторінки.
Головна вкладка містить основні налаштування користувацької WWW-сторінки:
- Розділ "Стан" — містить властивості, які характеризують стан сторінки: статус, "Ввімкнено", ім'я БД (яка містить конфігурацію і з відстеженням наявності даних у різних сховищах та наданням послідовного видалення дублікатів) і дату останньої модифікації.
- Ідентифікатор, ім'я і опис сторінки.
- Стан "Ввімкнено", у який переводити сторінку при завантажені.
- Мова прямої процедури або DAQ-Шаблон, пов'язаний зі сторінкою.
Всі запити до користувацьких сторінок спрямовуються до процедури обробки запитів користувацької сторінки, або до процедури DAQ-Шаблону, яка представлена на вкладці "Програма" об'єкту сторінки користувача (рис.4). У випадку з DAQ-Шаблоном також надається вкладка конфігурації шаблону (рис.5).
Рис.4. Вкладка "Процедура" об'єкту користувацької WWW-сторінки.
Вкладка процедури обробки запитів до користувацької сторінки містить:
- Таблицю контексту даних процедури. Переважно має сенс лише при роботі за шаблоном і де можна контролювати цей процес обробки, включно з можливістю втручання через зміну значень даних.
- Текст прямої процедури сторінки, відсутній у режимі роботи за шаблоном.
- Зв'язки на дані підсистеми "Збір Даних", які видимі і доступні для визначення у режимі роботи за шаблоном та у ввімкненому стані об'єкту сторінки.
Для прямої процедури обробки передвизначено і обов'язкові або опціональні до створення у шаблоні наступні атрибути обміну з протоколом HTTP:
- Результат (rez) <Рядок> — результат оброки, за замовченням — "200 OK"; у режимі DAQ-Шаблону маєте писати сюди прямо, не оператором "return"; для запобігання надсилання загорнутої у HTTP відповіді ставте тут порожній рядок, тобто відповідь надсилайте прямо через SYS.Transport["Modul"]["in_Transp"].writeTo();
- Запит HTTP (HTTPreq) <Рядок> — метод HTTP запиту на кшталт GET, POST, ...;
- URL (url) <Рядок> — URI запиту;
- WWW-сторінка (page) <Рядок> — вміст сторінки Get/Post, як для запиту так і відповіді;
- Відправник (sender) <Рядок> — відправник запиту;
- Користувач (user) <Рядок> — аутентифікований користувач;
- HTTP змінні (HTTPvars) <Об'єкт> — HTTP змінні; змінені і додані змінні (окрім "Date", "Server", "Accept-Ranges" та "Content-Length") будуть розташовані у пакеті відповіді;
- Параметри URL (URLprms) <Об'єкт> — параметри URL;
- Елементи вмісту (cnts) <Об'єкт::Array<XMLNodeObj>> — елементи вмісту для POST;
- Цей об'єкт (this) <Об'єкт> — вказівник на об'єкт цієї сторінки;
- Об'єкт протоколу (prt) <Об'єкт> — вказівник на об'єкт вхідної частини HTTP-протоколу;
- Об'єкт транспорту (tr) <Об'єкт> — вказівник на об'єкт вхідного транспорту до вхідної частини HTTP-протоколу;
- Планування наступного сервісного виклику (schedCall) <Ціле> — запишіть тут значення часу у секундах для планування виконання контексту процедури у сервісному виклику; сервісні виклики зазвичай здійснюються із періодичністю 10 секунд, тож ви можете планувати такі виклики не частіше за 10 секунд.
Загальний сценарій запиту користувацької сторінки:
- Зовнішня мережева станція формує HTTP запит з URI виду "/WebUser/{UserPage}", який попадає на транспорт OpenSCADA із значенням поля конфігурації "Протокол", рівного "HTTP".
- Транспорт спрямовує запит на модуль транспортного протоколу "Protocol.HTTP".
- Модуль транспортного протоколу спрямовує запит цьому модулю відповідно до першого елементу URI.
- Цей модуль обирає об'єкт сторінки користувача, яка вказана у другому елементі URI.
- Здійснюється ініціалізація змінних HTTP-протоколу для процедури сторінки:
- HTTPreq — встановлюється у значення рядка HTTP-Методу (на кшталт "GET", "POST"), залежно від типу запиту;
- url — адреса запитаного ресурсу (URI);
- page — вхідний одиничний вміст і сторінка, що передається, для методу "POST";
- sender — адреса відправника запиту;
- user — ідентифікатор аутентифікованого користувача, якщо аутентифікація мала місце;
- HTTPvars — розібраний перелік змінних протоколу HTTP у вигляді властивостей об'єкту;
- URLprms — розібраний перелік параметрів URL у вигляді властивостей об'єкту;
- cnts — розібрані елементи вмісту для POST, у Array<XMLNodeObj>, з вмістом елементів у тексті з властивостями у атрибутах XMLNodeObj.
- Виклик процедури на виконання, яка, обробивши запит, формує вміст сторінки у "page" і результат запиту у "rez".
- На завершення формується відповідь з кодом повернення HTTP із "rez" і вмістом із "page", а також зміненими та доповненими змінними протоколу HTTP із "HTTPvars". Для порожнього "rez" відповідь не формується!