Модуль | Ім'я | Версія | Ліцензія | Джерело | Мови | Платформи | Тип | Автор | Опис |
---|---|---|---|---|---|---|---|---|---|
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).
Головна вкладка конфігурації модуля (рис.2) містить стан модуля, надає можливість обрання сторінки по замовченню та дозволяє формувати перелік користувацьких сторінок.
WWW-сторінки
Модуль надає можливість створення реалізацій WWW-сторінок у об'єкті "Користувацька WWW-сторінка" (рис.3).
Головна вкладка містить основні налаштування користувацької WWW-сторінки:
- Розділ "Стан" — містить властивості, які характеризують стан сторінки: статус, "Ввімкнено", ім'я БД (яка містить конфігурацію і з відстеженням наявності даних у різних сховищах та наданням послідовного видалення дублікатів) і дату останньої модифікації.
- Ідентифікатор, ім'я і опис сторінки.
- Стан "Ввімкнено", у який переводити сторінку при завантажені.
- Мова прямої процедури або DAQ-Шаблон, пов'язаний зі сторінкою.
Всі запити до користувацьких сторінок спрямовуються до процедури обробки запитів користувацької сторінки, або до процедури DAQ-Шаблону, яка представлена на вкладці "Програма" об'єкту сторінки користувача (рис.4). У випадку з DAQ-Шаблоном також надається вкладка конфігурації шаблону (рис.5).
Вкладка процедури обробки запитів до користувацької сторінки містить:
- Таблицю контексту даних процедури. Переважно має сенс лише при роботі за шаблоном і де можна контролювати цей процес обробки, включно з можливістю втручання через зміну значень даних.
- Текст прямої процедури сторінки, відсутній у режимі роботи за шаблоном.
- Зв'язки на дані підсистеми "Збір Даних", які видимі і доступні для визначення у режимі роботи за шаблоном та у ввімкненому стані об'єкту сторінки.
Для прямої процедури обробки передвизначено і обов'язкові або опціональні до створення у шаблоні наступні атрибути обміну з протоколом 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" відповідь не формується!