OpenSCADA

Модули/Движок Среды Визуализации и Управлений (СВУ)

This page is a translated version of the page Modules/VCAEngine and the translation is 83% complete.

English • ‎mRussian • ‎Українська
Модуль Имя Версия Лицензия Источник Языки Платформы Тип Автор
VCAEngine Движок Среды Визуализации и Управления 7.14 GPL2 ui_VCAEngine.so en,uk,ru,de x86,x86_64,ARM UI Roman Savochenko
  Maxim Lysenko (2011-2012) — the page initial translation
Description
The main engine of the visual control area.
  • Sponsored by, for finishing the changes obtaining mechanism on the visualisers runtime without spare requests and lost data on 1.5 HD[!]: Vinnica Poultry Farm
  • To Do:
- append the image files edition user API for raster (PNG, JPEG, GIF), by LibGD2, and vector (SVG):
- implement the main functions of the GD object (into Special.FLibSYS).
... for Vision also ...
- move the runtime requests to VCAEngine in the asynchronous mode;
 !> has a problem with processing recursive events into event(), in the case of the mouse release events loss in processing the pressing mouse event.
- implement the background execution of the edited pages in the development mode, for the visual diagram forming jointly BlockCalc and DAQ-sources at all.
... for Vision and WebVision also ...
- append for the user-space global menu by the project-specific properties;
- develop the block diagrams forming (dynamic frames) from the GUI;
* adapt the widget libraries and the VCA projects to the inter-host copy.

Модуль предоставляет в OpenSCADA движок среды визуализации и управления (СВУ). Сам модуль не реализует визуализации СВУ, а содержит данные в соответствии с концепцией "Модель/данные – Интерфейс". Визуализация данных этого модуля выполняется модулями визуализации СВУ, например, модулем Vision и WebVision.

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

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

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

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

Contents

1 Назначение

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

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

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

  1. формирование из шаблонных кадров, путём назначения динамики и без графической конфигурации;
  2. графическое формирование новых кадров, путём использования готовых элементов визуализации из библиотеки — мнемосхемы;
  3. формирование, в библиотеке, новых: кадров, шаблонных кадров и элементов отображения.


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

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

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

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

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

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

Кадры и пользовательские элементы размещаются в библиотеках виджетов. Из элементов этих библиотек формируются проекты интерфейсов конечной визуализации СВУ. На основе-же этих проектов формируются сеансы визуализации.

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

VCA struct ru.png

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


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

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

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

Собственно сам кадр также является виджетом, который используется в роли конечного элемента визуализации. А это значит, что библиотеки виджетов могут хранить и заготовки кадров, и шаблоны результирующих страниц пользовательского интерфейса.

Кадры и виджеты являются пассивными элементами, которые обычно не содержат связей с динамикой и другими кадрами, а только предоставляют информацию о свойствах и характере динамики(конфигурации), подключаемой к свойствам. Активированные кадры, содержащие ссылки на динамику и активные связи, формируют пользовательский интерфейс и хранятся в проектах. В некоторых случаях возможно прямое назначение динамики в заготовках кадров.

Производные кадры/виджеты могут содержать вложенные виджеты, которые могут быть склеены-связаны один с другим логикой, с помощью языка пользовательского программирования OpenSCADA.

VCA widget ru.png

Виджет является элементом, посредством которого обеспечивается:

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


3.2 Проект

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

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

Страница, как и виджет на котором она основана, предоставляет возможность привязки динамики к описанным в ней свойствам — связи, которые могут быть установлены динамикой или константами. Кроме того, связывание непосредственно на уровне страницы проекта является предпочтительным, чем осуществление этого на уровне виджетов библиотек.

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

VCA prog tree ru.png

Предусмотрены следующие специальные свойства страниц:

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

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

Логика определения способа открытия страниц работает следующим образом:


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

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

Между виджетами, на различных уровнях иерархии, в конечном счёте выстраиваются достаточно сложные наследственные связи, которые определяются возможностью использования одних виджетов другими, начиная с библиотечного виджета и заканчивая виджетом сеанса. Для разъяснения этих особенностей взаимодействия, на рисунке изображена исчерпывающая карта "использующего" наследования.

VCA map inher ru.png

На уровне сеансов, виджет содержит объект значений процедуры обсчёта. Этот объект инициируется и используется в случае наличия самой процедуры вычисления. В момент инициализации создаётся перечень параметров процедуры и выполняется её компиляция с этими параметрами, в модуле, реализующем выбранный язык программирования и с названием результирующей процедуры в виде закодированного полного имени виджета. Скомпилированная функция подключается к объекту значений процедуры обсчёта, а далее выполняется её вычисление с периодом сеанса.

Вычисление и обработка виджета выполняется в следующей последовательности:

Объекты сеанса наследуются от абстрактного объекта "Widget" и используют соответствующие объекты проекта. Так, сеанс "Session" использует проект "Project" и формирует на основе него развёрнутое дерево. Страница проекта "Page" прямо используется страницей сеанса "SessPage". Остальные объекты "SessWdg" разворачиваются в соответствии с иерархией элементов страницы.

В дополнение к стандартным свойствам абстрактного виджета "Widget", элементы страницы и сами страницы сеанса получают свойства: хранения объекта значений вычислительной процедуры, обсчёта процедур и механизм обработки событий. Страницы сеанса, в дополнение ко всему, содержат контейнер следующих по иерархии страниц. Сеанс, в целом, вычисляется с указанной периодичностью и в последовательности:

Такая политика позволяет обходить страницы в соответствии с их иерархией, а событиям в виджетах "всплывать" на верх за одну итерацию.

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


3.4 Стили

Известно, что человек может иметь индивидуальные особенности восприятия графической информации. Если эти особенности не учитывать то можно получить неприятие и отторжение пользователя к интерфейсу ВУ. Такое неприятие и отторжение может привести к фатальным ошибкам при управлении ТП, а также травмировать человека постоянной работой с интерфейсом. В SCADA системах приняты соглашения, которые регламентируют требования по созданию унифицированного интерфейса ВУ, нормально воспринимаемого большинством людей. При этом, практически отсутствует учёт особенностей людей с некоторыми отклонениями.

С целью учесть это обстоятельство, и предоставить возможность централизованно и просто изменять визуальные свойства интерфейса, проектом реализуется менеджер стилей интерфейса визуализации.

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

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

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

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

При запуске проекта на исполнения будет использован установленный в проекте стиль. В последствии, пользователь может выбрать стиль из перечня доступных. Выбранный пользователем стиль будет сохранён и использован при следующем запуске проекта.


3.5 События, их обработка и карты событий

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

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

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

В целом, предусмотрены четыре типа событий:

Само событие представляет недостаточно информации, особенно если его обработка происходит на уровнях выше. Для однозначной идентификации события и его источника, событие, в целом, записывается следующим образом: "ws_BtPress:/curtime". Где:

ws_BtPress — событие;
/curtime — путь к дочернему элементу, сгенерировавшее событие.

В таблице 3.5 приведён перечень стандартных событий, поддержка которых должна быть обеспечена в визуализаторах СВУ.

Table 3.5. Standard events

