Модуль | Имя | Версия | Лицензия | Источник | Языки | Платформы | Тип | Автор |
---|---|---|---|---|---|---|---|---|
VCAEngine | Движок Среды Визуализации и Управления | 7.1 | GPL2 | ui_VCAEngine.so | en,uk,ru,de | x86,x86_64,ARM | UI | Роман Савоченко |
Описание | ||||||||
Общий движок среды визуализации и управления.
|
Модуль предоставляет в OpenSCADA движок среды визуализации и управления (СВУ). Сам модуль не реализует визуализации СВУ, а содержит данные в соответствии с концепцией "Модель/данные – Интерфейс". Визуализация данных этого модуля выполняется модулями визуализации СВУ, например, модулем Vision и WebVision.
Среда визуализации и управления (СВУ) является неотъемлемой составляющей SCADA системы. Она применяется на клиентских станциях с целью доступного предоставления информации об объекте управления и выдачи управляющих воздействий на объект. В различных практических ситуациях и условиях могут применяться СВУ, построенные на различных принципах визуализации. Например, это могут быть библиотеки виджетов Qt, GTK+, wxWidgets или гипертекстовые механизмы на основе технологий HTML, XHTML, XML, CSS и JavaScript или сторонние приложения визуализации, реализованные на различных языках программирования Java, Python и т.д. Любой из этих принципов имеет свои преимущества и недостатки, комбинация которых может стать непреодолимым препятствием в возможности использования СВУ в том или ином практическом случае. Например, технологии вроде библиотеки Qt позволяют создавать высокопроизводительные СВУ, что несомненно важно для станций оператора управления технологическим процессом (ТП). Однако, необходимость инсталляции данного клиентского ПО может сделать его использование невозможным в отдельных ситуациях. С другой стороны, Web-технологии не требуют инсталляции на клиентские системы и являются предельно многоплатформенными (достаточно указать ссылку на Web-сервер в любом Web-браузере), что наиболее важно для различных инженерных и административных станций. С другой стороны, производительность и надёжность таких интерфейсов ниже, что практически исключает их использование на станциях оператора ТП.
OpenSCADA имеет предельно гибкую архитектуру, которая позволяет создавать внешние интерфейсы, в том числе и пользовательские, на любой основе и вкус. Например, среда конфигурации OpenSCADA доступна как на Qt-библиотеке, так и на Web-основе.
В тоже время, независимое создание реализаций СВУ на различной основе может повлечь за собой невозможность использования данных конфигурации одной СВУ в другой. Что неудобно и ограничено с пользовательской стороны, а также накладно в плане реализации и последующей поддержки.
С целью избежания этих проблем, а также создания в кратчайшие сроки полного спектра различных типов СВУ, основан проект создания концепции СВУ. Результатом этого проекта стал данный модуль движка(модели данных) СВУ, а также модули непосредственной визуализации Vision и WebVision.
Данный модуль движка(модели данных) СВУ предназначен для формирования логической структуры СВУ и исполнения сеансов отдельных экземпляров проектов СВУ. Также, модуль предоставляет конечным визуализаторам СВУ все необходимые данные, как посредством локальных механизмов взаимодействия OpenSCADA, так и интерфейса управления OpenSCADA, для удалённого доступа.
Финальная версия этого модуля СВУ обеспечит:
Перечислим возможности, которые сможет и обеспечивает СВУ, построенная на основе данного проекта:
Сам модуль не содержит механизмов визуального формирования интерфейсов СВУ, такие инструменты могут предоставляться модулями конечной визуализации СВУ, например, он предоставляется модулем Vision.
Хотя визуальных механизмов формирования СВУ модулем не предоставляется, для управления логической структурой предоставляется механизм, реализованный на основе интерфейса управления OpenSCADA, а значит, доступный для использования в любом конфигураторе OpenSCADA. Диалоги этого интерфейса рассмотрены далее, в контексте рассмотрения архитектуры модуля и его данных.
СВУ, в целом, может работать в двух режимах — разработки и исполнения. В режиме разработки формируется интерфейс СВУ и его компоненты, определяются механизмы взаимодействия. В режиме исполнения выполняется формирование интерфейса СВУ и производится взаимодействие с конечным пользователем, на основе разработанных СВУ.
Интерфейс СВУ формируется из кадров, каждый из которых, в свою очередь, формируется из элементов примитивов или пользовательских элементов интерфейса. При этом, пользовательские элементы интерфейса также формируются из примитивов или других пользовательских элементов. Таким образом обеспечивается иерархичность и повторное использования уже разработанных компонентов.
Кадры и пользовательские элементы размещаются в библиотеках виджетов. Из элементов этих библиотек формируются проекты интерфейсов конечной визуализации СВУ. На основе-же этих проектов формируются сеансы визуализации.
Описанная структура СВУ приведена на рисунке.
Данная архитектура СВУ позволяет реализовать поддержку трёх уровней сложности у процесса разработки интерфейсов управления:
Кадр это окно, непосредственно предоставляющее информацию пользователю в графической и/или текстовой форме. Группа взаимосвязанных кадров формирует цельный пользовательский интерфейс ВУ.
Содержимое кадра формируется из элементов отображения (виджетов). Виджеты могут быть базовыми примитивами (различные элементарные фигуры, текст, тренд и т.д.) и производными, сформированные из базовых или других производных виджетов. Все виджеты группируются по библиотекам. В процессе работы, пользователь может формировать собственные библиотеки производных виджетов.
Собственно сам кадр также является виджетом, который используется в роли конечного элемента визуализации. А это значит, что библиотеки виджетов могут хранить и заготовки кадров, и шаблоны результирующих страниц пользовательского интерфейса.
Кадры и виджеты являются пассивными элементами, которые обычно не содержат связей с динамикой и другими кадрами, а только предоставляют информацию о свойствах и характере динамики(конфигурации), подключаемой к свойствам. Активированные кадры, содержащие ссылки на динамику и активные связи, формируют пользовательский интерфейс и хранятся в проектах. В некоторых случаях возможно прямое назначение динамики в заготовках кадров.
Производные кадры/виджеты могут содержать вложенные виджеты, которые могут быть склеены-связаны один с другим логикой, с помощью языка пользовательского программирования OpenSCADA.
Виджет является элементом, посредством которого обеспечивается:
Настройка и связывание виджетов производится посредством их свойств. Родительский виджет, и виджеты содержащиеся в нем, могут дополняться пользовательскими свойствами. В последствии, пользовательские и статические атрибуты связываются со свойствами вложенных виджетов, посредством внутренней логики. Для отображения динамики (текущих и архивных данных) свойства виджетов динамизируются, т.е связываются с атрибутами параметров OpenSCADA или свойствами других виджетов. Использование, для связывания вложенных виджетов внутренней логикой, языка пользовательского программирования OpenSCADA снимает вопрос реализации сложной логики визуализации, обеспечивая тем самым высокую гибкость. Практически, можно создавать полностью динамизированные кадры со сложными взаимосвязями на уровне пользователя.
Непосредственная конфигурация, и свойства конечного интерфейса визуализации, содержатся в проекте интерфейса визуализации СВУ, которых может быть создано множество.
Каждый проект включает страницы из библиотек кадров-виджетов. В ряде режимов, сама страница может включать в себя вложенные страницы как независимые от родительской, так и с использованием родительского в роли шаблона. Шаблонные страницы-виджеты позволяют предельно упростить процесс создания однотипных кадров простого мониторинга, инженером АСУ ТП или пользователем OpenSCADA. Примером таких однотипных кадров могут быть: группы контуров, группы графиков, протоколы и различные сводные таблицы. Мнемосхемы технологических процессов редко подпадают под такую схему и формируются в отдельной странице-виджете.
Страница, как и виджет на котором она основана, предоставляет возможность привязки динамики к описанным в ней свойствам — связи, которые могут быть установлены динамикой или константами. Кроме того, связывание непосредственно на уровне страницы проекта является предпочтительным, чем осуществление этого на уровне виджетов библиотек.
Пример иерархического представления компонентов проекта классического интерфейса ВУ технологического процесса, с описанием выражений стандартных вызовов, приведен на рисунке.
Предусмотрены следующие специальные свойства страниц:
На комбинациях вышеуказанных специальных свойств страниц реализованы следующие их типы:
На стороне визуализации (RunTime) построена логика, регулирующая каким образом открывать страницы, на основе следующих атрибутов базового элемента "Box":
Логика определения способа открытия страниц работает следующим образом:
Сеанс проекта это развёрнутое дерево проекта непосредственного его исполнения, включающего отдельную задачу иерархического исполнения процедур виджетов. Для каждого проекта может быть открыто множество сеансов. Формирование конечного интерфейса визуализации осуществляется визуализаторами, исходя из данных сеанса проекта, после создания сеанса по запросу.
Между виджетами, на различных уровнях иерархии, в конечном счёте выстраиваются достаточно сложные наследственные связи, которые определяются возможностью использования одних виджетов другими, начиная с библиотечного виджета и заканчивая виджетом сеанса. Для разъяснения этих особенностей взаимодействия, на рисунке изображена исчерпывающая карта "использующего" наследования.
На уровне сеансов, виджет содержит объект значений процедуры обсчёта. Этот объект инициируется и используется в случае наличия самой процедуры вычисления. В момент инициализации создаётся перечень параметров процедуры и выполняется её компиляция с этими параметрами, в модуле, реализующем выбранный язык программирования и с названием результирующей процедуры в виде закодированного полного имени виджета. Скомпилированная функция подключается к объекту значений процедуры обсчёта, а далее выполняется её вычисление с периодом сеанса.
Вычисление и обработка виджета выполняется в следующей последовательности:
Объекты сеанса наследуются от абстрактного объекта "Widget" и используют соответствующие объекты проекта. Так, сеанс "Session" использует проект "Project" и формирует на основе него развёрнутое дерево. Страница проекта "Page" прямо используется страницей сеанса "SessPage". Остальные объекты "SessWdg" разворачиваются в соответствии с иерархией элементов страницы.
В дополнение к стандартным свойствам абстрактного виджета "Widget", элементы страницы и сами страницы сеанса получают свойства: хранения объекта значений вычислительной процедуры, обсчёта процедур и механизм обработки событий. Страницы сеанса, в дополнение ко всему, содержат контейнер следующих по иерархии страниц. Сеанс, в целом, вычисляется с указанной периодичностью и в последовательности:
Такая политика позволяет обходить страницы в соответствии с их иерархией, а событиям в виджетах "всплывать" на верх за одну итерацию.
Сеансы поддерживают многоязычность на уровне интерфейса управления OpenSCADA, которая зависит от значения общих атрибутов "lang" и "user", и которые визуализатор может устанавливать в соответствии со своим языком. Эта функция включается динамическим переводом сообщений OpenSCADA.
Известно, что человек может иметь индивидуальные особенности восприятия графической информации. Если эти особенности не учитывать то можно получить неприятие и отторжение пользователя к интерфейсу ВУ. Такое неприятие и отторжение может привести к фатальным ошибкам при управлении ТП, а также травмировать человека постоянной работой с интерфейсом. В SCADA системах приняты соглашения, которые регламентируют требования по созданию унифицированного интерфейса ВУ, нормально воспринимаемого большинством людей. При этом, практически отсутствует учёт особенностей людей с некоторыми отклонениями.
С целью учесть это обстоятельство, и предоставить возможность централизованно и просто изменять визуальные свойства интерфейса, проектом реализуется менеджер стилей интерфейса визуализации.
Пользователем может быть создано множество стилей, каждый из которых будет хранить цветовые, шрифтовые и другие свойства элементов кадра. Простая смена стиля позволит быстро преобразить интерфейс ВУ, а возможность назначения индивидуального стиля для пользователя позволит учесть его особенности.
Для реализации этой возможности, при создании кадров, необходимо для свойств цвета, шрифта и других установить параметр "Конфигурация" (таблицы во вкладке "Обработка") в значение "Из стиля". А в параметре "Конфигурационный шаблон" указать идентификатор поля стиля. Далее, это поле автоматически появится в менеджере стилей и его можно будет там менять. Менеджер стилей доступен на странице конфигурации проекта во вкладке "Стили". На этой вкладке можно стили создавать, удалять и изменять, удалять их поля.
В целом, стили доступны начиная с уровня проектов. На уровне библиотек виджетов можно только определять поля стилей у виджетов. На уровне проекта, при выборе стиля, включается работа со стилями, что предполагает доступ к полям стилей вместо непосредственных значений атрибутов. Фактически, это означает, что при чтении или записи атрибута виджета, указанные операции будут осуществляться над соответствующим полем выбранного стиля.
При запуске проекта на исполнения будет использован установленный в проекте стиль. В последствии, пользователь может выбрать стиль из перечня доступных. Выбранный пользователем стиль будет сохранён и использован при следующем запуске проекта.
Учитывая спектр задач, для которых может использоваться OpenSCADA, нужно предусмотреть механизм управления интерактивными пользовательскими событиями. Это связано с тем, что при решении отдельных задач встраиваемых систем, устройства ввода и управления могут значительно отличатся. Впрочем, достаточно взглянуть на обычную офисную клавиатуру и клавиатуру ноутбука, чтобы снять любые сомнения о необходимости менеджера событий.
Менеджер событий должен работать используя карты событий. Карта событий — это список именованных событий с указанием его происхождения. Происхождением события может быть клавиатура, манипулятор мыши, джойстик и т.д. При возникновении события менеджер событий ищет его в активной карте и сопоставляет с именем события. Сопоставленное имя события помещается в очередь на обработку. Виджеты, в этом случае, должны обрабатывать полученную очередь событий.
Активная карта событий указывается в профиле каждого пользователя или устанавливается по умолчанию, в планах.
В целом, предусмотрены четыре типа событий:
Само событие представляет недостаточно информации, особенно если его обработка происходит на уровнях выше. Для однозначной идентификации события и его источника, событие, в целом, записывается следующим образом: "ws_BtPress:/curtime". Где:
В таблице 3.5 приведён перечень стандартных событий, поддержка которых должна быть обеспечена в визуализаторах СВУ.
Таблица 3.5. Стандартные события
Идентификатор | Описание |
---|---|
Клавиатурные события: key_[pres|rels][Ctrl|Alt|Shift]{Key} | |
*SC#3b | Скан-код клавиши. |
*#2cd5 | Код неименованной клавиши. |
*Esc | "Esc". |
*BackSpace | Удаление предыдущего символа — "<-". |
*Return, *Enter | Ввод — "Enter". |
*Insert | Вставка — "Insert". |
*Delete | Удаление — "Delete". |
*Pause | Пауза — "Pause". |
Печать экрана — "Print Screen". | |
*Home | Дом — "Home". |
*End | Конец — "End". |
*Left | Влево — "<-". |
*Up | Вверх — '^'. |
*Right | Вправо — "->". |
*Down | Вниз — '\/'. |
*PageUp | Страницы вверх — "PageUp". |
*PageDown | Страницы вниз — "PageDown". |
*F1 ... *F35 | Функциональная клавиша от "F1" до "F35". |
*Space | Пробел — ' '. |
*Apostrophe | Апостроф — '`'. |
*Asterisk | Звёздочка на дополнительном поле клавиатуры — '*'. |
*Plus | Плюс на дополнительном поле клавиатуры — '+'. |
*Comma | Запятая — ','. |
*Minus | Минус — '-'. |
*Period | Точка — '.'. |
*Slash | Наклонная черта — '\'. |
*0 ... *9 | Цифра от '0' до '9'. |
*Semicolon | Точка с запятой — ';'. |
*Equal | Равно — '='. |
*A ... *Z | Клавиши букв латинского алфавита от 'A' до 'Z'. |
*BracketLeft | Левая квадратная скобка — '['. |
*BackSlash | Обратная наклонная черта — '/'. |
*BracketRight | Правая квадратная скобка — ']'. |
*QuoteLeft | Левая кавычка — . |
События клавиатурного фокуса. | |
ws_FocusIn | Фокус получен виджетом. |
ws_FocusOut | Фокус утерян виджетом. |
Мышиные события: | |
key_mouse[Pres|Rels][Left|Right|Midle] | Нажата/отпущена кнопка мыши. |
key_mouseDblClick | Двойное нажатие левой кнопки мыши. |
События квитирования на стороне визуализатора. | |
ws_alarmLev | Квитирование всех нарушений всеми способами и типами уведомления. |
ws_alarmNtf{N} | Квитирование всех нарушений уведомления типа {N} (0...7). |
События примитива элементарной фигуры ElFigure: | |
ws_Fig[Left|Right|Midle|DblClick] | Активация фигур (заливок) клавишей мыши. |
ws_Fig{N}[Left|Right|Midle|DblClick] | Активация фигуры (заливки) N клавишей мыши. |
События примитива элемента формы FormEl: | |
ws_LnAccept | Установлено новое значение в строке ввода. |
ws_TxtAccept | Изменено значение редактора текста. |
ws_ChkChange | Состояние флажка изменено. |
ws_BtPress | Кнопка нажата. |
ws_BtRelease | Кнопка отпущена. |
ws_BtToggleChange | Изменена вдавленность кнопки. |
ws_BtMenu={Item} | Выбор элемента меню Item по кнопке. |
ws_BtLoad | Выбранный файл загружен. |
ws_CombChange | Изменено значение поля выбора. |
ws_ListChange | Изменен текущий элемент списка. |
ws_TreeChange | Изменен текущий элемент дерева. |
ws_TableChangeSel | Изменён выбор элемента таблицы. |
ws_TableEdit_{colN}_{rowN} | Отредактирована ячейка таблицы ({colN}:{rowN}). |
ws_SliderChange | Изменение положения слайдера. |
События примитива медиа-контента Media: | |
ws_MapAct{N}[Left|Right|Midle] | Активирована медиа-область с номером N, клавишей мыши. |
ws_MediaFinished | Окончано проигрывание Медиа-потока. |
События являются основным механизмом уведомления и активно используются для осуществления взаимодействия с пользователем. Для обработки событий предусмотрены два механизма:
Механизм "Сценарий управления открытием страниц" основан на базовом атрибуте виджета "evProc", в котором может описываться открытие страниц. Сценарий этого атрибута записывается в виде списка команд с синтаксисом: "{event}:{evSrc}:{com}:{prm}". Где:
Реализованы следующие команды:
Специальные символы шаблона расшифровываются следующим образом:
Для правильного понимания работы механизма шаблонов, при выборе страницы, приведём несколько реальных примеров:
В качестве примера, приведём сценарий обеспечения работы главной страницы интерфейса пользователя:
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;
Важным элементом любого интерфейса визуализации является уведомление пользователя про нарушения — сигнализация. Для упрощения восприятия, а также в виду тесной связи визуализации и уведомления (как правило, уведомление дополняет визуализацию) решено интегрировать интерфейс уведомления в интерфейс визуализации. Для этого, во всех виджетах, предусматриваются два дополнительных атрибута уровня сеанса: "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]]]; if(doRes) { Текст команды формирования ресурса. } if(doNtf) { Текст команды уведомления. }
//flags=notify[{DL}][|resource[|queue[|quietanceRet]]]; //name={Имя уведомителя} //ico={Имя иконки} { Текст команды уведомления для любого или конкретного визуализатора. }
Флаги:
Наличие поля "resStatic" включает получение ресурса непосредственно из mime-таблицы или файла, указывается в способ подобный примитиву "Медиа".
Переменные обмена:
Примеры и комментарии к работе типовых способов уведомлений:
//flags=notify|notifyServ|notifyServ if(en) SYS.system("beep -f 1000 -l 1000000 &", true); else if((beepPID=SYS.system("pidof beep")).toInt()) SYS.system("kill "+beepPID);
#!/bin/sh #flags=notify|notifyServ if test $en = 1; then beep -f 1000 -l 1000000 & else beepPID=$(pidof beep) if test "x$beepPID" != "x"; then kill $beepPID; fi fi
//flags=notify2|notifyServ2 if(en) SYS.system("play -q alarm.ogg");
#!/bin/sh #flags=notify2|notifyServ2 if test $en = 1; then play -q alarm.ogg; fi
//flags=queue
//flags=notify2|queue if(doNtf && en && res.length) { SYS.fileWrite("tmpPlay", res); SYS.system("play -q tmpPlay"); SYS.fileRemove("tmpPlay"); }
#!/bin/sh #flags=notify2|queue if test $doNtf = 1 -a $en = 1 -a -s $res; then play -q $res; fi
//flags=queue
//flags=notify2|queue if(doNtf && en && mess.length) { SYS.fileWrite("tmpForSpeech", mess); SYS.system("festival --tts tmpForSpeech"); SYS.fileRemove("tmpForSpeech"); }
#!/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
//flags=notify2|notifyServ2|resource if(doRes) res = SYS.fileRead("alarm.ogg"); //Вставить сюда другой метод генерации if(doNtf && en && res.length) { SYS.fileWrite("tmpPlay", res); SYS.system("play -q tmpPlay"); SYS.fileRemove("tmpPlay"); }
#!/bin/sh #flags=notify2|notifyServ2|resource if test $doRes = 1; then cp -f alarm.ogg $res; fi #Вставить сюда другой метод генерации if test $doNtf = 1 -a $en = 1 -a -s $res; then play -q $res; fi
//flags=notify2|resource if(en && res.length) { SYS.fileWrite("tmpPlay", res); SYS.system("play -q tmpPlay"); SYS.fileRemove("tmpPlay"); }
#!/bin/sh #flags=notify2|resource if test $en = 1 -a -s $res; then play -q $res; fi
//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"); }
#!/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
//flags=notify2|queue if(en && res.length) { SYS.fileWrite("tmpPlay", res); SYS.system("play -q tmpPlay"); SYS.fileRemove("tmpPlay"); }
#!/bin/sh #flags=notify2|queue if test $en = 1 -a -s $res; then play -q $res; fi
Для разделения доступа к интерфейсу ВУ и его составляющим, каждый виджет содержит информацию о владельце, его групах и правах доступа. Права доступа записываются в виде триады: "{пользователь}{группа[,группа1,группаN]}{остальные}", где каждый элемент состоит из двух признаков доступа, для которых принята следующая интерпретация:
В режиме разработки используется простая схема доступа "root.UI:RWRWR_", что означает — все пользователи могут открывать и просматривать библиотеки, их компоненты и проекты; а редактировать могут все пользователи группы "UI" (пользовательские интерфейсы).
В режиме исполнения работают права, описанные в компонентах интерфейса, которые предусматривают возможность наследования владельца и прав, сверху вниз. Причём, по умолчанию, наследование включено в каждом виджете, а значит — они получат владельца и права проекта. В тоже время, прямая установка прав составного виджета распространит их на все компоненты этого виджета.
Для предоставления в интерфейс визуализации актуальных данных, должны использоваться данные подсистемы "Сбор данных (DAQ)". Природа этих данных следующая:
Учитывая первый пункт, нужно обеспечить возможность группового назначения ссылки. Для этого используем концепцию логического уровня.
В соответствии с пунктом 2, связи обеспечивают прозрачное преобразование типов и не требуют специальной конфигурации.
Для удовлетворения возможности доступа к архивам, в соответствии с пунктом 3, связи выполняют проверку типа атрибута и, в случае подключения к "Адресу", в значение помещается адрес связи.
В терминах СВУ, динамические связи и конфигурация динамики являются одним процессом, для описания конфигурации которого предусматривается вкладка "Обработка" виджетов. Вкладка содержит таблицу конфигурации свойств атрибутов и текст процедуры вычисления виджета.
Кроме полей конфигурации атрибутов, в таблице предусматривается колонка "Обработка", для избирательного использования атрибутов в вычислительной процедуре виджета, и колонки "Конфигурация", "Конфигурационный шаблон" для описания конфигурации связей.
Если в колонке "Обработка" стоит true, то в вычислительной процедуре становится доступной переменная {идентификатор виджета}_{идентификатор атрибута}, например cw_value.
Колонка "Конфигурация" позволяет указать тип связи атрибута виджета:
Колонка "Конфигурационный шаблон" позволяет связать группы динамических атрибутов. Например, это могут быть разные типы параметров подсистемы "DAQ" и другие виджеты интерфейса. При корректном формировании этого поля работает механизм автоматического назначения атрибутов, при указании только параметра подсистемы "DAQ" или виджета интерфейса, что упрощает и ускоряет процесс конфигурации. Значение этой колонки имеет следующий формат:
Установка связей может быть нескольких типов, который определяется префиксом:
Обработка связей происходит с периодичностью вычисления виджета, в порядке:
Период вычисления виджета в значении по умолчанию "-1" означает цепное использование значения периода владельца виджета до первого положительного значения, или периода вычисления проекта.
На рисунке представлена вкладка связей с групповым назначением атрибутов, путём указания только параметра. На следующем рисунке представлено индивидуальное назначение атрибутов.
При размещении виджета в контейнер виджетов все связи исходного виджета добавляются в список результирующих связей контейнера виджетов, однако, только на глубину в один уровень вложения.
Из вышесказанного видно, что связи устанавливаются пользователем в процессе конфигурации интерфейса. Однако, для предоставления возможности создания кадров общего назначения с функцией предоставления детализированных данных разных источников одного типа, необходим механизм динамической установки связей. Такой механизм предусматривается:
Рассмотрим пример, когда имеется кадр общего назначения "Панель контроля графиком" и множество "Графиков" на разных кадрах. "Панель контроля графиком" имеет связи с шаблонами:
При этом, каждый виджет "График" имеет атрибуты "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 |
Любой вновь создаваемый виджет основывается на одном из нескольких примитивов — конечном элементе визуализации, путём установки родственной связи как прямо на примитив, так и посредством нескольких промежуточных пользовательских виджетов. Каждый из примитивов содержит механизм модели данных. Экземпляр виджета хранит значения свойств собственной конфигурации примитива.
В задачи интерфейса визуализации входит поддержка и работа с моделью данных примитивов виджетов. Примитивы виджетов должны быть тщательно проработаны и унифицированы, с целью охватить как можно больше возможностей в как можно меньшем количестве слабо связанных друг с другом, по назначению, примитивов.
Таблица. Библиотека примитивов виджетов — базовые элементы отображения
Идентификатор | Наименование | Функция |
---|---|---|
ElFigure | Элементарная графическая фигура |
Примитив является основой отрисовки элементарных графических фигур со всевозможной комбинацией их в одном объекте. Предусматривается поддержка следующих элементарных фигур:
Для всех фигур, содержащихся в виджете, устанавливаются единые свойства толщины, цвета и т.д., также, предусматривается возможность указания вышеперечисленных атрибутов для каждой фигуры отдельно и их динамизация. |
FormEl | Элемент формы |
Включает поддержку стандартных компонентов формы:
|
Text | Текст | Элемент текста-метка. Характеризуется типом шрифта, цветом, ориентацией и выравниванием. Предусматривается поддержка аргументов. |
Media | Медиа | Элемент отображения растровых и векторных изображений различных форматов, проигрывания анимированных изображений, проигрывание аудио-фрагментов и просмотр видео-фрагментов. |
Diagram | Диаграмма | Элемент диаграммы с поддержкой возможности отображения нескольких потоков в реальном времени для: трендов (временных графиков), частотного спектра, XY диаграмм. |
Protocol | Протокол | Элемент протокола — визуализатор сообщений программы, с поддержкой нескольких режимов работы. |
Document | Документ | Элемент формирования отчётов, журналов и другой документации на основе доступных данных. |
Box | Контейнер | Содержит механизм размещения-включения других виджетов для формирования новых, более сложных, виджетов и страниц конечной визуализации. |
Function, в планах | Функция API объектной модели OpenSCADA | Невизуальный виджет, на стороне исполнения, позволяющий включать вычислительные функции объектной модели OpenSCADA в СВУ. |
Таблица. Общий набор свойств/атрибутов виджета
Идентификатор | Имя | Номер | Значение |
---|---|---|---|
id | Идентификатор | - | Идентификатор элемента. Атрибут только для чтения, призванный предоставить информацию об идентификаторе элемента. |
path | Путь | - | Путь к этому виджету. Атрибут только для чтения и предоставления исчерпывающей информации о расположения элемента. |
parent | Родитель | - | Путь к родительскому виджету. Атрибут только для чтения и предоставления информации о расположении предка от которого унаследован виджет. |
owner | Владелец | - | Владелец и группы виджета, в виде "{владелец}:{группа[,группа2,группаN]}", по умолчанию "root:UI". |
perm | Доступ | - |
Права доступа к виджету, в виде "{пользователь}{группы}{другие}" плюс флаг наследования, включающий наследование владельца и его прав от вышестоящего виджета.
По умолчанию 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}".
|
evProc | Обработка событий | - |
Атрибут хранения сценария обработки событий непосредственного управления пользовательским интерфейсом. Сценарий представляет собой список команд интерфейсу визуализации, генерируемых при поступлении события (атрибут event). Прямая обработка событий для управления страницами в виде: "{event}:{evSrc}:{com}:{prm}". Где:
Примеры:
|
Дополнительные атрибуты элементов, помещённых в проект в роли страницы. | |||
pgOpen | Страница: открыта | - |
Признак "Страница открыта".
|
pgNoOpenProc | Страница: обрабатывать закрытой | - | Признак "Исполнять страницу даже если она закрыта". |
pgOpenSrc | Страница: источник открытия | 3 |
Полный адрес страницы, открывшей данную.
|
pgGrp | Страница: группа | 4 | Группа страницы. |
Дополнительные атрибуты режима исполнения — сеанса. (Виртуальные атрибуты не доступны в процедуре виджета) | |||
event | События | - | Специальный атрибут сбора событий виджета в списке, разделённом новой строкой. Доступ к атрибуту защищён критической секцией для избежания потери событий. Атрибут всегда доступен в процедуре виджета. |
load | Загрузка | -1 | Виртуальная команда групповой загрузки данных. |
focus | Фокус | -2 | Специальный атрибут индикации факта получения фокуса, активным виджетом. Атрибут этого виджета и вложенных виджетов доступен в процедурах виджета. |
perm | Доступ | -3 | Виртуальный атрибут прав активного пользователя на просмотр и контроль над виджетом. |
Движок среды визуализации предусматривает активацию атрибутов, специфичных для визуализатора. Процесс активации осуществляется при открытии сеанса визуализации проекта и предусматривает, в этом проекте: создание специфичного атрибута с указанными свойствами, если он отсутствует, и активацию отслеживания его модификации движком среды визуализации, как для атрибутов формирования образов примитивов. Для непосредственного определения такого атрибута можно также использовать префикс идентификатора атрибута "vs_", что быстрее и исключает стадию активации. С перечнем специфичных для визуализатора атрибутов можно ознакомиться в документации соответствующего визуализатора.
Примитив является основой в отрисовке элементарных графических фигур со всевозможной их комбинацией в одном объекте. Учитывая широкий спектр всевозможных фигур, которые должен поддерживать примитив, и, в тоже время, являться достаточно простым в использовании и, по возможности, в реализации, было решено ограничить перечень базовых фигур, используемых для построения результирующих графических объектов, до таких: линия, дуга, кривая Безье и заливка замкнутых контуров. Основываясь уже на этих базовых фигурах, можно строить производные фигуры, комбинируя базовые. В рамках примитива существует возможность задания прозрачности цвета в диапазоне [0...255], где '0' — полная прозрачность.
Таблица. Набор дополнительных свойств/атрибутов примитива "Элементарная фигура (ElFigure)"
Примитив, предназначенный для предоставления, в распоряжение пользователя, стандартных элементов формы. Общий перечень атрибутов зависит от типа элемента.
Таблица. Набор дополнительных свойств/атрибутов примитива "Элемент формы (FormEl)"
Идентификатор | Имя | Номер | Значение |
---|---|---|---|
elType | Тип элемента | 20 | Тип элемента, от значения которого зависит перечень дополнительных атрибутов:
|
Строка редактирования: | |||
value | Значение | 21 | Содержимое строки. |
view | Вид | 22 | Вид строки редактирования:
|
cfg | Конфигурация | 23 |
Конфигурация строки. Формат значения данного поля для различных видов строки:
|
confirm | Подтверждать | 24 | Включение режима подтверждения. |
font | Шрифт | 25 |
Имя шрифта в виде "{family} {size} {bold} {italic} {underline} {strike}", где:
Примеры:
|
Редактор текста: | |||
value | Значение | 21 | Содержимое редактора. |
wordWrap | Перенос слов | 22 | Автоматический перенос текста по словам. |
confirm | Подтверждать | 24 | Включение режима подтверждения. |
font | Шрифт | 25 | Имя шрифта в виде "{family} {size} {bold} {italic} {underline} {strike}" (детали выше). |
Флажок: | |||
name | Имя | 26 | Имя/метка флажка. |
value | Значение | 21 | Значение флажка. |
font | Шрифт | 25 | Имя шрифта в виде "{family} {size} {bold} {italic} {underline} {strike}" (детали выше). |
Кнопка: | |||
name | Имя | 26 | Имя-надпись на кнопке. Допустимы символы '\n' для возможности ввода многострочных надписей. |
value | Значение | 21 |
Значение, отличается для разных режимов:
|
img | Изображение | 22 |
Изображение на кнопке. Имя изображения в виде "[{src}:]{name}", где:
Примеры:
|
color | Цвет | 23 |
Цвет кнопки. Имя цвета в виде "{color}[-{alpha}]", где:
Примеры:
|
colorText | Цвет: текст | 27 | Цвет текста (детали выше). |
mode | Режим | 24 |
Режим работы кнопки:
|
font | Шрифт | 25 | Имя шрифта в виде "{family} {size} {bold} {italic} {underline} {strike}" (детали выше). |
Список: | |||
value | Значение | 21 | Текущее значение списка. |
items | Элементы | 22 | Перечень элементов списка. |
font | Шрифт | 25 | Имя шрифта в виде "{family} {size} {bold} {italic} {underline} {strike}" (детали выше). |
mult | Множественный выбор | 23 | Разрешать выбор множества элементов списка. |
Выбор из списка, Дерево: | |||
value | Значение | 21 | Текущее значение списка. |
items | Элементы | 22 | Перечень элементов списка или иерархических элементов дерева в виде пути "/{КАТ}/{КАТ}/{ЭЛЕМ}". |
font | Шрифт | 25 | Имя шрифта в виде "{family} {size} {bold} {italic} {underline} {strike}" (детали выше). |
Таблица: | |||
set | Значение установки | 23 | Значение редактирования ячейки таблицы с адресом в событии "ws_TableEdit_{colN}_{rowN}". |
value | Значение | 21 |
Адрес выбранного элемента. Изменение сопровождается событием "ws_TableChangeSel". Формат адреса зависит от режима выбора таблицы:
|
items | Элементы | 22 |
Структура и содержимое таблицы в виде XML: <tbl> <h><s>{Заголовок1}</s><s>{Заголовок2}</s></h> <r><s>{Ряд1Колонка1Строка}</s><i>{Ряд1Колонка2Целое}</i></r> <r><b>{Ряд2Колонка1Логическое}</b><r>{Ряд2Колонка2Вещественное}</r></r> </tbl> Теги:
|
font | Шрифт | 25 | Имя шрифта в виде "{family} {size} {bold} {italic} {underline} {strike}" (детали выше). |
Слайдер и полоса прокрутки: | |||
value | Значение | 21 | Положение слайдера. |
cfg | Конфигурация | 22 |
Конфигурация слайдера в формате: "{ВертОриент}:{Минимум}:{Максимум}:{ОдинШаг}:{СтрШаг}".
|
Данный примитив предназначен для вывода простого и HTML текста, используемого в роли меток и различных подписей. С целью создания декоративных оформлений, примитив поддерживает обвод текста рамкой.
Таблица. Набор дополнительных свойств/атрибутов примитива "Элемент текста (Text)"
Идентификатор | Имя | Номер | Значение |
---|---|---|---|
backColor | Фон: цвет | 20 |
Фоновый цвет. Имя цвета в виде "{color}[-{alpha}]", где:
Примеры:
|
backImg | Фон: изображение | 21 |
Фоновое изображение. Имя изображения в виде "[{src}:]{name}", где:
Примеры:
|
bordWidth | Граница: ширина | 22 | Ширина бордюра. |
bordColor | Граница: цвет | 23 | Цвет бордюра (детальнее в атрибуте 20). |
bordStyle | Граница: стиль | 24 | Стиль бордюра: "Нет", "Точечный", "Пунктирный", "Сплошной", "Двойной", "Канавка", "Кромка", "Вдавлен", "Выступающий". |
font | Шрифт | 25 |
Имя шрифта в виде "{family} {size} {bold} {italic} {underline} {strike}", где:
Примеры:
|
color | Цвет | 26 | Цвет текста (детальнее в атрибуте 20). |
orient | Угол поворота | 27 | Ориентация текста, угол поворота. |
wordWrap | Перенос слов | 28 | Автоматический перенос текста по словам. |
alignment | Выравнивание | 29 | Выравнивание текста: "Вверху слева", "Вверху справа", "Вверху по центру", "Вверху по ширине", "Внизу слева", "Внизу справа", "Внизу по центру", "Внизу по ширине", "По центру слева", "По центру справа", "По середине", "По центру по ширине". |
inHtml | В HTML | 31 | Отображение и поддержка содержимого аргумента text в HTML. |
text | Текст | 30 | Значение текста. Используйте "%{x}" для помещения значения аргумента "x" (от 1). |
numbArg | Количество аргументов | 40 | Количество аргументов. |
Атрибуты аргументов | |||
arg{x}val | Аргумент {x}: значение | 50+10*x | Значение аргумента x. |
arg{x}tp | Аргумент {x}: тип | 50+10*x+1 | Тип аргумента x: "Целый", "Вещественный", "Строка". |
arg{x}cfg | Аргумент {x}: конфигурация | 50+10*x+2 |
Конфигурация аргумента x:
|
Данный примитив предназначен для проигрывания различных медиа-материалов, начиная от простых изображений и заканчивая полноценными аудио и видео потоками.
Таблица. Набор дополнительных свойств/атрибутов примитива "Элемент отображения медиа-материалов (Media)"
Идентификатор | Имя | Номер | Значение |
---|---|---|---|
backColor | Фон: цвет | 20 |
Фоновый цвет. Имя цвета в виде "{color}[-{alpha}]", где:
Примеры:
|
backImg | Фон: изображение | 21 |
Фоновое изображение. Имя изображения в виде "[{src}:]{name}", где:
Примеры:
|
bordWidth | Граница: ширина | 22 | Ширина бордюра. |
bordColor | Граница: цвет | 23 | Цвет бордюра (детальнее в атрибуте 20). |
bordStyle | Граница: стиль | 24 | Стиль бордюра: "Нет", "Точечный", "Пунктирный", "Сплошной", "Двойной", "Канавка", "Кромка", "Вдавлен", "Выступающий". |
src | Источник | 25 |
Имя источника медиа в виде "[{src}:]{name}", где:
Примеры:
|
type | Тип | 27 |
Тип медиа:
|
areas | Области карты | 28 | Количество активных областей. |
Атрибуты изображения (Image) | |||
fit | Заполнять виджет | 26 | Признак "Согласовать содержимое с размером виджета". |
Атрибуты анимации-видеоролика (Animation) | |||
fit | Заполнять виджет | 26 | Признак "Согласовать содержимое с размером виджета". |
speed | Скорость проигрывания | 29 | Скорость проигрывания, в процентах от оригинальной скорости. Если значение меньше или равно 1% то проигрывание прекращается. |
Атрибуты полноформатного видео (Full video) | |||
play | Играть | 29 | Видео/аудио — "Играть". |
roll | Заворачивать проигрывание | 30 | Повторение проигрывания по завершению. |
pause | Пауза | 31 | Приостановить проигрывание. |
size | Размер | 32 | Общий размер видео, в миллисекундах. |
seek | Положение | 33 | Позиция проигрывания видео, в миллисекундах. |
volume | Громкость | 34 | Громкость звука [0...100]. |
Активные области | |||
area{x}shp | Область {x}: образ | 40+3*x | Вид области x: "Квадрат", "Полилиния", "Окружность". |
area{x}coord | Область {x}: координаты | 40+3*x+1 | Координаты области x, через запятую идут координаты: "x1,y1,x2,y2,xN,yN". |
area{x}title | Область {x}: заголовок | 40+3*x+2 | Заголовок области x. |
Данный примитив предназначен для построения различных диаграмм во времени, включая графики-тренды отображения текущего процесса и архивных данных. Реализованы следующие типы диаграмм:
Для всех типов диаграмм возможно указание, в качестве источника данных:
Поддерживается режим слеживания за текущими значениями и значениями с архива, а также, возможно построение графиков параметров, не имеющих архива значений, путём накопления текущих значений в буфере диаграммы и только на момент активного отображения этой диаграммы.
Процесс доступа к архивным данным оптимизирован путём ведения промежуточного буфера отображения, а также, упаковки трафика данных при запросе, путем приведения данных к качеству достаточного для отображения.
Таблица. Набор дополнительных свойств/атрибутов примитива "Элемент построения диаграмм (Diagram)"
Идентификатор | Имя | Номер | Значение |
---|---|---|---|
backColor | Фон: цвет | 20 |
Фоновый цвет. Имя цвета в виде "{color}[-{alpha}]", где:
Примеры:
|
backImg | Фон: изображение | 21 |
Фоновое изображение. Имя изображения в виде "[{src}:]{name}", где:
Примеры:
|
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}", где:
Примеры:
|
valArch | Архиватор значений | 38 | Архиватор значений в виде "{МодульАрхивов}.{IdАрхиватора}". |
valsForPix | Значений на пиксель | 42 | Количество значений на пиксель. Увеличить для расширения точности экспорта на больших интервалах времени. |
parNum | Количество параметров | 39 | Количество параметров, отображаемых на одном тренде. |
Атрибуты типа: "График" | |||
sclHorPer | Шкала: размер гор. решетки, секунды | 43 | Фиксированный период решётки горизонтальной шкалы — отключает автоматическое вычисление периода решётки. Активируется если количество периодов на общий размер более двух и размер одного периода не менее 15 пикселей. |
Индивидуальные атрибуты параметров | |||
prm{X}addr | Параметр {X}: адрес | 50+10*{X} |
Полный адрес к атрибуту параметра X DAQ или архиву.
Пример:
|
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). |
Данный примитив предназначен для визуализации данных архива сообщений путём формирования протоколов с различными способами визуализации, начиная от статического сканирующего просмотра и заканчивая динамическим слеживанием.
Таблица. Набор дополнительных свойств/атрибутов примитива "Элемент построения протоколов на основе архивов сообщений (Protocol)"
Идентификатор | Имя | Номер | Значение |
---|---|---|---|
backColor | Фон: цвет | 20 |
Фоновый цвет. Имя цвета в виде "{color}[-{alpha}]", где:
Примеры:
|
backImg | Фон: изображение | 21 |
Фоновое изображение. Имя изображения в виде "[{src}:]{name}", где:
Примеры:
|
font | Шрифт | 22 |
Имя шрифта в виде "{family} {size} {bold} {italic} {underline} {strike}", где:
Примеры:
|
headVis | Заголовок видим | 23 | Видимость заголовка таблицы. |
time | Время, секунды | 24 | Текущее время, секунды. |
tSize | Размер, секунды | 25 | Размер запроса данных, секунды. Установить значение в '0' для получения всех нарушений, для "lev" < 0. |
trcPer | Период слежения, секунды | 26 | Режим и периодичность слежения. |
arch | Архиватор | 27 | Архиватор сообщений в виде "{МодульАрхивов}.{IdАрхиватора}". |
tmpl | Шаблон | 28 |
Шаблон категории или регулярное выражение "/{re}/". Для шаблона зарезервированы символы:
|
lev | Уровень | 29 | Уровень сообщений. Установите значение < 0 для получения текущих нарушений. |
viewOrd | Порядок отображения | 30 | Порядок отображения: "По времени", "По уровню", "По категории", "По сообщению", "По времени (обратно)", "По уровню (обратно)", "По категории (обратно)", "По сообщению (обратно)". |
col | Показать колонки | 31 |
Список видимых и порядок колонок, разделённый символом ';'. Предусматриваются колонки:
|
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). |
Примитив предназначен для формирования отчётной, оперативной и иной документации на основе шаблонов документов.
Таблица. Набор дополнительных свойств/атрибутов примитиве "Элемент формирования отчётной документации (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}", где:
Примеры:
|
bTime | Время: начало | 24 | Время начала документа, секунды. |
time | Время: текущее | 23 | Время генерации документа, секунды. Записать время для генерации документа от этой точки или нуль для перегенерации. |
process | В процессе | 27 | Признак процесса формирования документа отдельным потоком. |
n | Размер архива | 25 | Количество документов или глубина архива. |
Атрибуты включеного режима архивирования | |||
aCur | Архив: курсор: текущий | - | Позиция текущего документа в архиве. Запись значения <0 производит архивацию текущего документа. |
vCur | Архив: курсор: вид | - |
Текущий визуализируемый документ архива. Запись значения:
|
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" при разборе сообщений архива сообщений:
|
Специальные теги | |
Специальные атрибуты стандартных тегов | |
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-файл и другие табличные форматы. |
Примитив контейнера, используется для формирования составных виджетов и/или страниц пользовательского интерфейса.
Таблица. Набор дополнительных свойств/атрибутов примитива "Контейнер (Box)"
Идентификатор | Имя | Номер | Значение |
---|---|---|---|
pgOpenSrc | Страница: источник открытия | 3 | Полный адрес страницы, которая включена внутрь данного контейнера. |
pgGrp | Страница: группа | 4 | Группа контейнера страниц. |
backColor | Фон: цвет | 20 |
Фоновый цвет. Имя цвета в виде "{color}[-{alpha}]", где:
Примеры:
|
backImg | Фон: изображение | 21 |
Фоновое изображение. Имя изображения в виде "[{src}:]{name}", где:
Примеры:
|
bordWidth | Граница: ширина | 22 | Ширина бордюра. |
bordColor | Граница: цвет | 23 | Цвет бордюра (детальнее в атрибуте 20). |
bordStyle | Граница: стиль | 24 | Стиль бордюра: "Нет", "Точечный", "Пунктирный", "Сплошной", "Двойной", "Канавка", "Кромка", "Вдавлен", "Выступающий". |
Хранение данных виджетов, библиотек виджетов и проектов реализовано в БД, доступных OpenSCADA. БД организована по принадлежности данных к библиотеке-проекту. Т.е. отдельная библиотека-проект хранится в отдельной группе таблиц БД. Перечень библиотек виджетов хранится в индексной таблице библиотек с именем "VCALibs" и структурой "Libs", а перечень проектов в индексной таблице "VCAPrjs" и структурой "Projs". Экземпляр этих таблиц создаётся в каждой БД, где хранятся данные этого модуля. В состав таблиц, принадлежащих библиотеке виджетов и проекту, входят следующие:
Проекции (структуры) основных таблиц таковы:
API пользовательского программирования движка визуализации непосредственно представлено объектами OpenSCADA, формирующие пользовательский интерфейс, а именно "Сеансом" и "Виджетами-страницами". Для пользователя эти объекты предоставляют набор функций управления:
Объект "Сеанс" ( this.ownerSess() )
Объект "Виджет" (this)
//Добавляет новый виджет на основе виджета текстового примитива nw = this.wdgAdd("nw", "Новый виджет", "/wlb_originals/wdg_Text"); nw.attrSet("geomX", 50).attrSet("geomY", 50);
//Устанавливает ссылку восьмого тренда параметром this.linkSet("el8.name", "prm:/LogicLev/experiment/Pi", true);
Объект "Виджет", примитива "Документ" (this)
Устаревшее, но поддерживаемое, API представляется группой функций непосредственно в модуле движка СВУ. Вызов этих функций из процедуры виджета может осуществляться прямо по идентификатору, поскольку их область имён определяется в контексте процедур виджетов.
Список виджетов (WdgList)
Описание: Возвращает список виджетов, в контейнере виджетов, или дочерних виджетов. Если установлено pg, то возвращается список страниц проектов и сеанса.
Параметры:
Идентификатор | Имя | Тип | Режим | По умолчанию |
---|---|---|---|---|
list | Список | Строка | Возврат | |
addr | Адрес | Строка | Вход | |
pg | Страницы | Логический | Вход | 0 |
Присутствие узла (NodePresent)
Описание: Проверка узла на присутствие, включая виджеты, атрибуты и другие.
Параметры:
Идентификатор | Имя | Тип | Режим | По умолчанию |
---|---|---|---|---|
rez | Результат | Логический | Возврат | |
addr | Адрес | Строка | Вход |
Список атрибутов (AttrList)
Описание: Возвращает список атрибутов виджета. Если установлен noUser тогда возвращаются только не пользовательские атрибуты.
Параметры:
Идентификатор | Имя | Тип | Режим | По умолчанию |
---|---|---|---|---|
list | Список | Строка | Возврат | |
addr | Адрес | Строка | Вход | |
noUser | Без пользовательских | Логический | Вход | 1 |
Получить атрибут (AttrGet)
Описание: Запрос значения атрибута виджета. Запрос может осуществляться как указанием полного адреса атрибута в addr, так и: отдельно адрес виджета в addr и идентификатор атрибута в attr.
Параметры:
Идентификатор | Имя | Тип | Режим | По умолчанию |
---|---|---|---|---|
val | Значение | Строка | Возврат | |
addr | Адрес | Строка | Вход | |
attr | Атрибут | Логический | Вход |
Установить атрибут (AttrSet)
Описание: Установка значения атрибута виджета. Установка может осуществляться как указанием полного адреса атрибута в addr, так и: отдельно адрес виджета в addr и идентификатор атрибута в attr.
Параметры:
Идентификатор | Имя | Тип | Режим | По умолчанию |
---|---|---|---|---|
addr | Адрес | Строка | Вход | |
val | Значение | Строка | Вход | |
attr | Атрибут | Логический | Вход |
Пользователь сеанса (SesUser)
Описание: Возвращает пользователя сеанса по пути к виджету сеанса.
Параметры:
Идентификатор | Имя | Тип | Режим | По умолчанию |
---|---|---|---|---|
user | Пользователь | Строка | Возврат | |
addr | Адрес | Строка | Вход |
Сервисные интерфейсы это интерфейсы доступа к OpenSCADA посредством интерфейса управления OpenSCADA. Данный механизм положен в основу всех механизмов обмена внутри OpenSCADA, реализованных посредством слабых связей и стандартного протокола обмена OpenSCADA.
С целью предоставления унифицированного, группового и сравнительно быстрого доступа к значениям атрибутов визуальных элементов, предусмотрена сервисная функция визуального элемента "/serv/attr" и команды получения-установки значений атрибутов:
Таблица. Атрибуты команд получения и установки атрибутов визуальных элементов
Идентификатор | Имя | Значение |
---|---|---|
Команда запроса визуальных атрибутов виджета: <get path="/UI/VCAEngine/{wdg_addr}/%2fserv%2fattr"/> | ||
tm | Время-счётчик изменений | Установка времени-счётчика изменений для запроса только изменившихся атрибутов. |
<el id="{attr}" p="{a_id}">{val}</el> | Формирование дочерних элементов с результатами атрибутов | В дочернем элементе указываются: строковых идентификатор attr, индекс a_id и значение val атрибута. |
Команда установки визуальных атрибутов виджета: <set path="/UI/VCAEngine/{wdg_addr}/%2fserv%2fattr"/> | ||
<el id="{attr}">{val}</el> | Установка атрибутов | В дочерних элементах указывается: строковый идентификатор attr и значение val атрибута. |
Команда активации-создания специфичного для визуализатора атрибута: <activate path="/UI/VCAEngine/{wdg_addr}/%2fserv%2fattr/{attrId}" aNm="{Name}" aTp="{Type} aFlg="{Flags}"/> | ||
attrId | Идентификатор атрибута | |
aNm | Имя атрибута | |
aTp | Тип атрибута | |
aFlg | Флаги атрибута |
С целью оптимизации трафика сетевого взаимодействия путём исключения мелких запросов и использования одного большого, предусмотрен групповой запрос значений атрибутов визуальных элементов. Группировка данного запроса подразумевает запрос атрибутов всей ветви виджета, включая и вложенные элементы. Для данного запроса предусмотрена сервисная команда "/serv/attrBr". Запрос данной сервисной команды эквивалентен сервисной команде "/serv/attr" и выглядит следующим образом:
<get path="/UI/VCAEngine/{wdg_addr}/%2fserv%2fattrBr"/>
Результат:
С целью унификации и оптимизации доступа к страницам, предусмотрена сервисная функция сеанса "/serv/pg" и команды:
Результатом запроса перечня открытых страниц являются дочерние элементы <el>{OpPage}</el>, содержащие полный путь открытой страницы. Кроме перечня открытых страниц запрос возвращает значение текущего счётчика вычисления сеанса, в атрибуте tm. Если данный атрибут устанавливается при запросе, то, для каждой открытой страницы, возвращается список изменённых, с момента указанного значения счётчика, виджетов открытой страницы.
Для предоставления механизма глобального контроля за сигнализацией сеанса, предусмотрена сервисная функция сеанса "/serv/alarm" и команды:
Запрос статуса сигналов возвращает обобщённое состояние сигналов, а также ресурс уведомления, если атрибут "mode" равен "resource". Результатом запроса ресурса уведомления, обычно, является звуковой файл, для воспроизведения. В это-же время, обеспечивается отслеживание последовательности сигнализации и квитации отдельных ресурсов сообщений.
Запрос на квитацию выполняет квитацию, указанного в атрибуте wdg, виджета, согласно шаблону в атрибуте tmpl.
Для предоставления унифицированного механизма манипуляции сеансами, модулем движка СВУ (VCAEngine), для визуализаторов СВУ, предусмотрена сервисная функция "/serv/sess" и команды:
Таблица. Атрибуты команд механизма манипуляции сеансами
Идентификатор | Имя | Значение |
---|---|---|
Команда запроса перечня открытых сеансов для проекта: <list path="/UI/VCAEngine/%2fserv%2fsess"/> | ||
prj | Указание проекта | Указывает проект, для которого возвращать перечень открытых сеансов. |
<el>{Session}</el> | Контроль перечня сеансов | В дочерних элементах указываются сеансы, открытые для запрошенного проекта. |
Команда подключения-открытия сеанса: <connect path="/UI/VCAEngine/%2fserv%2fsess"/> | ||
sess | Установка и контроль имени сеанса | Если атрибут определён, то производится подключение к существующему сеансу, иначе — создание нового сеанса. В случае открытия нового сеанса, в данный атрибут помещается его имя. |
prj | Установка имени проекта | Используется для открытия нового сеанса для указанного проекта и когда атрибут sess не указан. |
Команда отключения-закрытия сеанса: <disconnect path="/UI/VCAEngine/%2fserv%2fsess"/> | ||
sess | Установка имени сеанса | Указывает имя сеанса от которого выполняется отключение или закрытие. Сеансы, не являющиеся фоновыми, и к которым ни один из визуализаторов не подключен, автоматически закрываются. |
С целью оптимизации производительности локального и, особенно, сетевого взаимодействия, предусмотрена сервисная функция "/serv/wlbBr" и команда запроса дерева библиотек виджетов: <get path="/UI/VCAEngine/%2fserv%2fwlbBr"/>. Результатом запроса является дерево с элементами библиотек виджетов — теги wlb. Внутри тегов библиотек виджетов содержаться тег иконки ico и теги виджетов библиотеки w. Теги виджетов, в свою очередь, содержат тег иконки и теги дочерних виджетов cw.
Посредством интерфейса управления OpenSCADA компоненты, которые его используют, можно конфигурировать из любого конфигуратора OpenSCADA. Данным модулем предоставляется интерфейс доступа ко всем объектам данных СВУ. Главная вкладка конфигурационной страницы модуля предоставляет доступ к библиотекам виджетов и проектам (рис.4.1). Вкладка "Сеансы" предоставляет доступ и открытым сеансам проектов (рис.4.2).
Кроме списка открытых сеансов, вкладка на рисунке 4.2 содержит таблицу с перечнем сеансов, которые должны создаваться и запускаться в момент загрузки OpenSCADA. Создание сеансов посредством этого механизма может быть полезным для Web-интерфейса. В таком случае, при подключении Web-пользователя, все данные уже готовы и обеспечивается непрерывность формирования архивных документов.
Конфигурация контейнеров виджетов, в лице библиотек виджетов и проектов, выполняется посредством страниц на рисунке 4.3 (для проекта) и рисунке 4.5 (для библиотеки виджетов). Библиотека виджетов содержит виджеты, а проект — страницы. Оба типа контейнера содержат вкладку конфигурации Mime-данных, используемых виджетами (рис.4.6). Страница проекта, также, содержит вкладку "Диагностика" (рис.4.4) для отладки и контроля за исполнением страницы в сеансах.
С помощью этой страницы можно установить:
В этой вкладке Вы можете выбрать время (или обновить к текущему) и размер для получения диагностических сообщений сеансов исполнения данного проекта.
С помощью этой страницы можно установить:
Конфигурация сеанса проекта значительно отличается от конфигурации проекта (рис.4.7), однако, также, содержит страницы проекта.
С помощью этой страницы можно установить:
Страницы конфигурации визуальных элементов, расположенных в разных контейнерах, могут сильно отличаться, однако, это отличие заключается в наличии или отсутствии отдельных вкладок. Главная вкладка визуальных элементов фактически везде одинакова, отличаясь на одно конфигурационное поле и три в сеансе (рис.4.8). У страниц присутствуют вкладки дочерних страниц и вложенных виджетов. У контейнерных виджетов содержится вкладка вложенных виджетов. Все визуальные элементы содержат вкладку атрибутов (рис.4.9), кроме логических контейнеров проектов. Элементы, на уровне которых можно формировать пользовательскую процедуру и определять связи, содержат вкладки "Обработка" (рис.4.10) и "Связи" (рис.4.11).
С помощью этой страницы можно установить:
Modules/VCAEngine/ru - GFDL | July 2021 | OpenSCADA 0.9.4 |