Identifier Description
Keyboard events: key_[pres|rels][Ctrl|Alt|Shift]{Key}
*SC#3b Scan-code of the key.
*#2cd5 Code of the unnamed key.
*Esc "Esc".
*BackSpace Removing of the previous character — "<--".
*Return, *Enter Enter — "Enter".
*Insert Insertion — "Insert".
*Delete Deleting — "Delete".
*Pause Pause — "Pause".
*Print Print of the screen — "Print Screen".
*Home Home — "Home".
*End End — "End".
*Left To the left — "<-".
*Up To the up — '^'.
*Right To the right — "->".
*Down To the down — '\/'.
*PageUp Page up — "PageUp".
*PageDown Page down — "PageDown".
*F1 ... *F35 Function key from "F1" to "F35".
*Space Space — ' '.
*Apostrophe Apostrophe — '`'.
*Asterisk Asterisk on the additional field of the keyboard — '*'.
*Plus Plus on the additional field of the keyboard — '+'.
*Comma Comma — ','.
*Minus Minus — '-'.
*Period Period — '.'.
*Slash Slash — '\'.
*0 ... *9 Number from '0' to '9'.
*Semicolon Semicolon — ';'.
*Equal Equal — '='.
*A ... *Z Keys of Latin alphabet from 'A' to 'Z'.
*BracketLeft Left square bracket - '['.
*BackSlash Backslash — '/'.
*BracketRight Right square bracket — ']'.
*QuoteLeft Left quote — .
Keyboard focus events.
ws_FocusIn Focus is obtained by the widget.
ws_FocusOut Focus is lost by the widget.
Mouse events:
key_mouse[Pres|Rels][Left|Right|Midle] Pressed/released the mouse button.
key_mouseDblClick Double-click the left mouse button.
Events of quietance on the side of the visualizer.
ws_alarmChange Notifies about the alarm status change, the attribute "alarmSt".
ws_alarmLev Quietance of all violations by all notices methods and types.
ws_alarmNtf{N} Quietance of all violations by the type {N} (0...7).
Events of the elementary figure primitive ElFigure:
ws_Fig[Left|Right|Midle|DblClick] Activating of the figures (fills) by the mouse button.
ws_Fig{N}[Left|Right|Midle|DblClick] Activating of the figure (fill) N by the mouse button.
Events of the form element primitive FormEl:
ws_LnAccept A new value in the input line is set.
ws_TxtAccept The value of the text editor is changed.
ws_ChkChange The state of the flag is changed.
ws_BtPress The button is pressed.
ws_BtRelease The button is released.
ws_BtToggleChange The button toggle is changed.
ws_BtMenu={Item} Selection of the menu Item on the button.
ws_BtLoad The selected file loaded.
ws_CombChange The value of the combo box is changed.
ws_ListChange The current list item is changed.
ws_TreeChange The current tree item is changed.
ws_TableChangeSel The table item selection is changed.
ws_TableEdit_{colN}_{rowN} The table cell ({colN}:{rowN}) is edited.
ws_SliderChange The slider position is changed.
Events of the media content primitive Media:
ws_MapAct{N}[Left|Right|Midle] Media area with the number N is activated by the mouse button.
ws_MediaFinished Media-stream play is finished.

События являются основным механизмом уведомления и активно используются для осуществления взаимодействия с пользователем. Для обработки событий предусмотрены два механизма:

Механизм "Сценарий управления открытием страниц" основан на базовом атрибуте виджета "evProc", в котором может описываться открытие страниц. Сценарий этого атрибута записывается в виде списка команд с синтаксисом: "{event}:{evSrc}:{com}:{prm}". Где:

Реализованы следующие команды:

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

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

Исходно: /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}"
Где:

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

Формирование сигнала и получение его визуализатором.
Формирование сигнала производится самим виджетом, путём установки собственного атрибута "alarm" нужным образом и, в соответствии с ним, автоматически устанавливается атрибут "alarmSt" текущего и вышестоящих виджетов. Визуализаторы получают уведомление о сигнале с помощью стандартного механизма уведомления об изменении атрибутов виджетов.

Учитывая то, что обработка условий сигнализации осуществляется в виджетах, страницы, содержащие объекты сигнализации, должны исполняться в фоне, независимо от открытости их в данный момент. Это осуществляется путём установки флага исполнения страницы в фоне.

Хотя механизм сигнализации и построен в среде визуализации, возможность формирования невизуальных элементов сигнализации остаётся, например, путём создания страницы, которая никогда не будет открываться.

Квитация
Квитация (от quietance) — процесс подтверждения факта того, что оперативный персонал обратил внимание на нарушение в работе ТП. Обычно этот процесс подразумевает принятие мер оператором для устранения нарушения и нажатие соответствующей кнопки прекращения сигнализации.

Квитация производится путём указания корня ветви виджетов и типов уведомления, что позволяет реализовать квитацию на стороне визуализатора как по группам, например, по объектам сигнализации, так и индивидуально по объектам источника. При этом можно независимо квитировать разные типы сигнализаций. Установка квитации производится простой модификацией атрибута "alarmSt".

Пример скрипта, для работы с сигналами, приведён ниже:

//Выделение факта наличия сигнализаций разных способов-типов уведомления
cvt_light_en = alarmSt&0x100; cvt_alarm_en = alarmSt&0x200; cvt_sound_en = alarmSt&0x400;
//Выделение факта наличия несквитированных сигнализаций разных способов уведомления
cvt_light_active = alarmSt&0x10000; cvt_alarm_active = alarmSt&0x20000; cvt_sound_active = alarmSt&0x40000;
//Обработка событий кнопок квитации и квитация разных способов уведомлений
for(ev_rez = "", off = 0; (sval=event.parse(0,"\n",off)).length; ) {
  if(sval == "ws_BtPress:/cvt_light") alarmSt = 0x1000001;
  else if(sval == "ws_BtPress:/cvt_alarm") alarmSt = 0x1000002;
  else if(sval == "ws_BtPress:/cvt_sound") alarmSt = 0x1000004;
  else ev_rez += sval + "\n";
}
event = ev_rez;

Внешние методы уведомления
Основным и типовым способом уведомления является дисплейная световая сигнализация аварийными цветами и их динамикой у элементов визуализации, которая присутствует всегда и не требует специфической конфигурации. Однако, часто нужны уведомления внешнего типа, например: внешней лампой, бузером PC или "ревуном", произвольным звуком, синтезированной речью и т.д.

Для осуществления такой возможности, внешние способы уведомления, и соответствующие им типы уведомления, свободно описываются для сервера визуализации и самого визуализатора. На стороне сервера визуализации описывается формирование/получение ресурса уведомления и само уведомление. На стороне визуализатора описывается уведомление согласно ресурсам сервера визуализации.

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

//flags=notifyServ[{DL}][|resource[|queue[|qMergeMess]]];
//resStatic={ResourceFile}
if(doRes) { Текст команды формирования ресурса. }
if(doNtf) { Текст команды уведомления. }
//flags=notify[{DL}][|resource[|queue[|quietanceRet]]];
//name={Имя уведомителя}
//ico={Имя иконки}
{ Текст команды уведомления для любого или конкретного визуализатора. }

Flags:

Наличие поля "resStatic" включает получение ресурса непосредственно из таблицы ресурсов или файла, указывается в способ подобный примитиву "Медиа".

Переменные обмена:

The examples and comments to work of the typical notification methods:

  • alarm = "10|Prm||0x02"
  • notifyVisVision1 | notify1 =
//flags=notify0|notifyServ0
if(en && (ntfPrg=SYS.system("which beep")).length &&
    (SYS.system("test -s "+prcID+".pid",true) ||		//No PID file
     SYS.system("ps -A -o \"pid cmd\" | grep \"^ *$(cat "+prcID+".pid).*"+ntfPrg.parseLine(0)+"\" > /dev/null",true)) )	//No notify already
{
    ntfPrg = ntfPrg.parseLine(0);
    SYS.system(ntfPrg+" -f 1000 -l 100000 &\necho $! > "+prcID+".pid", true);
}
else if(!en && !SYS.system("test -s "+prcID+".pid",true))
    SYS.system("kill $(cat "+prcID+".pid); rm "+prcID+".pid "+prcID+".res;", true);
  • notifyVisVision1 | notify1 =
#!/bin/sh
#flags=notify0|notifyServ0
if test $en = 1; then
    ntfPrg=$(which beep)
    #No PID file || No notify already
    if test ! -s $prcID.pid || ! ps -A -o "pid cmd" | grep "^ *$(cat $prcID.pid).*$ntfPrg" > /dev/null; then
      $ntfPrg -f 1000 -l 100000 &
      echo $! > $prcID.pid
    fi
elif test -s $prcID.pid; then
    kill $(cat $prcID.pid)
    rm $prcID.pid $prcID.res
fi
  • alarm = "10|Prm||0x04"
  • notify2 | notifyVisVision2 =
//flags=notify2|notifyServ2
if(en) SYS.system("play -q alarm.ogg");
  • notify2 | notifyVisVision2 =
#!/bin/sh
#flags=notify2|notifyServ2
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|Text message of the speech synth|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|notifyServ2|resource
if(doRes) res = SYS.fileRead("alarm.ogg");  //Insert here a different method of the generation
if(doNtf && en && res.length) {
  SYS.fileWrite("tmpPlay", res);
  SYS.system("play -q tmpPlay");
  SYS.fileRemove("tmpPlay");
}
  • notify2 =
#!/bin/sh
#flags=notify2|notifyServ2|resource
if test $doRes = 1; then cp -f alarm.ogg $res; fi  #Insert here a different method of the generation
if test $doNtf = 1 -a $en = 1 -a -s $res; then play -q $res; fi
  • 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|Text message of the speech synth|0x04"
  • notify2 =
//flags=notify2|notifyServ2|queue
if(doRes && mess.length) {
 SYS.fileWrite("tmpText", mess);
 SYS.system("text2wave tmpText -o tmpWAV");
 res = SYS.fileRead("tmpWAV");
 SYS.fileRemove("tmpText"); SYS.fileRemove("tmpWAV");
}
if(doNtf && en && res.length) {
 SYS.fileWrite("tmpPlay", res);
 SYS.system("play -q tmpPlay");
 SYS.fileRemove("tmpPlay");
}
  • notify2 =
#!/bin/sh
#flags=notify2|notifyServ2|queue
if test $doRes = 1 -a "x" != "x$mess"; then
 echo $mess > tmpText
 text2wave tmpText -o $res
 rm tmpText
fi
if test $doNtf = 1 -a $en = 1 -a -s $res; then play -q $res; fi
  • 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]}{остальные}", где каждый элемент состоит из двух признаков доступа, для которых принята следующая интерпретация:

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

В режиме исполнения работают права, описанные в компонентах интерфейса, которые предусматривают возможность наследования владельца и прав, сверху вниз. Причём, по умолчанию, наследование включено в каждом виджете, а значит — они получат владельца и права проекта. В тоже время, прямая установка прав составного виджета распространит их на все компоненты этого виджета.


3.8 Связывание с динамикой

Для предоставления в интерфейс визуализации актуальных данных, должны использоваться данные подсистемы "Сбор данных (DAQ)". Природа этих данных следующая:

  1. параметры, содержащие некоторое количество атрибутов;
  2. атрибуты параметра могут предоставлять данные пяти базовых типов: Логический, Целый, Вещественный, Строковый и Объект;
     которые дополнено СВУ модификаторами: "Выбирается"; вариантами Строки: "Текст", "Перевод", "Цвет", "Изображение", "Шрифт", "Адрес"; вариантами Целого: "ДатаВремя".
  3. атрибуты параметра могут иметь архив (историю);
  4. атрибуты параметра могут быть на чтение, запись и с полным доступом.

Учитывая первый пункт, нужно обеспечить возможность группового назначения ссылки. Для этого используем концепцию логического уровня.

В соответствии с пунктом 2, связи обеспечивают прозрачное преобразование типов и не требуют специальной конфигурации.

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

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

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

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

Если в колонке "Обработка" стоит true, то в вычислительной процедуре становится доступной переменная {идентификатор виджета}_{идентификатор атрибута}, например cw_value.

Колонка "Конфигурация" позволяет указать тип связи атрибута виджета:

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

Установка связей может быть нескольких типов, который определяется префиксом:

Обработка связей происходит с периодичностью вычисления виджета, в порядке:

На рисунке представлена вкладка связей с групповым назначением атрибутов, путём указания только параметра. На следующем рисунке представлено индивидуальное назначение атрибутов.

Рисунок. Вкладка "Связи" страницы конфигурации виджета c групповым назначением атрибутов путём указания только параметра.
Рисунок. Вкладка "Связи" страницы конфигурации виджета c индивидуальным назначением атрибутов.

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

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

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

Рассмотрим пример, когда имеется кадр общего назначения "Панель контроля графиком" и множество "Графиков" на разных кадрах. "Панель контроля графиком" имеет связи с шаблонами:

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

Признак "Страница открыта".

* Модификация из сеанса осуществляет немедленное открытие/закрытие данной страницы, но для страниц типа "Связь" Вы должны отдавать предпочтение использованию функции uiCmd() пользовательского API, для управления страницами.
pgNoOpenProc Страница: обрабатывать закрытой - Признак "Исполнять страницу даже если она закрыта".
pgOpenSrc Страница: источник открытия 3

Полный адрес страницы, открывшей данную.

* Запись/очистка адреса виджета (инициатора открытия), осуществляет немедленное открытие/закрытие страницы. В случае записи адреса, и выполнения других условий, осуществляется динамическое связывание текущего виджета с инициатором. Но для страниц типа "Связь" Вы должны отдавать предпочтение использованию функции uiCmd() пользовательского API, для управления страницами.
pgGrp Страница: группа 4 Группа страницы. ПУСТАЯ и "main" группа предусматривает использование этой страницы как Корневую-основную страницу, т.е. такая будет заменять другие Корневые-главные страницы; группа "fl" предназначена для использования во внешних окнах, которые предусмотрены для многоразового одновременного открытия и которые не должны отслеживаться на дубликаты; остальные предусмотрено для включения в контейнеры-боксы или одноразового одновременного открытия, т.е. они принудительно проверяются на дубликаты, когда последнее открывается, а предыдущие закрываются.
Дополнительные атрибуты режима исполнения — сеанса.
(Виртуальные атрибуты не доступны в процедуре виджета)
event События - Специальный атрибут сбора событий виджета в списке, разделённом новой строкой. Доступ к атрибуту защищён критической секцией для избежания потери событий. Атрибут всегда доступен в процедуре виджета.
load Загрузка -1 Виртуальная команда групповой загрузки данных.
focus Фокус -2 Специальный атрибут индикации факта получения фокуса, активным виджетом. Атрибут этого виджета и вложенных виджетов доступен в процедурах виджета.
perm Доступ -3 Виртуальный атрибут прав активного пользователя на просмотр и контроль над виджетом.
* — Специальная функция атрибута виджета, выполняемая в сеансе проекта при пользовательской модификации.

Движок среды визуализации предусматривает активацию атрибутов, специфичных для визуализатора. Процесс активации осуществляется при открытии сеанса визуализации проекта и предусматривает, в этом проекте: создание специфичного атрибута с указанными свойствами, если он отсутствует, и активацию отслеживания его модификации движком среды визуализации, как для атрибутов формирования образов примитивов. Для непосредственного определения такого атрибута можно также использовать префикс идентификатора атрибута "vs_", что быстрее и исключает стадию активации. С перечнем специфичных для визуализатора атрибутов можно ознакомиться в документации соответствующего визуализатора.

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 — из таблицы ресурсов БД.
  • "name" — путь файла или идентификатор ресурса.

Примеры:

  • "res:backLogo" — из таблицы ресурсов БД для идентификатора "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 — из таблицы ресурсов БД.
"name" — путь файла или идентификатор ресурса.
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)

Примитив, предназначенный для предоставления, в распоряжение пользователя, стандартных элементов формы. Общий перечень атрибутов зависит от типа элемента.

Table. List of additional properties/attributes of the primitive "Element of the form (FormEl)"

Identifier Name Number Value
elType Element type 20 Type of the element, from which depends the list of additional attributes:
  • Line edit (0)
  • Text edit (1)
  • Check Box (2)
  • Button (3)
  • Combo box (4)
  • List (5)
  • Tree (8)
  • Table (9)
  • Slider (6)
  • Scroll bar (7)
Line edit:
value Value 21 Contents of the line.
view View 22 View of the editing line:
  • Text (0)
  • Combo Box (1)
  • Integer (2)
  • Real (3)
  • Time (4)
  • Date (5)
  • Date and Time (6)
  • Password (7)
cfg Configuration 23 Configuration of the line. Format of the value of the field for different views of the lines:
Text — configuration of the formatted input at the template with the parameters (supported only by Qt in UI.Vision):
A — ASCII alphabetic character required, [A-Za-z].
a — ASCII alphabetic character permitted but not required.
N — ASCII alphanumeric character required, [A-Za-z0-9].
n — ASCII alphanumeric character permitted but not required.
X — Any character required.
x — Any character permitted but not required.
9 — ASCII digit required, [0-9].
0 — ASCII digit permitted but not required.
D — ASCII digit required, [1-9].
d — ASCII digit permitted but not required.
# — ASCII digit or plus/minus sign permitted but not required.
H — Hexadecimal character required, [A-Fa-f0-9].
h — Hexadecimal character permitted but not required.
B — Binary character required, [0-1].
b — Binary character permitted but not required.
> — All following alphabetic characters are uppercased.
< — All following alphabetic characters are lowercased.
! — Switch off case conversion.
\\ — Use to shield the special characters listed above to use them as separators.
Combobox — list of values the editable combobox by lines.
Integer — integer value in the form: "{Min}:{Max}:{ChangeStep}:{Prefix}:{Suffix}".
Real — real value in the form: "{Min}:{Max}:{ChangeStep}:{Prefix}:{Suffix}:{SignsAfterDot}".
Time, Date, Date and time — to form the date following the template with the parameters:
d — number of the day (1-31);
dd — number of the day (01-31);
ddd — acronym of the day ("Mon" ... "Sun");
dddd — full name of the day ("Monday" ... "Sunday");
M — number of the month (1-12);
MM — number of the month (01-12);
MMM — acronym of the month ("Jan" ... "Dec");
MMMM — full name of the month ("January" ... "December");
yy — last two digits of the year;
yyyy — full year;
h — hour (0-23);
hh — hour (00-23);
m — minutes (0-59);
mm — minutes (00-59);
s — seconds (0-59);
ss — seconds (00-59);
AP,ap — to display AM/PM or am/pm.
confirm Confirm 24 Enable the confirming mode.
font Font 25 Font name in the form "{family} {size} {bold} {italic} {underline} {strike}", where:
  • "family" — font family, for spaces use symbol '_', like: "Arial", "Courier", "Times_New_Roman";
  • "size" — font size in pixels;
  • "bold" — font bold (0 or 1);
  • "italic" — font italic (0 or 1);
  • "underline" — font underlined (0 or 1);
  • "strike" — font struck (0 or 1).

Examples:

  • "Arial 10 1 0 0 0" — Arial font size 10 pixels and bold.
Text edit:
value Value 21 Content of the editor.
wordWrap Word wrap 22 Automatically wrap text by words.
confirm Confirm 24 Enable the confirming mode.
font Font 25 Font name in the form "{family} {size} {bold} {italic} {underline} {strike}" (details above).
Check box:
name Name 26 Name/label of the checkbox.
value Value 21 Value of the checkbox.
font Font 25 Font name in the form "{family} {size} {bold} {italic} {underline} {strike}" (details above).
Button:
name Name 26 Name-inscription on the button. Allowed symbols '\n' for multiple line names.
value Value 21 The value, different for modes:
  • "Standard" — repeating parameters of events on holding {delay}-{interval}, time in milliseconds;
  • "Checkable" — toggle value;
  • "Menu" — list of addresses of the menu elements like to /grp1/grp2/item1;
  • "Load" — description line {FilesTemplate}|{Header}|{FileByDefaultAndLoaded}|{FileMime} and loaded file content from next line. The files template like to "Images (*.png *.xpm *.jpg);;CSV-file (*.csv)".
  • "Save" — description line {FilesTemplate}|{Header}|{FileByDefault}|{FileMime} and saving file content from next line. The files template like to before one.
img Image 22 Image on the button. Image name in the view [{src}:]{name}, where:
  • "src" — source of the image:
    • file — directly from the local file by the path;
    • res — from the resources table of DB.
  • "name" — file path or identifier of the resource.

Examples:

  • "res:backLogo" — from the resources table of DB for the identifier "backLogo";
  • "backLogo" — like toe the previous;
  • "file:/var/tmp/backLogo.png" — from local file by the path "/var/tmp/backLogo.png".
color Color 23 Color of the button. Color name form "{color}[-{alpha}]", where:
  • "color" — standard color name or its numeric representation of three hexadecimal numbers of individual colors "#RRGGBB";
  • "alpha" — level of the alpha [0...255], where 0 — completely transparent.

Examples:

  • "red" — solid red color;
  • "#FF0000" — solid red color by the digital code;
  • "red-127" — half transparent red color.
colorText Color:text 27 Color of the text (details above).
mode Mode 24 Operation mode of the button:
  • "Standard" — normal button which allows repeating events on it hold, the parameters in "value";
  • "Checkable" — check button, values in "value";
  • "Menu" — opens menu on press, items list in "value";
  • "Load" — provides for loading of the user-space small files through the visual interface; on the mode the button press will open the selection file dialog for loading and the file content next saving to the attribute "value";
  • "Save" — provides for saving of the user-space small files through the visual interface; on the file content writing to the attribute "value" for user will: open the selecting/setting file dialog, save the attribute "value" content to the file, after the selecting, and set clean the attribute "value".
font Font 25 Font name in the form "{family} {size} {bold} {italic} {underline} {strike}" (details above).
List:
value Value 21 Current value of the list.
items Items 22 Entries of the list.
font Font 25 Font name in the form "{family} {size} {bold} {italic} {underline} {strike}" (details above).
mult Multiple selection 23 Allow for multiple entries selection of the list.
Combo box, Tree:
value Value 21 Current value of the list.
items Items 22 Entries of the list or hierarchical items list of the tree in path "/{DIR}/{DIR}/{ITEM}".
font Font 25 Font name in the form "{family} {size} {bold} {italic} {underline} {strike}" (details above).
Table:
set Setting value 23 Value of edition of a cell of the table which address in the event "ws_TableEdit_{colN}_{rowN}".
value Value 21 Address of the selected item. It changing follows by the event "ws_TableChangeSel". The address format depends from the table's selection mode:
  • "Cell" — cell address in the format "{row}:{col}".
  • "Row", "Column" — row-column number or cell content of the row-column key, which sets by the attribute "keyID".
items Elements 22

The table structure and content in the XML view:

<tbl>
<h><s>{Header1}</s><s>{Header2}</s></h>
<r><s>{Row1Column1String}</s><i>{Row1Column1Integer}</i></r>
<r><b>{Row2Column1Logical}</b><r>{Row2Column2Real}</r></r>
</tbl>

The tags:

"tbl" — Table, the properties at all:
  • "sel" — selection mode of the table items: "row" — by rows, "col" — by columns, "cell" — by cells (by default);
  • "keyID" — row-column number of the key, for the selection value get;
  • "colsWdthFit" — fits the columns size, in the unfixed size, to fill the full width of the table;
  • "hHdrVis", "vHdrVis" — visibility of the headers, for horizontal and vertical;
  • "sortEn" — enables sorting directly by the columns.
"h" — Row of the headers. Possible attributes of the header cell tag for the column as a whole:
  • "width" — column width, in pixels or percents (10%);
  • "edit" — allowing to the cells of the row edition (0 or 1), by default — no (0);
  • "color" — column color as a whole in the color name or code;
  • "colorText" — color of the column text as a whole in the color name or code;
  • "font" — font of the column text in the typical OpenSCADA string;
  • "prec" — value precision of the real type cells in the column;
  • "sort" — sorting by the column [0 - Ascending-default; 1 - Descending];
  • "align" — alignment the column for: "left", "right" and "center".
"r" — Row of the values. Possible attributes of the row cell tag for the row as a whole:
  • "color" — row color as a whole in the color name or code;
  • "colorText" — color of the row text as a whole in the color name or code;
  • "font" — font of the cell text in the typical OpenSCADA string;
  • "prec" — value precision of the real type cells in the row.
"s", "t", "i", "r", "b" — cells of the data types "String", "Text", "Integer", "Real" and "Logical". Possible attributes:
  • "color" — cell color;
  • "colorText" — color of the cell text in the color name or code;
  • "font" — font of the cell text in the typical OpenSCADA string;
  • "prec" — value precision of the real type cell;
  • "img" — image of the cell in the form "[{src}:]{name}", the details above;
  • "edit" — allowing the cell edition (0 or 1), by default - no (0);
  • "align" — alignment the cell for: "left", "right" and "center".
font Font 25 Font name in the form "{family} {size} {bold} {italic} {underline} {strike}" (the details above).
Slider and Scroll Bar:
value Value 21 Slider position.
cfg Configuration 22 Configuration of the slider in the format: "{VertOrient}:{Min}:{Max}:{SinglStep}:{PageStep}".

Where:

  • "VertOrient" — sign (0 or 1) of the vertical orientation, the default is the horizontal orientation;
  • "Min" — minimum value;
  • "Max" — maximum value;
  • "SinglStep" — size of a single step;
  • "PageStep" — size of a page step.

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 — из таблицы ресурсов БД.
  • "name" — путь файла или идентификатор ресурса.

Примеры:

  • "res:backLogo" — из таблицы ресурсов БД для идентификатора "backLogo";
  • "backLogo" — как и предыдущий;
  • "file:/var/tmp/backLogo.png" — из локального файла по пути "/var/tmp/backLogo.png".
bordWidth Граница: ширина 22 Ширина бордюра.
bordColor Граница: цвет 23 Цвет бордюра (детальнее в атрибуте 20).
bordStyle Граница: стиль 24 Стиль бордюра: "Нет" (0), "Точечный" (1), "Пунктирный" (2), "Сплошной" (3), "Двойной" (4), "Канавка" (5), "Кромка" (6), "Вдавлен" (7), "Выступающий" (8).
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 Выравнивание текста: "Вверху слева" (0), "Вверху справа" (1), "Вверху по центру" (2), "Вверху по ширине" (3), "Внизу слева" (4), "Внизу справа" (5), "Внизу по центру" (6), "Внизу по ширине" (7), "По центру слева" (8), "По центру справа" (9), "По середине" (10), "По центру по ширине" (11).
inHtml В HTML 31 Отображение и поддержка содержимого аргумента text в HTML.
text Текст 30 Значение текста. Используйте "%{x}" для помещения значения аргумента "x" (от 1).
numbArg Количество аргументов 40 Количество аргументов.
Атрибуты аргументов
arg{x}val Аргумент {x}: значение 50+10*x Значение аргумента x.
arg{x}tp Аргумент {x}: тип 50+10*x+1 Тип аргумента x: "Целый" (0), "Вещественный" (1), "Строка" (2).
arg{x}cfg Аргумент {x}: конфигурация 50+10*x+2

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

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

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

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

Table. List of additional properties/attributes of the primitive "Element of visualization of media-materials (Media)"

Identifier Name Number Value
backColor Background: color 20 Background color. Color name in the view "{color}[-{alpha}]", where:
  • "color" — standard color name or its numeric representation of three hexadecimal numbers of individual colors "#RRGGBB";
  • "alpha" — level of the alpha [0...255], where 0 — completely transparent.

Examples:

  • "red" — solid red color;
  • "#FF0000" — solid red color by the digital code;
  • "red-127" — half transparent red color.
backImg Background: image 21 Background image. The image name in the view "[{src}:]{name}", where:
  • "src" — source of the image:
    • file — directly from the local file by the path;
    • res — from the resources table of DB.
  • "name" — file path or identifier of the resource.

Examples:

  • "res:backLogo" — from the resources table of DB for the identifier "backLogo";
  • "backLogo" — like toe the previous;
  • "file:/var/tmp/backLogo.png" — from local file by the path "/var/tmp/backLogo.png".
bordWidth Border: width 22 Border width.
bordColor Border: color 23 Border color (details in attribute 20).
bordStyle Border: style 24 Border style: "None", "Dotted", "Dashed", "Solid", "Double", "Groove", "Ridge", "Inset", "Outset".
src Source 25

Name of the Media source in the view "[{src}:]{name}", where:

  • "src" — source:
    • file — directly from the local file, visualizer and engine, by the path;
    • res — from the resources table of DB;
    • data — directly data in the form "data:{mime}\n{base64}";
    • stream — stream URL for playback video and audio.
  • "name" — file path or identifier of the resource.

Examples:

  • "res:workMedia" — from the resources table of DB for the identifier "workMedia";
  • "workMedia" — like to previous;
  • "file:/var/tmp/workMedia.mng" — from the local file by the path "/var/tmp/workMedia.mng";
  • "stream:http://localhost.localhost:5050" — playback for video and audio stream from the URL.
type Type 27

Media type:

  • "Image" — raster or vector (can not support) image, like to: PNG, JPEG, GIF, SVG;
  • "Animation" — simple animation image, like to: GIF, MNG;
  • "Video" — full video or stream, like to: OGM, AVI, MKV, MPG, MP4;
  • "Audio" — just audio or stream, like to: OGG, MP3, WAV.
areas Map areas 28 Number of the active areas.
Attributes of the image (Image)
fit Fit to the widget size 26 Sign of coordination the contents with the widget size.
keepAspect Keep aspect ratio at fitting 35 Sign of keeping image aspect ratio at fitting to whole size of the widget.
Attributes of the animation-video (Animation)
fit Fit to the widget size 26 Sign of coordination the contents with the widget size.
speed Play speed 29 Speed of playback, as a percentage from the original speed. If the value is less or even than 1%, the playback stops.
Attributes of the full video (Full video)
play Play 29 Video/audio — "Play".
roll Roll play 30 Roll play on the finish.
pause Pause 31 Playing pause.
size Size 32 Total video size, in milliseconds.
seek Seek 33 Seek video playing, in milliseconds.
volume Volume 34 Sound volume [0...100].
Active areas
area{x}shp Area {x}: shape 40+3*x Type of the area x: "Rect", "Poly", "Circle".
area{x}coord Area {x}: coordinates 40+3*x+1 Coordinates of the area x, are separated by commas: "x1,y1,x2,y2,xN,yN".
area{x}title Area {x}: title 40+3*x+2 Title of the area x.

3.9.5 Элемент построения диаграмм (Diagram)

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

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

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

Процесс доступа к архивным данным оптимизирован путём ведения промежуточного буфера отображения, а также, упаковки трафика данных при запросе, путем приведения данных к качеству достаточного для отображения.

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

Идентификатор Имя Номер Значение
backColor Фон: цвет 20

Фоновый цвет. Имя цвета в виде "{color}[-{alpha}]", где:

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

Примеры:

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

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

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

Примеры:

  • "res:backLogo" — из таблицы ресурсов БД для идентификатора "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 — из таблицы ресурсов БД.
  • "name" — путь файла или идентификатор ресурса.

Примеры:

  • "res:backLogo" — из таблицы ресурсов БД для идентификатора "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 совпадают. Атрибуты архивных курсоров предусматривают несколько командных значений:

Как было указано выше, динамика шаблона документа определяется вставками исполняемых инструкций вида "<?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 — из таблицы ресурсов БД.
  • "name" — путь файла или идентификатор ресурса.

Примеры:

  • "res:backLogo" — из таблицы ресурсов БД для идентификатора "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". Экземпляр этих таблиц создаётся в каждой БД, где хранятся данные этого модуля. В состав таблиц, принадлежащих библиотеке виджетов и проекту, входят следующие:

At.png {DB_TBL} сейчас формируется в виде "wlb_{ID}" для библиотек и "prj_{ID}" для проектов, а отдельное поле DB_TBL таблиц "Libs", "Projs" застарело и будет удалено в випуске OpenSCADA 1.0!

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

ID — идентификатор;
NAME — имя;
DSCR — описание;
DB_TBL (УСТАРЕЛО) — корень таблиц БД с виджетами;
ICO — закодированное (Base64) изображение иконки библиотеки.
ID — идентификатор;
ICO — закодированное (Base64) изображение иконки виджета;
PARENT — адрес виджета основы, в виде /wlb_originals/wdg_Box;
PROC — внутренняя процедура и язык процедуры виджета;
PROC_PER — период вычисления процедуры виджета;
ATTRS — перечень атрибутов виджета, модифицированных пользователем;
TIMESTAMP — метка времени последней модификации.
IDW — идентификатор виджета;
ID — идентификатор атрибута;
IDC — идентификатор дочернего виджета;
IO_VAL — значение атрибута;
SELF_FLG — внутренние флаги атрибутов;
CFG_TMPL — шаблон элемента конфигурации, основанного на данном атрибуте;
CFG_VAL — значение элемента конфигурации (ссылка, константа ...).
IDW — идентификатор виджета;
ID — идентификатор атрибута;
IDC — идентификатор дочернего виджета;
NAME — имя атрибута;
IO_TP — тип и главные флаги атрибута;
IO_VAL — значение атрибута;
SELF_FLG — внутренние флаги атрибута;
CFG_TMPL — шаблон элемента конфигурации, основанного на данном атрибуте;
CFG_VAL — значение элемента конфигурации (ссылка, константа ...).
IDW — идентификатор виджета;
ID — идентификатор экземпляра вложенного виджета;
PARENT — адрес виджета основы, в виде /wlb_originals/wdg_Box;
ATTRS — перечень атрибутов виджета, модифицированных пользователем.
ID — идентификатор ресурса;
MIME — MIME ресурса, в формате — "{MIME};{Size}";
DATA — данные ресурса, кодированные Base64.
ID — идентификатор проекта;
NAME — имя проекта;
DSCR — описание проекта;
DB_TBL (УСТАРЕЛО) — корень таблиц БД со страницами;
ICO — закодированное (Base64) изображение иконки проекта;
USER — имя владельца проекта;
GRP — имя группы пользователей проекта;
PERMIT — права доступа к проекту;
PER — период вычисления проекта, в миллисекундах;
FLGS — флаги проекта;
STYLE — типовой стиль проекта.
OWNER — проект-страница — владелец данной страницы, в виде — "/AGLKS/so/1/gcadr";
ID — идентификатор страницы;
ICO — закодированное (Base64) изображение иконки страницы;
PARENT — адрес виджета основы, в виде /wlb_originals/wdg_Box;
PROC — внутренняя процедура и язык процедуры страницы;
PROC_PER — период вычисления процедуры страницы;
FLGS — флаги типов страницы;
ATTRS — перечень атрибутов страницы, модифицированных пользователем;
TIMESTAMP — метка времени последней модификации.
IDS — идентификатор стиля;
ID — идентификатор поля стиля;
VAL — значение поля стиля.
ID — идентификатор поля стиля;
V_{N} — значение поля стиля для стиля N.
IDW — полный путь элемента проекта;
ID — атрибут элемента;
IO_VAL — значение атрибута.


3.11 API of the user programming

API of the user programming of the visualization engine are represented directly by the OpenSCADA objects, which form the user interface, that is by the "Session" and "Widgets-pages". For the user, these objects provide a set of control functions:

User object model of the module VCAEngine.

Object "Session" ( this.ownerSess() )

Object "Widget" (this)

//Adds the new widget, based at the text primitive
nw = this.wdgAdd("nw", "New widget", "/wlb_originals/wdg_Text");
nw.attrSet("geomX", 50).attrSet("geomY", 50);
//Sets the link to the parameter for the eight trend
this.linkSet("el8.name", "prm:/LogicLev/experiment/Pi", true);

Object "Widget" of the primitive "Document" (this)


Deprecated, but supported, the API is represented by a group of functions directly in the module of the VCA engine. Calling these functions from the widget procedure can be done directly by the identifier, since their namespace is defined in the context of the widget procedures.

Widgets list (WdgList)
Description: Returns a list of the widgets, in the widgets container, or the child list. If set pg then returns the pages list for projects and sessions.
Parameters:

Identifier Name Type Mode By default
list List String Return
addr Address String Input
pg Pages Boolean Input 0

Node presence (NodePresent)
Description: Checking for the node presence, including widgets, attributes and other.
Parameters:

Identifier Name Type Mode By default
rez Result Boolean Return
addr Address String Input

Attributes list (AttrList)
Description: Returns an attributes list of the widget. If set noUser then returns only not user attributes.
Parameters:

Identifier Name Type Mode By default
list List String Return
addr Address String Input
noUser Not user Boolean Input 1

Get the attribute (AttrGet)
Description: Getting value of the widget attribute. The request can be done as by indicating the full address of the attribute in addr, and by: indicating separately the address of the widget in addr and the the attribute identifier in the attr.
Parameters:

Identifier Name Type Mode By default
val Value String Return
addr Address String Input
attr Attribute Boolean Input

Set the attribute (AttrSet)
Description: Setting value of the widget attribute. Setting can be done as by indicating the full address of the attribute in addr, and by: indicating separately the address of the widget in addr and the the attribute identifier in the attr.
Parameters:

Identifier Name Type Mode By default
addr Address String Input
val Value String Input
attr Attribute Boolean Input

Session user (SesUser)
Description: Returns the session user by the session widget path.
Parameters:

Identifier Name Type Mode By default
user User String Return
addr Address String Input


3.12 Service commands-functions of the Control Interface

Service functions are an interface for accessing OpenSCADA from external systems through the Control Interface. This mechanism is the basis of all exchange within OpenSCADA, implemented through weak links and OpenSCADA's own exchange protocol.

The common widgets

Getting for values of specified or all visual attributes of the widget
REQ: <get path="/UI/VCAEngine/{wAddr}/%2fserv%2fattr">{attributes}</get>
  • wAddr — the widget local address, like to "/wlb_AGLKS/wdg_CM101/wdg_ElFigure1";
  • attributes — the only requested attributes in the tags "el" with only one attribute of the identifier "id"; there can be no the attribute tags for requesting all available ones.
RESP: <get path="/UI/VCAEngine/{wAddr}/%2fserv%2fattr" rez="0">{attributes}</get>
  • attributes — processed attributes in the tags "el": <el id="{ID}" p="{pos}" act="{active}">{value}</el>
    • ID — identifier of the attribute;
    • pos — position-index of the attribute for the standard ones;
    • active — activity state of the attribute, only at the direct requesting;
    • value — value of the attribute.
<get path="/UI/VCAEngine/wlb_AGLKS/wdg_CM101/wdg_ElFigure1/%2fserv%2fattr" rez="0" user="roman">
  <el id="id">ElFigure1</el>
  <el id="path">/wlb_AGLKS/wdg_CM101/wdg_ElFigure1</el>
  <el id="parent">/wlb_originals/wdg_ElFigure</el>
  <el id="owner">root:UI</el>
  <el id="perm">948</el>
  <el id="root" p="1">ElFigure</el>
  <el id="name" />
  <el id="dscr" />
</get>
Setting for group values of the specified widget attributes
REQ[root-UI]: <set path="/UI/VCAEngine/{wAddr}/%2fserv%2fattr">{attributes}</set>
  • wAddr — the widget local address in the module, like to "/wlb_AGLKS/wdg_CM101/wdg_ElFigure1";
  • attributes — attributes with values in the tags "el": <el id="{ID}">{value}</el>
    • ID — identifier of the attribute;
    • value — setting value of the attribute.
<set path="/UI/VCAEngine/wlb_AGLKS/wdg_CM101/wdg_ElFigure1/%2fserv%2fattr">
  <el id="name">New name</el>
  <el id="dscr">New description</el>
</set>
Getting for values of the visual attributes of the widget branch, optimised for the networks
REQ: <get path="/UI/VCAEngine/{wAddr}/%2fserv%2fattrBr" />
  • wAddr — the widget local address in the module, like to "/wlb_AGLKS/wdg_CM101/wdg_ElFigure1".
RESP: <get path="/UI/VCAEngine/{wAddr}/%2fserv%2fattrBr" rez="0">{attributes} {widgets}</get>
  • attributes — processed attributes in the tags "el": <el id="{ID}" p="{pos}">{value}</el>
    • ID — identifier of the attribute;
    • pos — position-index of the attribute for the standard ones;
    • value — value of the attribute.
  • widgets — child widgets in the tags "w": <w id="{ID}" lnkPath="{lnkPath}">{attributes} {widgets}</w>
    • ID — identifier of the widget;
    • lnkPath — path to the linked widget for child widgets of the widget libraries.
<get path="/UI/VCAEngine/wlb_AGLKS/wdg_CM101/%2fserv%2fattrBr" rez="0" user="roman">
  <el id="id">CM101</el>
  <el id="path">/wlb_AGLKS/wdg_CM101</el>
  <el id="parent">/wlb_originals/wdg_Box</el>
  <el id="owner">root:UI</el>
  <el id="perm">948</el>
  <el id="root" p="1">Box</el>
  <el id="name">CM101</el>
  <w id="AT101_1" lnkPath="/wlb_mnEls/wdg_cooler">
    <el id="id">AT101_1</el>
    <el id="path">/wlb_AGLKS/wdg_CM101/wdg_AT101_1</el>
    <el id="parent">/wlb_mnEls/wdg_cooler</el>
    <el id="owner">root:UI</el>
    <el id="perm">948</el>
    <el id="root" p="1">ElFigure</el>
    <el id="name">АТ101 1</el>
  </w>
</get>

The widget libraries

Obtaining the widget libraries' tree, optimised for the networks
REQ: <get path="/UI/VCAEngine/%2fserv%2fwlbBr" item="{item}" disIconsW="{disIconsW}" disIconsCW="{disIconsCW}" />
  • item — the library item for obtaining, as the path "wlb_{WLib}[/wdg_{Wdg}[/wdg_{ChildWdg}]]", for empty there will be obtained all the tree;
  • disIconsW — disable for obtaining the icon data of the widgets [0|1];
  • disIconsCW — disable for obtaining the icon data of the child widgets [0|1].
RESP: <get path="/UI/VCAEngine/%2fserv%2fwlbBr" item="{item}" disIconsW="{disIconsW}" disIconsCW="{disIconsCW}" rez="0">{wlibs}</get>
  • wlibs — the widget libraries in the "wlb" tags: <wlb id="{ID}" doc="{doc}">{name} {icon} {widgets}</wlb>
    • icon — the "icon" tag with the Base64 encoded data of the icon;
    • widgets — the "w" tags with the library widgets description: <w id="{ID}" doc="{doc}" parent="{parent}">{name} {icon} {widgets}</w>
      • parent — address of the widget parent;
      • widgets — the "сw" tags with the child widgets description: <cw id="{ID}" doc="{doc}">{name} {icon}</cw>
<get disIconsCW="1" disIconsW="1" item="/wlb_AGLKS" path="/UI/VCAEngine/%2fserv%2fwlbBr" rez="0" user="roman">
  <wlb id="AGLKS">AGLKS
    <ico>iVBORw0KGgoAA...U5ErkJggg==</ico>
    <w id="CM101" parent="/wlb_originals/wdg_Box">CM101
      <cw id="AT101_1">АТ101 1</cw>
      <cw id="AT101_2">АТ101 1</cw>
      <cw id="C101_1">C101/1</cw>
      <cw id="C101_2">C101/1</cw>
      <cw id="C101_3">C101/1</cw>
      <cw id="CM101">CM101</cw>
      <cw id="CM101_1">CM101_1</cw>
      <cw id="CM101_2">CM101_2</cw>
      <cw id="ElFigure1">ElFigure1</cw>
      <cw id="ElFigure2">ElFigure2</cw>
      <cw id="ElFigure3">ElFigure3</cw>
      <cw id="ElFigure4">ElFigure4</cw>
      <cw id="ElFigure5">ElFigure5</cw>
      <cw id="ElFigure6">ElFigure6</cw>
      <cw id="ElFigure7">ElFigure7</cw>
    </w>
    <w id="KCH_MN1" parent="/wlb_originals/wdg_Box">KCH_MN1
      <cw id="BC1">Ball crane</cw>
      <cw id="BC2">Ball crane</cw>
      <cw id="BC21">Ball crane</cw>
      <cw id="BC22">Ball crane</cw>
    </w>
    <w id="comprEn" parent="/wlb_originals/wdg_ElFigure">Compressor run</w>
  </wlb>
</get>

The VCA projects

Obtaining the project list expanded by some options
REQ: <get path="/UI/VCAEngine/[%2fbr%2fprj_|%2fprm%2fcfg%2fprj]" chkUserPerm="{chkUserPerm}" getChPgN="{getChPgN}" noName="{noName}" />
  • chkUserPerm — checking for the user permition before listing [0|1];
  • getChPgN — requesting for quantity of the child pages in the projects [0|1];
  • noName — do not return for names of the pages [0|1].
RESP: <get path="/UI/VCAEngine/[%2fbr%2fprj_|%2fprm%2fcfg%2fprj]" chkUserPerm="{chkUserPerm}" getChPgN="{getChPgN}" noName="{noName}" rez="0">{projects}</get>
  • projects — projects list in the tags "el", where the name is in the tag text and the identifier in the attribute "id". Expanded by the extra attributes:
    • "chPgN" — quantity of the child pages in the project at setting "getChPgN".
<get getChPgN="1" path="/UI/VCAEngine/%2fbr%2fprj_" rez="0" user="roman">
  <el chPgN="2" id="AGLKS">AGLKS</el>
  <el chPgN="2" id="archBrowser">Archives browser</el>
  <el chPgN="2" id="tmplSO">Signal groups (template)</el>
</get>
Checking for read access to the project from the user of the request
REQ: <read path="/UI/VCAEngine/prj_{proj}/%2fserv%2faccess" />
  • proj — identifier of the project.
RESP: <read path="/UI/VCAEngine/prj_{proj}/%2fserv%2faccess" rez="0">{access}</get>
  • access — the access presence status [0|1].

</translate>

<read path="/UI/VCAEngine/prj_AGLKS/%2fserv%2faccess" rez="0" user="roman">1</read>

<translate> The project sessions

Obtaining the session list expanded by some options
REQ: <get path="/UI/VCAEngine/[%2fbr%2fses_|%2fses%2fses]" chkUserPerm="{chkUserPerm}" onlyMy="{onlyMy}" />
  • chkUserPerm — checking for the user permition before listing [0|1];
  • onlyMy — listening only my own sessions [0|1].
RESP: <get path="/UI/VCAEngine/[%2fbr%2fses_|%2fses%2fses]" chkUserPerm="{chkUserPerm}" onlyMy="{onlyMy}" rez="0">{sessions}</get>
  • sessions — sessions list in the tags "el", where the identifier is in the tag text. Expanded by the extra attributes:
    • "user" — user of the session;
    • "proj" — project of the session.

</translate>

<get path="/UI/VCAEngine/%2fses%2fses" rez="0" onlyMy="1" user="roman">
  <el user="roman" proj="AGLKS">AGLKS</el>
  <el user="roman" proj="AGLKS">AGLKS0</el>
</get>

<translate>

Obtaining the sessions list of the specified VCA project
REQ: <list path="/UI/VCAEngine/%2fserv%2fsess" prj="{project}" />
  • project — identifier of the requested project.
RESP: <list path="/UI/VCAEngine/%2fserv%2fsess" prj="{project}" rez="0">{sessions}</list>
  • sessions — sessions in the "el" tags.
<list path="/UI/VCAEngine/%2fserv%2fsess" prj="AGLKS" rez="0" user="roman">
  <el>AGLKS</el>
</list>
Connection to the specified VCA project or the project session
REQ: <connect path="/UI/VCAEngine/%2fserv%2fsess" prj="{project}" sess="{session}" userChange="{userChange}" onlyMy="{onlyMy}" />
  • project — identifier of the requested project, empty for connection to the available session;
  • session — identifier of the already present session, empty at a new session creation;
  • onlyMy — sign of connection-reconnection to the session only when it is my;
  • userChange — sign of the user changing [0|1] of the session, that is updation the user information.
RESP: <connect path="/UI/VCAEngine/%2fserv%2fsess" prj="{project}" sess="{session}" userChange="{userChange}" onlyMy="{onlyMy}" rez="0" conId="{conId}" userIsRoot="{userIsRoot}" />
  • conId — the session connection identifier, used in next requests;
  • project — the project identifier of the successfully connected session;
  • session — identifier of the new created session of the successfully connected project;
  • userIsRoot — the user has the root permition [0|1].

</translate>

<connect conId="50860885" path="/UI/VCAEngine/%2fserv%2fsess" prj="AGLKS" rez="0" sess="AGLKS" user="roman" userIsRoot="1" />

<translate>

Disconnection the specified VCA project session
Sessions with zero connections are closed here also.
REQ: <disconnect path="/UI/VCAEngine/%2fserv%2fsess" sess="{session}" conId="{conId}" />
  • session — identifier of the present session;
  • conId — the session connection identifier.
<disconnect path="/UI/VCAEngine/%2fserv%2fsess" sess="AGLKS" conId="50860885" />
Getting for the opened pages list of the project session
REQ[{owner}-{grp}]: <openlist path="/UI/VCAEngine/ses_{session}/%2fserv%2fpg" conId="{conId}" tm="{clock}" />
  • owner, grp — reading access for the project owner or a user in group and regarding to the project permissions;
  • session — identifier of the session;
  • conId — the session connection identifier;
  • clock — the internal clock (the live cycle) value from the previous processed request, for checking of the changed ones.
RESP: <openlist path="/UI/VCAEngine/ses_{session}/%2fserv%2fpg" conId="{conId}" tm="{clock}" rez="0">{pages}</openlist>
  • clock — the internal clock (the live cycle) value - 1 at the request time;
  • pages — pages in the tags "pg": <pg pgGrp="{pgGrp}" updWdg="{nUpdWdgs}">{ID}</pg>
    • ID — identifier of the page;
    • pgGrp — the pages group for early calculation the page including;
    • nUpdWdgs — quantity of the updated widgets after the last request and for not empty "clock".

</translate>

<openlist conId="52760577" path="/UI/VCAEngine/ses_AGLKS/%2fserv%2fpg" rez="0" tm="1403" user="roman">
  <pg>/ses_AGLKS/pg_so</pg>
  <pg pgGrp="so">/ses_AGLKS/pg_so/pg_1/pg_mn/pg_1</pg>
  <pg pgGrp="cntr">/ses_AGLKS/pg_control/pg_ElCadr</pg>
</openlist>

<translate>

Opening or closing for the specified page of the project session
REQ[{owner}-{grp}]: <[open|close] path="/UI/VCAEngine/ses_{session}/%2fserv%2fpg" pg="{page}" />
  • owner, grp — writing access for the project owner or a user in group and regarding to the project permissions;
  • session — identifier of the session;
  • page — address of the page in the session context, like to "/ses_AGLKS/pg_so/pg_1/pg_mn/pg_1".
Getting for the alarm status and the notification resource of the project session
REQ[{owner}-{grp}]: <get path="/UI/VCAEngine/ses_{session}/%2fserv%2falarm" mode="{mode}" tp="{typeNtf}" wdg="{widget}" />
  • owner, grp — reading access for the project owner or a user in group and regarding to the project permissions;
  • session — identifier of the session;
  • mode — the requesting mode, only "resource" for obtaining the notification resources and empty for the status only;
  • typeNtf — the notification type of obtaining the notification resource, see the alarming section;
  • widget — address of the widget for forming the notification resource, empty for global.
RESP: <get path="/UI/VCAEngine/ses_{session}/%2fserv%2falarm" mode="{mode}" tp="{typeNtf}" rez="0" alarmSt="{alarmSt}" tm="{clock}" wdg="{widget}" resTp="{resTp}" mess="{message}" lang="{language}">{resource}</get>
  • alarmSt — the alarm status as that described in the alarming section;
  • clock — the internal clock (the live cycle) value at the notification resource form;
  • widget — address of the source widget at the notification resource form;
  • message — message of notification from the text;
  • language — language of the notification, for the "message" mostly;
  • resTp — type of the notification resource;
  • resource — resource of the notification encoded by Base64 for the binary data.
<get path="/UI/VCAEngine/ses_AGLKS/%2fserv%2falarm" mode="resource" tp="1" rez="0" user="roman"
     alarmSt="460554" tm="0" resTp="audio/ogg;73.3428" lang="en_US.UTF-8">
T2dnUwACA...Dg6gwAjo+PAQ==
</get>
Quietance of the alarm notification of the project session
REQ[{owner}-{grp}]: <quietance path="/UI/VCAEngine/ses_{session}/%2fserv%2falarm" wdg="{widget}" tmpl="{template}" ret="{return}" />
  • owner, grp — reading access for the project owner or a user in group and regarding to the project permissions;
  • session — identifier of the session;
  • widget — address of the widget for quietance the notification, empty for global;
  • template — template of the quietance, that is bitset corresponding to the quieting notification types;
  • return — sign of the notification return, that is the quietance disabling.
<quietance path="/UI/VCAEngine/ses_AGLKS/%2fserv%2falarm" tmpl="7" />
Getting for values of the modified visual attributes of the session widget
Redefines the common service request of the widgets "<get path='/UI/VCAEngine/{wAddr}/%2fserv%2fattr' />" for the session specific.
REQ: <get path="/UI/VCAEngine/ses_{wAddr}/%2fserv%2fattr" tm="{clock}" />
  • wAddr — the session widget local address, like to "/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1";
  • clock — the internal clock (the live cycle) value from the previous processed request, for checking of the changed ones; at zero value there force appended the service-virtual attributes: "perm", "name".
RESP: <get path="/UI/VCAEngine/ses_{wAddr}/%2fserv%2fattr" tm="{clock}" rez="0">{attributes}</get>
  • attributes — modified from "clock" attributes in the tags "el": <el id="{ID}" p="{pos}">{value}</el>
    • ID — identifier of the attribute;
    • pos — position-index of the attribute for the standard ones;
    • value — value of the attribute.
<get path="/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1/%2fserv%2fattr" rez="0" tm="0" user="roman">
  <el id="perm" p="-3">6</el>
  <el id="root" p="1">ElFigure</el>
  <el id="en" p="5">1</el>
  <el id="active" p="6">0</el>
  <el id="geomX" p="7">488</el>
  <el id="geomY" p="8">250</el>
  <el id="geomW" p="9">16</el>
  <el id="geomH" p="10">100</el>
  <el id="geomXsc" p="13">1</el>
  <el id="geomYsc" p="14">0.75</el>
  <el id="geomZ" p="11">-9</el>
</get>
Setting for group values of the specified attributes of the session widget
Redefines the common service request of the widgets "<set path='/UI/VCAEngine/{wAddr}/%2fserv%2fattr' />" for the session specific like to the "event" attribute processing and detection the user activity-inactivity.
REQ[{owner}-{grp}]: <set path="/UI/VCAEngine/ses_{wAddr}/%2fserv%2fattr" noUser="{noUser}">{attributes}</set>
  • owner, grp — writing access for the project owner or a user in group and regarding to the project permissions;
  • wAddr — the session widget local address, like to "/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1";
  • noUser — don't mark that as a user activity;
  • attributes — attributes with values in the tags "el": <el id="{ID}">{value}</el>
    • ID — identifier of the attribute;
    • value — setting value of the attribute.
<set path="/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1/%2fserv%2fattr">
  <el id="name">New name</el>
  <el id="dscr">New description</el>
</set>
Activating the attribute for using as the visual one and creating that at missing
REQ: <activate path="/UI/VCAEngine/ses_{wAddr}/%2fserv%2fattr%2f{aID}" aNm="{aName}" aTp="{aType}" aFlg="{aFlags}" aVls="{aValues}" aNms="{aNames}">{aDef}</activate>
  • wAddr — the session widget local address, like to "/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1";
  • aID — identifier of the attribute;
  • aName — name of the attribute at it creation;
  • aType — type of the attribute at it creation, see to the object TFld;
  • aFlags — flags of the attribute at it creation, see to the object TFld;
  • aDef — default value of the attribute at it creation;
  • aValues — the attribute values for the selective types at it creation;
  • aNames — names to values of the attribute for the selective types at it creation.
<activate path="/UI/VCAEngine/ses_AGLKS/pg_so/%2fserv%2fattr%2frunWin" aNm="Run window" aTp="1" aFlg="1" aVls="0;1;2" aNms="Original size;Maximize;Full screen">0</activate>
Getting for values of the visual attributes of the widget branch of the session, optimised for the networks
Redefines the common service request of the widgets "<get path='/UI/VCAEngine/{wAddr}/%2fserv%2fattrBr' />" for the session specific.
REQ: <get path="/UI/VCAEngine/ses_{wAddr}/%2fserv%2fattrBr" tm="{clock}" FullTree="{FullTree}" />
  • wAddr — the session widget local address, like to "/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1";
  • clock — the internal clock (the live cycle) value from the previous processed request, for checking of the changed ones; at zero value there force appended the service-virtual attributes: "perm", "name";
  • fullTree — obtaining the full widgets tree independent from presence the changes, without the attributes.
RESP: <get path="/UI/VCAEngine/ses_{wAddr}/%2fserv%2fattrBr" tm="{clock}" FullTree="{FullTree}" rez="0">{attributes} {widgets}</get>
  • attributes — processed attributes in the tags "el": <el id="{ID}" p="{pos}">{value}</el>
    • ID — identifier of the attribute;
    • pos — position-index of the attribute for the standard ones;
    • value — value of the attribute.
  • widgets — child widgets in the tags "w": <w id="{ID}">{attributes} {widgets}</w>
    • ID — identifier of the widget.
<get path="/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/%2fserv%2fattrBr" rez="0" tm="0" user="roman">
  <el id="name" p="-4">CM101</el>
  <el id="perm" p="-3">6</el>
  <el id="root" p="1">Box</el>
  <el id="en" p="5">1</el>
  <el id="active" p="6">0</el>
  <el id="geomX" p="7">0</el>
  <el id="geomY" p="8">0</el>
  <el id="geomW" p="9">900</el>
  <el id="geomH" p="10">580</el>
  <w id="AT101_1">
    <el id="perm" p="-3">6</el>
    <el id="root" p="1">ElFigure</el>
    <el id="en" p="5">1</el>
    <el id="active" p="6">0</el>
    <el id="geomX" p="7">338</el>
    <el id="geomY" p="8">320</el>
    <el id="geomW" p="9">80</el>
    <el id="geomH" p="10">100</el>
  </w>
</get>
Getting for value of the session specific attribute of the session widget
REQ: <get path="/UI/VCAEngine/ses_{wAddr}/%2fserv%2fattrSess%2f{aID}" />
  • wAddr — the session widget local address, like to "/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1";
  • aID — identifier of the session specific attribute.
RESP: <get path="/UI/VCAEngine/ses_{wAddr}/%2fserv%2fattrSess%2f{aID}" rez="0">{value}</get>
  • value — value of the attribute.
<get path="/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/%2fserv%2fattrSess%2ftestA" rez="0" user="roman">test val</get>
Setting for value of the session specific attribute of the session widget
REQ[{owner}-{grp}]: <set path="/UI/VCAEngine/ses_{wAddr}/%2fserv%2fattrSess%2f{aID}">{value}</get>
  • owner, grp — writing access for the project owner or a user in group and regarding to the project permissions;
  • wAddr — the session widget local address, like to "/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1";
  • aID — identifier of the session specific attribute;
  • value — value of the attribute.
<set path="/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/%2fserv%2fattrSess%2ftestA">test val</set>


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

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

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

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

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

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

From this page you can set:

At.png The object still supports of specifying the spare storage addresses with tables before you rename the table in the standard form "prj_{ObjID}".
Рис.4.4. Вкладка "Диагностика" проекта.

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

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

From this page you can set:

At.png The object still supports of specifying the spare storage addresses with tables before you rename the table in the standard form "wlb_{ObjID}".
Рис.4.6. Вкладка конфигурации ресурсов контейнера.

Конфигурация сеанса проекта значительно отличается от конфигурации проекта (рис.4.7), однако, также, содержит страницы проекта.

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

С помощью этой страницы можно установить:

Configuration pages of the visual elements, placed in different containers, may be very different, but this difference is the presence or absence of individual tabs. Main tab of the visual elements in fact is the same everywhere, differing in one configuration field and three into the session (Fig.4.8). The pages contains the tabs of the child pages and included widgets. The container widgets contains the tab of the included widgets. All visual elements contain attributes tab (Fig.4.9), except the logical containers of the projects. Elements, at the level of which it is possible to build the user procedure and to determine the links, contain the tab "Processing" (Fig.4.10) and "Links" (Fig.4.11). At.png The attribute name's rows in the "Processing" tab after the first one treat as help.

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

From this page you can obtain:

Рис.4.9. Вкладка атрибутов визуальных элементов.
Рис.4.10. Вкладка обработки визуальных элементов.
Рис.4.11. Вкладка связей визуальных элементов.
Modules/VCAEngine/ru - GFDLNovember 2024OpenSCADA 1+r2996