Общая концепция Среды Визуализации и Управления (СВУ)
Статус: Реализовано: UI.VCAEngine, UI.Vision, UI.WebVision Автор:Роман Савоченко Примечание: Проект, на начальном этапе, формировался на основе дипломного проекта Зайчука Евгения и в последствии был полностью переписан с переходом на Qt4, формализацией и с созданием данной концепции.
1 Введение
Среда визуализации и управления (СВУ) является неотъемлемой составляющей SCADA системы. Она применяется на клиентских станциях с целью доступного предоставления информации об объекте управления и выдачи управляющих воздействий на объект. В различных практических ситуациях и условиях могут применяться СВУ, построенные на различных принципах визуализации. Например, это могут быть библиотеки виджетов Qt, GTK+, wxWidgets или гипертекстовые механизмы на основе технологий HTML, XHTML, XML, CSS и JavaScript или сторонние приложения визуализации, реализованные на различных языках программирования Java, Python и т.д. Любой из этих принципов имеет свои преимущества и недостатки, комбинация которых может стать непреодолимым препятствием в возможности использования СВУ в том или ином практическом случае. Например, технологии вроде библиотеки Qt позволяют создавать высокореактивные СВУ, что несомненно важно для станций оператора управления технологическим процессом (ТП). Однако, необходимость инсталляции данного клиентского ПО может сделать использование его невозможным в отдельных ситуациях. С другой стороны, Web-технологии не требуют инсталляции на клиентские системы и являются предельно многоплатформенными (достаточно указать ссылку на Web-сервер в любом Web-браузере), что наиболее важно для различных инженерных и административных станций. С другой стороны, реактивность и надёжность таких интерфейсов ниже, что практически исключает их использование на станциях оператора ТП.
Система OpenSCADA имеет предельно гибкую архитектуру, которая позволяет создавать внешние интерфейсы, в том числе и пользовательские, на любой основе и на любой вкус. Например, среда конфигурации системы OpenSCADA доступна как на Qt-библиотеке, так и на Web-основе.
В тоже время независимое создание реализаций СВУ на различной основе может повлечь за собой невозможность использования данных конфигурации одной СВУ в другой. Что неудобно и ограничено с пользовательской стороны, а также накладно в плане реализации и последующей поддержки. С целью избежания этих проблем, а также создания в кратчайшие сроки полного спектра различных типов СВУ и основан данный проект.
Непосредственной областью применения СВУ, как составной части SCADA-системы OpenSCADA, является мониторинг и управление распределёнными системами с локальных и удалённых рабочих мест.
2 Назначение
Функционально разработка предназначена для создания общей концепции СВУ и использования её в разработке конкретных модулей реализации СВУ для системы OpenSCADA. Планируется разработка модулей реализации СВУ основанных на Qt-библиотеке и WEB-технологиях.
Разрабатываемые модули СВУ, в целом, предназначены для:
Визуализации:
оперативной (текущей) информации: значений параметров технологического процесса (ТП), нарушений параметрами регламентных границ (алармов);
архивных данных: значений параметров; текстовых сообщений о нарушениях ведения ТП, действиях пользователя по управлению ТП, а также системных сообщений от всех подсистем OpenSCADA.
Управления технологическим оборудованием и параметрами ведения ТП: изменения настроек и режимов работы контуров регулирования, изменения настроек системы ПАЗ, ввода числовых данных.
Построения протоколов и иной отчётной документации.
Эксплуатационным назначением разработки является:
расширение сферы применения системы OpenSCADA за счёт функций модулей СВУ;
полноценное использования системы OpenSCADA для контроля и управления технологическими процессами.
3 Требования
3.1 Архитектурные требования
Разрабатываемая концепция и модули СВУ должны быть реализованы в соответствии с требованиями к модулям системы OpenSCADA. Разработанный концептуальный механизм должен содержать все алгоритмы и данные, являющиеся общими для СВУ построенных на различных принципах, а также содержать механизм сессий исполнения проектов интерфейсов визуализации. Фактически в реализациях СВУ должны формироваться индивидуальные механизмы визуализации (отрисовки) и взаимодействия с пользователем на основе данных концепции, т.е. формировать индивидуальный интерфейс представления данных концепции СВУ в соответствии с идеологией "Модель/данные — Интерфейс".
3.2 Общие требования
Визуализация должна включать функции:
Отображения оперативной и архивной информации ведения ТП в числовой, графической (в виде мнемосхемы части ТП, временных графиков) формах.
Сигнализации о нарушениях ведения ТП цветом, миганием фона, линий, текста, перечнем нарушений в табличной форме.
Предоставления архивированных сообщений о нарушениях ведения ТП, действиях оператора и системных операциях. Сообщения должны выводиться с использованием различного рода фильтров: по категории, времени/дате.
Управление технологическим оборудованием и параметрами ведения ТП должно обеспечить функции:
Дистанционного управление дискретными исполнительными механизмами, режимами работы.
Ввода оператором аналоговых значений.
Подтверждения выполнения команды оператора, фиксирования действия оператора в подсистеме сообщений, а также разграничение прав на выполнение команд.
Команды оператора по управлению ТП и навигации внутри подсистемы должны производиться с помощью клавиатуры и мыши, или иного устройства ввода.
В качестве входных, реализации СВУ должны использовать данные следующих подсистем OpenSCADA:
Подсистема "Сбор данных (DAQ)" — для получения списка параметров, их атрибутов, значений и истории изменения значений атрибутов.
Подсистема "Архивы" — для получения и визуализации архивов (истории) значений и сообщений.
Подсистема "Безопасность" — для получения списка пользователей и контроля доступа.
Подсистема "БД" — для хранения и получения конфигурации СВУ.
В качестве выходной информации реализации СВУ выступают:
Изображение на дисплее.
Измененные оператором текущие значения параметров ТП (например, режим работы регулятора, задание регулятора, выход регулятора, настройки регулятора, дистанционное управление оборудованием и др.), поступающие в подсистему "DAQ".
Отчётная документация в виде различных протоколов, отчётов и документов.
Конфигурация СВУ должна храниться в доступных системе OpenSCADA базах данных, позволяя, тем самым, выбирать ту или иную БД под конкретную практическую ситуацию. Изображения и другие ресурсы должны кодироваться алгоритмом Mime Base64 и храниться в БД или браться прямо с ФС.
Цикл обновления оперативной информации на экране зависит от конкретной реализации СВУ. Для быстрых интерфейсов визуализации цикл не должен превышать 1 секунды.
3.3 Требования к надежности
Обеспечение надежного функционирования и защиты от несанкционированного доступа СВУ должно быть реализовано на нескольких уровнях:
На уровне ядра системы OpenSCADA.
На уровне концепции СВУ. Для каждого элемента отображения должно выполняться разграничение прав на редактирование (режим "Разработка"), динамизацию и реагирование на события (режим "Исполнение") путем смены владельца (использование функций подсистемы "Безопасность"), включения/исключения в группу и смены прав на модификацию, чтение и исполнение соответственно.
На уровне отдельно взятой реализации СВУ с использованием общей концепции.
Реализации СВУ, в связке с концепцией, должны удовлетворять следующим требованиям к надежности:
Непрерывная работа 24 часа в сутки и 360 дней в году.
Максимальное время восстановления работоспособного состояния — не более 1 ч.
Обнаружение ошибок (отсутствие кадра, исключительные ситуации) корректная обработка и выдача соответствующих сообщений.
4 Проектирование
4.1 Постановка задачи
4.1.1 Задачи SCADA системы
В настоящее время, при построении систем автоматизированного управления технологическими процессами (АСУ ТП), интерфейс пользователя с системой управления реализуется с помощью вычислительных систем. Такой подход обусловлен несколькими причинами: компактностью (в физическом и энергетическом смысле) современной вычислительной техники, развитостью способов отображения информации, большой функциональности и изменчивости систем управления.
Применение компьютерной техники в "АСУ ТП" вообще, и на рабочих местах операторов в частности, привело к зарождению класса программного обеспечения (ПО), известного как SCADA (Supervisory Control and Data Acquisition) и HMI (Human Machine Interface).
Таким образом, важнейшей задачей ПО SCADA и HMI является предоставление интерфейса взаимодействия между оператором и системой управления ТП. Часто на SCADA и HMI возлагают такие задачи, как: формирование сигнализации про отклонение в ТП, ведения архивов параметров ТП и протоколов событий.
Поэтому программное обеспечение SCADA и HMI удобно рассматривать как совокупность подсистем: базы данных параметров ТП и связи с системами управления ТП (контроллерами), формирования сигнализации про отклонение ведения ТП, архивирования, протоколирования, визуализации оперативных и архивных данных.
В дополнении, к вышеперечисленным задачам можно отнести разделение прав доступа на чтение-изменение тех или иных параметров ТП, реализованное в подсистеме безопасности.
Таким образом современные SCADA и HMI системы представляют собой достаточно сложные программные комплексы.
Предметом данного под-проекта является разработка концепции среды визуализации и управления (СВУ) и реализаций СВУ на основные способы представления, для SCADA системы OpenSCADA.
Под визуализацией подразумевается следующий набор задач:
Предоставление оператору текущих данных про параметры ТП (показания датчиков, положения механизмов, исполнительных устройств). Большое внимание уделяется сигнализации про отклонения (нарушения) ведения ТП.
Отображение архивной информации про параметры ТП и события, которые произошли.
Приём и передача команд оператора подконтрольной системе.
СВУ должна работать в двух режимах — редактирования (разработка) и исполнения (исполнение). На первом этапе планируется реализация режима разработки только для Qt-версии СВУ!
В процессе функционирования СВУ должна использовать данные других подсистем:
Подсистема "Сбор данных (DAQ)":
"Разработка" — при подключении динамики к кадру (виджету).
"Исполнение" — при формировании динамики кадра (доступ к текущим значениям параметров его истории, а также нарушениям по параметрам).
Подсистема "Архивы":
"Разработка" — при настройке динамики кадра.
"Исполнение" — при формировании динамики кадра (доступ к архивным значениям параметров).
Подсистема "Безопасность":
"Разработка" — при настройке доступа к виджетам.
"Исполнение" — при формировании изображения виджета и возможности управления.
Подсистема "БД": доступ на загрузку и сохранение данных по виджетам, кадрам, библиотекам кадров и проектам как в режиме разработки, так и исполнения.
Изображение на экране должно формироваться из ограниченного набора базовых виджетов (примитивов). Представление и интерфейс базовых виджетов для каждого СВУ реализуется отдельно. Это сделано с целью оптимизации производительности и упрощения задачи создания библиотеки базовых виджетов. С целью совместимости между различными реализациями СВУ планируется создание общего описания библиотеки базовых виджетов (модели данных) с последующей реализацией её интерфейса в каждой СВУ.
Базовые виджеты должны группироваться и формировать производные виджеты, с дальнейшим накоплением их в пользовательских библиотеках виджетов/кадров.
4.1.2 Задачи систем мониторинга
Учитывая назначение системы OpenSCADA, как системы для мониторинга данных во многих смежных областях, необходимо сформулировать задачи для таких систем в целом.
В системах мониторинга, как правило, отсутствует возможность управления, однако элементы интерактивного взаимодействия должны присутствовать.
Основной задачей таких систем является непрерывное предоставление информации в доступном виде и на фоне основной работы.
4.2 Формализация
Концептуальную модель СВУ опишем языком UML с помощью диаграмм вариантов использования (use case diagram).
В качестве актёра, в случае разработки, выступает инженер настройки верхнего уровня "АСУ ТП", в случае исполнения — оператор.
В режиме разработки выделим такие варианты использования СВУ:
Операции над проектом:
открытие/сохранение существующего проекта визуализации в БД;
создание/удаление проекта визуализации;
работа с открытым проектом:
добавление/удаление кадра в проект визуализации;
связывание кадра проекта с динамикой (динамизация свойств кадров), создавая страницу интерфейса визуализации или шаблон общей динамики для страниц, основанных на данном кадре;
создание/удаление страницы интерфейса визуализации, основанной на кадре проекта;
связывание страницы интерфейса управления с динамикой.
открытие/закрытие/подключение к сеансу исполнения проекта.
Операции над кадром (виджетом):
открытие/сохранение виджета/кадра в библиотеке БД;
создание/удаление виджета/кадра;
работа с открытым кадром:
добавление/удаление вложенного виджета на рабочий кадр;
выделение виджетов на рабочем кадре;
изменение свойств выделенных виджетов с помощью супервизора виджетов;
группировка/разгруппировка выделенных виджетов;
перемещение выделенных виджетов посредством манипулятора мышь и/или клавиатуры;
визуальное изменение размеров и других геометрических параметров виджета;
назначение слотов привязки динамики (параметров) виджетов или-же кадра в целом, а также прямая привязка динамики для виджетов конечной визуализации (кадров);
формирование процедуры описания связей, и другой логики виджета, на одном из языков пользовательского программирования, предоставляемого системой OpenDCADA;
ассоциативная установка простых и групповых логических связей как графическим, так и конфигурационным образом.
Диаграмма вариантов использования при функционировании СВУ в режиме разработки приведена на рис. 4.2.1.
Рис.4.2.1 Диаграмма вариантов использования СВУ в режиме разработки.
Варианты использования в режиме исполнения:
слежение за ТП по мгновенным значениям, графикам и др.
управление техническими или другими процессами (ТП) через конечный интерфейс визуализации;
навигация по кадрам и страницам интерфейса визуализации;
горячая замена динамизированных свойств кадров и страниц;
формирование и печать отчётной документации, документов и экранов интерфейса визуализации;
смена пользователя.
Диаграмма использования СВУ в режиме исполнения приведена на рис.4.2.2.
Рис.4.2.2 Диаграмма использования СВУ в режиме исполнения.
СВУ, в целом, может работать в двух режимах — разработки и исполнения. В режиме разработки формируется интерфейс СВУ, его компоненты и определяются механизмы взаимодействия. В режиме исполнения выполняется формирование интерфейса СВУ и производится взаимодействие с конечным пользователем на основе разработанных СВУ.
Интерфейс СВУ формируется из кадров, каждый из которых, в свою очередь, формируется из элементов примитивов или пользовательских элементов интерфейса. При этом пользовательские элементы интерфейса также формируются из примитивов или других пользовательских элементов. Таким образом обеспечивается иерархичность и повторное использования уже разработанных компонентов.
Кадры и пользовательские элементы размещаются в библиотеках виджетов. Из элементов этих библиотек формируются проекты интерфейсов конечной визуализации СВУ. На основе же этих проектов формируются сеансы визуализации.
Описанная структура СВУ приведена на рисунке.
Данная архитектура СВУ позволяет реализовать поддержку трёх уровней сложности процесса разработки интерфейсов управления:
Формирования интерфейса ВУ (визуализации и управления) с помощью библиотеки шаблонных кадров путём помещения шаблонов кадров в проект и назначения динамики.
В дополнении к первому уровню производится формирование собственных кадров на основе библиотеки производных и базовых виджетов. Возможно как прямое назначение динамики в виджете, так и последующее её назначение в проекте.
В дополнении ко второму уровню производится самостоятельное формирование производных виджетов, новых шаблонных кадров, а также кадров с использованием механизма описания логики взаимодействия и обработки событий на одном из языков пользовательского программирования системы OpenSCADA.
4.3 Кадры и элементы отображения(виджеты)
Кадр это окно, непосредственно предоставляющее информацию пользователю в графической и/или текстовой форме. Группа взаимосвязанных кадров формирует цельный пользовательский интерфейс ВУ.
Содержимое кадра формируется из элементов отображения(виджетов). Виджеты могут быть базовыми примитивами (различные элементарные фигуры, текст, тренд и т.д.) и производными (сформированные из базовых или других производных виджетов). Все виджеты группированы по библиотекам. В процессе работы пользователь может формировать собственные библиотеки производных виджетов.
Собственно кадр также является виджетом, который используется в роли конечного элемента визуализации. А это значит, что библиотеки виджетов могут хранить и заготовки кадров, и шаблоны результирующих страниц пользовательского интерфейса.
Кадры и виджеты являются пассивными элементами, которые обычно не содержат связей с динамикой и другими кадрами, а только предоставляют информацию о свойствах виджета и характере динамики(конфигурации), подключаемой к свойствам кадра. Активированные кадры, т.е. содержащие ссылки на динамику и активные связи, формируют пользовательский интерфейс и хранятся в проектах. В некоторых случаях возможно прямое назначение динамики в заготовках кадров.
Производные кадры/виджеты могут содержать другие виджеты(вложенные), которые могут быть склеены(связаны) логикой один с другим с помощью одного из языков пользовательского программирования, доступного в системе OpenSCADA.
Виджет является элементом, посредством которого обеспечивается:
визуализация оперативной и архивной информации ведения ТП;
сигнализация про нарушения ведения ТП;
переключение между кадрами ТП;
управление технологическим оборудованием и параметрами ведения ТП.
Настройка и связывание виджетов производится посредством их свойств. Родительский виджет и виджеты содержащиеся в нем могут дополняться пользовательскими свойствами. В последствии пользовательские и статические атрибуты связываются со свойствами вложенных виджетов посредством внутренней логики. Для отображения динамики (т.е. текущих и архивных данных) свойства виджетов динамизируются, т.е связываются с атрибутами параметров OpenSCADA или свойствами других виджетов. Использование для связывания вложенных виджетов внутренней логикой доступных языков пользовательского программирования системы OpenSCADA снимает вопрос реализации сложной логики визуализации, обеспечивая тем самым высокую гибкость. Практически можно создавать полностью динамизированные кадры со сложными взаимосвязями на уровне пользователя.
4.4 Проект
Непосредственная конфигурация и свойства конечного интерфейса визуализации содержатся в проекте интерфейса визуализации СВУ, которых может быть создано множество.
Каждый проект включает страницы из библиотек кадров-виджетов. В ряде режимов сама страница может включать в себя вложенные страницы как независимые от родительской, так и с использованием родительского в роли шаблона. Шаблонные страницы-виджеты позволяют предельно упростить процесс создания однотипных кадров инженером АСУ-ТП или пользователем системы OpenSCADA для простого мониторинга. Примером таких однотипных кадров могут быть: группы контуров, группы графиков, протоколы и различные сводные таблицы. Мнемосхемы технологических процессов редко подпадают под такую схему и формируются в отдельной странице-виджете.
Страница, как и виджет на котором она основана, предоставляет возможность привязки динамики к описанным в нём свойствам, связи которых в целом могут быть установлены в динамику или разрешены константами. Кроме того, связывание с динамикой именно на уровне страницы проекта является предпочтительнее чем на уровне виджетов библиотек.
Пример иерархического представления компонентов проекта классического интерфейса ВУ технологического процесса с описанием выражений стандартных вызовов приведен на рисунке.
Предусмотрены следующие специальные свойства страниц:
Контейнер — страница является контейнером для вложенных страниц.
Шаблон — страница является шаблоном для вложенных страниц.
Пусто — пустая и неактивная страница. Это свойство используется совместно со свойством Контейнер для организации логических контейнеров страниц.
На комбинациях указанных специальных свойств страниц реализованы следующие их типы:
Стандарт — стандартная страница (не установлено ни одно из свойств), является полноценной конечной страницей.
Контейнер — полноценная страница со свойством контейнера (Контейнер).
Логический контейнер — логический контейнер, фактически сам не являющийся страницей (Контейнер|Пустой), выполняет роль промежуточного и группирующего элемента в дереве страниц.
Шаблон — страница-шаблон (Шаблон). Чистая шаблонная страница, используется для описания общих свойств и доопределения их в частном порядке во вложенных страницах.
Контейнер и шаблон — страница шаблон и контейнер (Шаблон|Контейнер), совмещает функции шаблона и контейнера.
На стороне визуализации (RunTime), на следующих атрибутах базового элемента "Box", построена логика, регулирующая каким образом открывать страницы:
pgOpen — признак "Страница открыта";
pgNoOpenProc — признак "Исполнять страницу даже если она не открыта";
pgOpenSrc — содержит адрес виджета или страницы, открывшей текущую страницу; в случае вложенного контейнерного виджета здесь содержится адрес включаемой страницы; для открытия страницы из скрипта достаточно здесь указать адрес виджета-источника открытия;
pgGrp — группа страниц, используется для связки контейнеров страниц со страницами в соответствии с общей группой.
Логика определения способа открытия страниц работает следующим образом:
если страница имеет группу "main" или совпадает с группой страницы в главном окне или нет страницы на главном окне, то открывать страницу в главном окне;
если страница имеет группу, которая совпадает с группой одного из контейнеров текущей страницы, то открыть в этом контейнере;
если источник открытия страницы совпадает с текущей страницей, то открыть в виде дополнительного окна над текущей страницей;
передать вызов на запрос открытия дополнительным окнам, с обработкой у каждого по первым трем пунктам;
если никто из родственных окон не открыл новую страницу то открыть её как родственное окно главного окна.
4.5 Сеанс исполнения проекта
Сеанс проекта это развёрнутое дерево проекта для непосредственного его исполнения, включающего отдельную задачу иерархического исполнения процедур виджетов. Для каждого проекта может быть открыто множество сеансов. Формирование конечного интерфейса визуализации осуществляется визуализаторами исходя из данных сеанса проекта, после создания сеанса по запросу.
Между виджетами на различных уровнях иерархии, в конечном счёте, выстраиваются достаточно сложные наследственные связи, которые определяются возможностью использования одних виджетов другими, начиная с библиотечного виджета и заканчивая виджетом сеанса. Для разъяснения этих особенностей взаимодействия на рисунке изображена исчерпывающая карта "использующего" наследования.
На уровне сеансов виджет содержит объект значений процедуры обсчёта. Этот объект инициируется и используется в случае наличия у процедуры обсчёта. В момент инициализации создаётся перечень параметров процедуры и выполняется её компиляция с этими параметрами в модуле, реализующем выбранный язык программирования и закодированным полным именем виджета. Скомпилированная функция подключается к объекту значений процедуры обсчёта. Далее выполняется вычисление с периодичностью сеанса.
Вычисление и обработка виджета в целом выполняется в следующей последовательности:
выбираются события, доступные на момент вычисления, из атрибута "event" виджета;
события загружаются в параметр "event" объекта вычисления;
загружаются значения по входным связям в объект вычисления;
загружаются значения специальных переменных в объект вычисления (f_frq, f_start и f_stop);
загружаются значения выбранных параметров виджета в объект вычисления;
вычисление;
выгрузка значений объекта вычисления в выбранные параметры виджета;
выгрузка событий из параметра "event" объекта вычисления;
обработка событий и передача необработанных на уровень выше.
Объекты сеанса проекта наследуются от абстрактного объекта "Widget" и используют соответствующие объекты проекта. Так, сеанс ("Session") использует проект ("Project") и формирует развёрнутое дерево на основе него. Страница проекта "Page" прямо используется страницей сессии "SessPage". Остальные объекты ("SessWdg") разворачиваются в соответствии с иерархией элементов страницы.
В дополнение к стандартным свойствам абстрактного виджета ("Widget") элементы страницы и сами страницы сеанса получают свойства: хранения объекта значений вычислительной процедуры, обсчёта процедур и механизм обработки событий. Страницы сеанса, в дополнение ко всему, содержат контейнер следующих по иерархии страниц. Сеанс в целом вычисляется с указанной периодичностью и в последовательности:
Известно, что человек может иметь индивидуальные особенности в восприятии графической информации. Если эти особенности не учитывать то можно получить неприятие и отторжение пользователя к интерфейсу ВУ. Такое неприятие и отторжение может привести к фатальным ошибкам при управлении ТП, а также травмировать человека постоянной работой с интерфейсом. В SCADA системах приняты соглашения, которые регламентируют требования по созданию унифицированного интерфейса ВУ, нормально воспринимаемого большинством людей. При этом практически отсутствует учёт особенностей людей с некоторыми отклонениями.
С целью учесть это обстоятельство, и предоставить возможность централизованно и просто изменять визуальные свойства интерфейса, проектом реализуется менеджер стилей интерфейса визуализации.
Пользователем может быть создано множество стилей, каждый из которых будет хранить цветовые, шрифтовые и другие свойства элементов кадра. Простая смена стиля позволит быстро преобразить интерфейс ВУ, а возможность назначения индивидуального стиля для пользователя позволит учесть его особенности.
Для реализации этой возможности, при создании кадров, необходимо для свойств цвета, шрифта и других установить параметр "Конфигурация" (таблицы во вкладке "Обработка") в значение "Из стиля". А в параметре "Конфигурационный шаблон" указать идентификатор поля стиля. Далее это поле автоматически появится в менеджере стилей и его можно будет там менять. Менеджер стилей доступен на странице конфигурации проекта во вкладке "Стили". На этой вкладке можно создавать новые стили, удалять старые, изменять поля стиля и удалять ненужные.
В целом стили доступны начиная с уровня проектов. На уровне библиотек виджетов можно только определять поля стилей у виджетов. На уровне проекта, при выборе стиля, включается работа со стилями, что предполагает доступ к полям стилей вместо непосредственных значений атрибутов. Фактически это означает, что при чтении или записи атрибута виджета указанные операции будут осуществляться с соответствующим полем выбранного стиля.
При запуске проекта на исполнения будет использован установленный в проекте стиль. В последствии пользователь может выбрать стиль из перечня доступных. Выбранный пользователем стиль будет сохранён и использован при следующем запуске проекта.
4.7 События, их обработка и карты событий
Учитывая спектр задач для которых может использоваться система OpenSCADA, нужно предусмотреть механизм управления интерактивными пользовательскими событиями. Это связано с тем, что при решении отдельных задач встраиваемых систем устройства ввода и управления могут значительно отличатся. Впрочем достаточно взглянуть на обычную офисную клавиатуру и клавиатуру ноутбука чтобы снять любые сомнения о необходимости менеджера событий.
Менеджер событий должен работать, используя карты событий. Карта событий — это список именованных событий с указанием его происхождения. Происхождением события может быть клавиатура, манипулятор мыши, джойстик и т.д. При возникновении события менеджер событий ищет его в активной карте и сопоставляет с именем события. Сопоставленное имя события помещается в очередь на обработку. Виджеты, в этом случае, должны обрабатывать полученную очередь событий.
Активная карта событий указывается в профиле каждого пользователя или устанавливается по умолчанию (в планах).
В целом предусмотрены четыре типа событий:
события образов-примитивов СВУ (префикс: ws_), например, событие нажатия экранной кнопки — "ws_BtPress";
клавишные события (префикс: key_) — все события от клавиатуры и мыши в виде "key_presAlt1";
пользовательские события (префикс: usr_) генерируются пользователем в процедурах обсчёта виджетов;
мапированные события (префикс: map_) — события, полученные из карты событий, в планах.
Само событие представляет недостаточно информации, особенно если его обработка происходит на уровнях выше. Для однозначной идентификации события и его источника, событие в целом записывается следующим образом: "ws_BtPress:/curtime". Где:
ws_BtPress — событие; /curtime — путь к дочернему элементу, сгенерировавшего событие.
В таблице 3.5 приведён перечень стандартных событий, поддержка которых должна быть обеспечена в визуализаторах СВУ.
Звёздочка на дополнительном поле клавиатуры — '*'.
*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}". Где:
event — ожидаемое событие;
evSrc — путь вложенного виджета-источника события;
com — команда сеанса;
prm — параметр команды.
Реализованы следующие команды:
open — открытие страницы; открываемая страница указывается в параметре prm как на прямую, так и в виде шаблона (например: /pg_so/1/*/*);
next — открытие следующей страницы; открываемая страница указывается в параметре prm в виде шаблона (например: /pg_so/*/*/$);
prev — открытие предыдущей страницы; открываемая страница указывается в параметре prm в виде шаблона (например: /pg_so/*/*/$).
Специальные символы шаблона расшифровываются следующим образом:
pg_so — прямое имя требуемой-статической страницы (с префиксом), требует обязательного соответствия и используется для идентификации предыдущей открытой страницы;
1 — имя и место новой страницы в общем пути (без префикса);
* — страница берётся из имени предыдущей открытой страницы или подставляется первая доступная страница, если предыдущая открытая страница отсутствует;
$ — указывает на место открытой страницы, относительно которой необходимо искать следующую или предыдущую.
Для большего и правильного понимания работы механизма шаблонов выбора страницы приведём несколько реальных примеров:
Механизм "Обработка событий с помощью вычислительной процедуры виджета" основан на атрибуте "event" и пользовательской процедуре вычисления на языке программирования OpenSCADA. События, по мере поступления, аккумулируются в атрибуте "event" до момента вызова вычислительной процедуры. Вычислительная процедура вызывается с указанной периодичностью вычисления виджета и получает значение атрибута "event" в виде списка событий. В процедуре вычисления пользователь может: проанализировать, обработать и исключить обработанные события из списка, а также добавить в список новые события. Оставшиеся, после исполнения процедуры, и новые события анализируются на предмет соответствия условиям вызова сценарием первичного механизма, после чего оставшиеся события передаются на верхний по иерархии виджет для обработки им, при этом осуществляется коррекция пути событий в соответствии с иерархией проникновения события.
Содержимым атрибута "event" является списком событий формата "{event}:{evSrc}", с событием в отдельной строке. Приведём пример процедуры обработки событий на Java-подобном языке пользовательского программирования OpenSCADA:
4.8 Сигнализация
Важным элементом любого интерфейса визуализации является уведомление пользователя про нарушения — сигнализация. Для упрощения восприятия, а также в виду тесной связности визуализации и уведомления (как правило уведомление дополняет визуализацию) решено интегрировать интерфейс уведомления в интерфейс визуализации. Для этого во всех виджетах предусматриваются два дополнительных атрибута (уровня сеанса): "alarm" и "alarmSt". Атрибут "alarm" используется для формирования сигнала виджетом в соответствии с его логикой, а атрибут "alarmSt" используется для контроля за фактом сигнализации ветви дерева сеанса проекта.
Атрибут "alarm" является строкой и имеет следующий формат: "{lev}|{categ}|{message}|{type}|{tp_arg}"
Где:
lev — уровень сигнализации: число от 0 до 255;
categ — категория сигнала: параметр подсистемы сбора, объект, путь или комбинация;
message — сообщение сигнализации;
type — типы уведомления, указываются в виде целого числа (0...7), содержащего флаги способов уведомлений; типовые способы уведомления:
1 — визуальная;
2 — гудок, часто производится через PC-speaker;
4 — звуковой сигнал из файла звука или синтез речи; если в tp_arg указано имя ресурса звукового файла, то воспроизводится именно он, иначе выполняется синтез речи из текста указанного в message.
tp_arg — аргумент типа; часто используется в случае осуществления звуковой сигнализации для прямого указания ресурса звукового сигнала (файл звукового формата).
Атрибут "alarmSt" является целым числом, которое отражает максимальный уровень сигнала и факт квитирования ветви дерева сеанса проекта. Формат числа имеет следующий вид:
первый байт (0...255) характеризует уровень сигнала ветви;
второй байт указывает тип уведомления (также как и в атрибуте "alarm");
третий байт указывает тип несквитированного уведомления (также как и в атрибуте "alarm");
четвёртый байт имеет специальное значение, определяемое отдельными битами:
бит 0 — указывает, установкой, на факт квитирования уведомлений в первом байте;
бит 1 — указывает, при установке его и бита 0, на возврат квитирования — включение уведомления.
Формирование сигнала и получение его визуализатором.
Формирование сигнала производится самим виджетом путём установки собственного атрибута "alarm" нужным образом, и в соответствии с ним автоматически устанавливается атрибут "alarmSt" текущего и вышестоящих виджетов. Визуализаторы получают уведомление о сигнале с помощью стандартного механизма уведомления об изменении атрибутов виджетов.
Учитывая то, что обработка условий сигнализации осуществляется в виджетах, страницы, содержащие объекты сигнализации, должны исполняться в фоне, независимо от открытости их в данный момент. Это осуществляется путём установки флага исполнения страницы в фоне.
Хотя механизм сигнализации и построен в среде визуализации, возможность формирования невизуальных элементов сигнализации остаётся, например, путём создания страницы, которая никогда не будет открываться.
Квитирование
Квитирование — процесс принятия нарушения(й) с уведомлением к сведению, отключение уведомления и принятие мер по устранению нарушения(й). В контексте экрана пользовательского интерфейса квитирование предполагает только отключение уведомления.
Квитирование производится путём указания корня ветви виджетов и типов уведомления. Это позволяет реализовать квитирование на стороне визуализатора как по группам, например, по объектам сигнализации, так и индивидуально по объектам. При этом можно независимо квитировать разные типы сигнализаций. Установка квитирования производится простой модификацией атрибута "alarmSt".
Пример скрипта для работы с сигналами приведён ниже:
Внешние методы уведомления
Основным и типовым способом уведомления является дисплейная световая сигнализация аварийными цветами и их динамикой у элементов визуализации, которая присутствует всегда и не требует специфической конфигурации. Однако часто нужны уведомления внешнего типа, например: внешней лампой, бузером PC или "ревуном", произвольным звуком, синтезированной речью и т.д.
Для осуществления такой возможности внешние способы уведомления и соответствующие им типы уведомления свободно описываются для сервера визуализации и самого визуализатора. На стороне сервера визуализации описывается формирование/получение ресурса уведомления и само уведомление. На стороне визуализатора описывается уведомление согласно ресурсам сервера визуализации.
Описание правил и сценариев внешних уведомлений осуществляется с помощью пользовательских атрибутов текстового типа для страниц проекта визуализации, которые применяются при открытии этих страниц. Т.е. потенциально для каждой открываемой страницы можно описать собственные правила уведомления, хотя обычно достаточно и описываются общие правила уведомления на главной странице проекта, странице которая открывается один раз и не закрывается при работе:
Для сервера/движка визуализации атрибутом "notify{N}" в формате:
Для визуализатора атрибутом "notifyVis[Vision|WebVision]{N}" в формате:
Флаги:
notify[{DL}] — включает уведомление c повтором через время DL, если указано; для DL = 0 повтор производится сразу.
resource — запрашивать-формировать (принудительно) ресурс уведомления у сервера визуализации, может быть звуковым файлом, текстом или другими данными для формирования уведомления.
queue — ресурсы уведомления определяются не только по глобальному признаку нарушения и квитации, а и согласно приоритетной очереди источников уведомления-ресурсов. Очередь формируется на стороне сервера визуализации, а для визуализаторов указывается необходимость работы с ней при запросе ресурсов.
qMergeMess — объединять уведомления в очереди по равенству сообщения.
quittanceRet — возможность визуализатора отзыва-возврата квитирования, т.е. по сути обратного включения уведомления.
Переменные обмена:
en[0,1] — уведомление включить (1) или выключить (0);
doNtf[0,1] — вызов сценария для уведомления;
doRes[0,1] — вызов сценария для формирования ресурса;
res — содержимое или имя файла с содержимым (для внешних сценариев) ресурса;
mess — сообщение-параметры для формирования ресурса и уведомления.
lang — язык текущего пользователя или системы.
Примеры и комментарии к работе типовых способов уведомлений:
Бузер на стороне визуализатора или сервера визуализации:
alarm = "10|Prm||0x02"
notifyVisVision1 | notify1 =
notifyVisVision1 | notify1 =
Повторяющееся проигрывание готового звукового файла, одного общего, на стороне визуализатора или сервера визуализации:
alarm = "10|Prm||0x04"
notify2 | notifyVisVision2 =
notify2 | notifyVisVision2 =
Проигрывание индивидуального для источника звукового файла, на стороне визуализатора:
alarm = "10|Prm||0x04|res:al_prm1"
notify2 =
notifyVisVision2 =
notifyVisVision2 =
Синтез речи индивидуального сообщения для источника, на стороне визуализатора:
alarm = "10|Prm|Текстовое сообщение для синтеза речи|0x04"
notify2 =
notifyVisVision2 =
notifyVisVision2 =
Подготовка звукового файла, одного общего, и его проигрывание на стороне визуализатора или сервера визуализации:
alarm = "10|Prm||0x04"
notify2 =
notify2 =
notifyVisVision2 =
notifyVisVision2 =
Подготовка индивидуального для источника уведомления звукового файла через синтез речи, на стороне визуализатора или сервера визуализации:
alarm = "10|Prm|Текстовое сообщение для синтеза речи|0x04"
notify2 =
notify2 =
notifyVisVision2 =
notifyVisVision2 =
4.9 Управление правами
Для разделения доступа к интерфейсу ВУ и его составляющим каждый виджет содержит информацию о владельце, его группе и правах доступа. Права доступа записываются, как принято в системе OpenSCADA, в виде триады: "{пользователь}{группы}{остальные}", где каждый элемент состоит из трёх признаков доступа. Перечень групп записывается через символ ','. Для элементов СВУ принята следующая их интерпретация:
'r' — право на просмотр виджета;
'w' — право на контроль над виджетом.
В режиме разработки используется простая схема доступа "root.UI:RWRWR_", что означает — все пользователи могут открывать и просматривать библиотеки, их компоненты и проекты; а редактировать могут все пользователи группы "UI" (пользовательские интерфейсы).
В режиме исполнения работают права, описанные в компонентах интерфейса, которые предусматривают возможность наследования владельца и прав сверху вниз. Причём по умолчанию наследование включено в каждом виджете, а значит они получат владельца и права проекта. В тоже время, прямая установка прав составного виджета распространит их на все компоненты этого виджета.
4.10 Связывание с динамикой
Для предоставления актуальных данных в интерфейс визуализации должны использоваться данные подсистемы "Сбор данных (DAQ)". Природа этих данных следующая:
параметры, содержащие некоторое количество атрибутов;
атрибуты параметра могут предоставлять данные пяти типов: Логический, Целый, Вещественный, Строковый и Объект;
атрибуты параметра могут иметь историю (архив);
атрибуты параметра могут быть на чтение, запись и с полным доступом.
Учитывая первый пункт, нужно обеспечить возможность группового назначения ссылки. Для этого используем концепцию логического уровня.
В соответствии с пунктом 2 связи обеспечивают прозрачное преобразование типов и не требуют специальной конфигурации.
Для удовлетворения возможности доступа к архивам, в соответствии с пунктом 3, связи выполняют проверку типа атрибута и, в случае подключения к "Адресу", в значение помещается адрес связи.
В терминах СВУ, динамические связи и конфигурация динамики являются одним процессом, для описания конфигурации которого предусматривается вкладка "Обработка" виджетов. Вкладка содержит таблицу конфигурации свойств атрибутов виджета и текст процедуры вычисления виджета.
Кроме полей конфигурации атрибутов в таблице предусматривается колонка "Обработка", для избирательного использования атрибутов виджетов в вычислительной процедуре виджета, и колонки "Конфигурация", "Конфигурационный шаблон" для описания конфигурации связей.
Если в колонке "Обработка" стоит true, то в вычислительной процедуре становится доступной переменная {идентификатор виджета}_{идентификатор строки}, например cw_value.
Колонка "Конфигурация" позволяет указать тип связи для атрибута виджета:
Постоянная — во вкладке связей виджета появляется поле указания постоянной, например, особого цвета или заголовка для шаблонных кадров.
Входная связь — связь с динамикой только для чтения.
Выходная связь — связь с динамикой только для записи.
Полная связь — полная связь с динамикой (чтение и запись).
Из стиля — брать значение из стиля проекта.
Колонка "Конфигурационный шаблон" позволяет описать группы динамических атрибутов. Например, это могут быть разные типы параметров подсистемы "DAQ" и другие виджеты интерфейса. При корректном формировании этого поля работает механизм автоматического назначения атрибутов, при указании только параметра подсистемы "DAQ" или виджета интерфейса, что упрощает и ускоряет процесс конфигурации. Значение этой колонки имеет следующий формат:
Для постоянной: прямо значение атрибута.
Для связи: "{параметр}|{идентификатор}", где:
параметр — группа атрибута;
идентификатор — идентификатор атрибута; именно значение в этом поле сопоставляется с атрибутами параметров DAQ при автоматическом связывании после указания групповой связи;
Для стиля: идентификатор-имя поля стиля.
Установка связей может быть нескольких типов, который определяется префиксом:
val: — Прямая загрузка значения через механизм связей. Например, связь: "val:100" загружает в атрибут виджета значение 100. Часто используется в случае отсутствия конечной точки связи с целью прямой установки значения.
prm: — Связь на атрибут параметра или параметр в целом, для группы атрибутов, подсистемы "Сбор данных". Например, связь "prm:/LogicLev/experiment/Pi/var" осуществляет доступ атрибута виджета к атрибуту параметра подсистемы "Сбор данных". Знак "(+)", в конце адреса, указывает на успешную линковку и присутствие целевого объекта. Для атрибутов объектного типа допустим иерархический доступ к конкретному свойству объекта путём указания его пути через символ '#', например: "prm:/LogicLev/experiment/Pi/var#pr1/pr2".
wdg: — Связь на атрибут другого виджета или виджет в целом для группы атрибутов. Например, связь "wdg:/ses_AGLKS/pg_so/pg_1/pg_ggraph/pg_1/a_bordColor" осуществляет доступ атрибута одного виджета к атрибуту другого. Поддерживаются как абсолютные, так и относительные пути связей. Точкой отсчёта адреса абсолютной связи выступает объект корня модуля "VCAEngine", а значит первым элементом абсолютного адреса является идентификатор сеанса или проекта. На стороне сеанса первый элемент опускается, поэтому связи установленные в проекте там работают. Относительные связи берут отсчёт от виджета где связь указана. Специальным элементом относительной связи является элемент вышестоящего узла "..".
arh: — Особый тип связи доступный только для отдельного атрибута типа "Адрес", который позволяет подключиться прямо к архиву значения ("arh:CPU_load"). Может быть полезен для указания архива в качестве источника данных для примитива "Диаграмма".
Обработка связей происходит с периодичностью вычисления виджета в порядке:
получение данных входных связей;
выполнение вычисления скрипта;
передача значений по выходным связям.
На рисунке представлена вкладка связей с групповым назначением атрибутов путём указания только параметра, а на следующем с индивидуальным назначением атрибутов.
Рисунок. Вкладка "Связи" страницы конфигурации виджета c групповым назначением атрибутов путём указания только параметра.
Рисунок. Вкладка "Связи" страницы конфигурации виджета c индивидуальным назначением атрибутов.
При размещении виджета, содержащего конфигурацию связей, в контейнер виджетов все связи исходного виджета добавляются в список результирующих связей контейнера виджетов, однако только на глубину в один уровень вложения.
Из вышесказанного видно, что связи устанавливаются пользователем в процессе конфигурации интерфейса. Однако, для предоставления возможности создания кадров общего назначения с функцией предоставления детализированных данных разных источников одного типа необходим механизм динамической установки связей. Такой механизм предусматривается посредством зарезервированного ключевого идентификатора "<page>" группы атрибутов связей у кадров общего назначения и динамическое назначение связей с идентификатором "<page>" в процессе открытия кадра общего назначения сигналом от другого виджета.
Рассмотрим пример, когда имеется кадр общего назначения "Панель контроля графиком" и множество "Графиков" на разных кадрах. "Панель контроля графиком" имеет связи с шаблонами:
tSek -> "<page>|tSek"
tSize -> "<page>|tSize"
trcPer -> "<page>|trcPer"
valArch -> "<page>|valArch"
При этом каждый виджет "График" имеет атрибуты 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
4.11 Архитектура
Исходя из вышеизложенных, архитектурных, соображений сформируем статическую диаграмму классов СВУ, учитывая разделение на концептуальную часть (движок) и часть индивидуальной реализации СВУ (рис. 4.11.1). В таблице 4.11 представлено описание классов диаграммы классов.
Рис.4.11.1 Статическая диаграмма классов.
Таблица 4.11. Классы СВУ
Класс
Ответственность
Связи
TSecurity
Предоставляет информацию о пользователях, а также выполняет их аутентификацию в системе OpenSCADA.
Используется виджетами и кадрами СВУ для проверки прав на доступ к ним.
TFunction
Используется для доступа к механизму пользовательского программирования при описании логики производных виджетов, а также для включения функций API объектной модели в производные виджеты.
Хранит структуру параметров обвязываемых логикой в производных виджетах. Передаётся модулю, предоставляющего реализацию языка пользовательского программирования, с целью подключения механизма обработки логики программы.
TUI
Корневой объект модуля подсистемы "Пользовательские интерфейсы", используемый для интеграции в ядро системы OpenSCADA.
Наследуется корневыми объектами модуля концепции СВУ и модулями реализации интерфейса СВУ.
VCA::Engine
Корневой объект модуля концепции/движка СВУ. Содержит контейнеры объектов движка, а также общие методы и данные.
Используется интерфейсами визуализации для доступа к данным сеансов проектов и концепции в целом. Интегрирует код концепции СВУ в систему OpenSCADA.
VCA::WidgetLib
Объект библиотеки виджетов/кадров, содержит объекты библиотечных виджетов (VCA::LWidget). Состав библиотек виджетов может свободно формироваться пользователем.
Содержит объекты библиотечных виджетов (VCA::LWidget).
VCA::Widget
Абстрактный объект виджета.
Наследуется объектами: библиотечного виджета (VCA::LWidget), контейнерного виджета (VCA::CWidget), кадра проекта (VCA::Win) и объектами сеанса исполнения проекта (VCA::SessWin, VCA::SessWdg). Виджет-контейнер содержит функцию связанную с реализацией языка пользовательского программирования. Использует объект "OpenSCADA API TSecurity" для управления правами доступа. Использует события из менеджера событий. Обращается к менеджеру тем для получения непосредственных значений цветов шрифтов в соответствии с текущей темой.
VCA::LWidget
Объект библиотечного виджета/кадра.
Хранится в библиотеке (VCA::WidgetLib). Может содержать вложенные виджеты, в лице объектов контейнерных виджетов (VCA::CWidget).
VCA::CWidget
Объект контейнерного виджета библиотечного виджета/кадра (VCA::LWidget). Фактически выполняет роль ссылки на библиотечный виджет.
Содержится в библиотечном кадре/виджете (VCA::LWidget).
VCA::Project
Объект проекта пользовательского интерфейса. Содержит окна (VCA::Win) с иерархическим наименованием.
Содержится в контейнере объекта концепции (VCA::Engine). Содержит объекты окон (VCA::Win) проекта.
VCA::Page
Объект страницы интерфейса ВУ. Тесно связан с кадром из библиотеки виджетов, собственно кадр и несёт в себе элементы интерфейса. Сам объект окна, в дополнении к кадру, разрешает ссылки на динамику и предоставляет механизм расслоения динамики кадра на страницы, с возможностью формирования шаблона динамики.
Содержится в контейнере проекта. Наследуется от абстрактного виджета (VCA::Widget). Связывается с кадром интерфейса (VCA::LWidget) в библиотеке виджетов.
VCA::Theme
Объект темы интерфейса визуализации. Содержит элементы темы (VCA::ThemeEl)
Содержится в контейнере объекта концепции (VCA::ConcVCA). Хранит элементы темы (VCA::ThemeEl).
VCA::ThemeEl
Объект элемента темы. Содержит ассоциацию имени элемента с кодом цвета и шрифта.
Содержится в контейнере темы (VCA::Theme). Используется объектом виджета (VCA::Widget) для получения значений цвета и шрифта по имени элемента темы.
VCA::EventMap
Объект карты событий. Содержит объекты событий (VCA::Event).
Содержится в контейнере объекта концепции (VCA::ConcVCA). Хранит описания событий (VCA::Event).
VCA::Event
Объект события, содержит ассоциацию имени объекта(события) с реальным событием.
Содержится в контейнере карты событий (VCA::EventMap).
VCA::Session
Объект сессии исполнения проекта визуализации. Открывается модулем интерфейса визуализации и использует, в дальнейшем, данные сессии для визуализации своим методом. Все вычисления интерфейсов визуализации выполняются именно в сессии.
Содержится в проекте интерфейса визуализации. Содержит объекты окон сессии с данными исполнения. Используется модулями интерфейсов визуализации для отображения данных сессии.
VCA::SessPage
Объект страницы сессии. Содержит динамические данные окна проекта над которыми выполняет требуемые вычисления.
Содержится в объекте сессии проекта (VCA::SessProj). Наследуется от абстрактного виджета (VCA::Widget). Использует объект страницы проекта (VCA::Page) как источник исходных параметров.
VCA::SessWdg
Объект виджета сессии. Содержит динамические данные отдельного элемента кадра над которыми выполняет требуемые вычисления. Может вкладываться один в другой в соответствии с иерархией виджетов кадра.
Содержится в объекте окна сессии (VCA::SessPage) или в высшем по иерархии объекте этого типа. Наследуется от абстрактного виджета (VCA::Widget). Использует объект библиотечного (VCA::LWidget) и/или контейнерного (VCA::CWidget) виджета как источник исходных параметров. Используется модулем интерфейса визуализации в роли источника динамических данных для визуализации.
Vision, WebGUI
Корневые объекты модуля интерфейса визуализации, построенные на основе библиотеки Qt и Web-технологий. Предоставляют доступ к средствам исполнения и разработки интерфейсов визуализации в среде используемой технологии.
Предоставляют доступ к среде исполнения и разработки. Интегрируют код интерфейса визуализации в систему OpenSCADA.
VRunTime, WebRunTime
Объекты среды исполнения интерфейса визуализации на основе библиотеки Qt и Web-технологий. Непосредственно предоставляют пользовательский интерфейс визуализации и управления.
Содержаться в корневых объектах модулей визуализации. Подключаются и используют данные объекта сеанса проекта (VCA::SesProj) концепции СВУ. В соответствии со структурой сеанса содержат множество специализированных объектов непосредственного отображения.
VDevelop, WebDevelop
Объекты среды разработки интерфейса визуализации на основе библиотеки Qt и Web-технологий. Предоставляют интерфейс инструмента над данными концепции для разработки интерфейсов ВУ.
Содержаться в корневых объектах модулей визуализации. Подключаются к объекту корня концепции СВУ (VCA::Engine) и предоставляют графический интерфейс для управления ею. В соответствии со структурой концепции содержат множество специализированных объектов управления.
Статическая диаграмма классов не раскрывает всей иерархии взаимодействия объектов, основанных на абстрактном объекте VCA::Widget. Это связано с неявным наследованием данных свойств виджетов через все слои движка, а также тонкостями наследования, выстроенного путём использования данных одних виджетов в других. Для разъяснения этих особенностей изображена исчерпывающая карта "использующего" наследования в разделе 4.5.
4.12 Примитивы виджетов
Любой вновь создаваемый виджет основывается на одном из нескольких примитивов (конечный элемент визуализации) путём установки родственной связи как прямо на примитив, так и посредством нескольких промежуточных пользовательских виджетов. Каждый из примитивов содержит механизм (логику) модели данных. Экземпляр виджета хранит значения свойств конфигурирования примитива специально для себя.
В задачи интерфейса визуализации входит поддержка и работа с моделью данных примитивов виджетов. Примитивы виджетов должны быть тщательно проработаны и унифицированы с целью охватить как можно больше возможностей в как можно меньшем количестве слабо связанных друг с другом по назначению примитивов.
Таблица. Библиотека примитивов виджетов (базовых элементов отображения)
Id
Наименование
Функция
ElFigure
Элементарные графические фигуры
Примитив является основой для отрисовки элементарных графических фигур со всевозможной комбинацией их в одном объекте. Предусматривается поддержка следующих элементарных фигур:
Линия.
Дуга.
Кривая безье.
Заливка замкнутого пространства.
Для всех фигур, содержащихся в виджете, устанавливаются единые свойства толщины, цвета и т.д., но это не исключает возможность указания вышеперечисленных атрибутов для каждой фигуры отдельно.
FormEl
Элементы формы
Включает поддержку стандартных компонентов формы:
Редактирование строки.
Редактирование текста.
Флажок.
Кнопка.
Выбор из списка.
Список.
Дерево.
Таблица.
Слайдер.
Строка прокрутки.
Text
Текст
Элемент текста(метки). Характеризуется типом шрифта, цветом, ориентацией и выравниванием.
Media
Медиа
Элемент отображения растровых и векторных изображений различных форматов, проигрывания анимированных изображений, проигрывание аудио фрагментов и просмотр видео-фрагментов.
Diagram
Диаграмма
Элемент диаграммы с поддержкой возможности отображения нескольких потоков трендов, частотного спектра, XY диаграмм реального времени, ... .
Protocol
Протокол
Элемент протокола, визуализатора системных сообщений с поддержкой несколько режимов работы.
Document
Документ
Элемент формирования отчётов, журналов и другой документации на основе доступных в системе данных.
Box
Контейнер
Содержит механизм размещения-включения других виджетов с целью формирования новых, более сложных, виджетов и страниц конечной визуализации.
Function, в планах
Функция API объектной модели OpenSCADA
Невизуальный, на стороне исполнения, виджет, позволяющий включать вычислительные функции объектной модели OpenSCADA в СВУ.
Таблица. Общий набор свойств/атрибутов в виджете
Id
Имя
Номер
Значение
id
Id
-
Идентификатор элемента. Атрибут только для чтения, призванный предоставить информацию об идентификаторе элемента.
path
Путь
-
Путь к этому виджету. Атрибут только для чтения и предоставления исчерпывающей информации об расположения элемента.
parent
Родитель
-
Путь к родительскому виджету. Атрибут только для чтения и предоставления информации о расположении предка, от которого унаследован виджет.
owner
Владелец
-
Владелец и группа виджета в форме "{владелец}:{группа}", по умолчанию "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
Страница:открыта
-
Признак "Страница открыта".
* Модификация из сеанса осуществляет немедленное открытие/закрытие данной страницы.
pgNoOpenProc
Страница:обрабатывать закрытой
-
Признак "Исполнять страницу даже если она закрыта".
pgOpenSrc
Страница:источник открытия
3
Полный адрес страницы, открывшей данную.
* Запись/очистка адреса виджета — (инициатора открытия) осуществляет немедленное открытие/закрытие страницы. В случае записи адреса и выполнения других условий осуществляется динамическое связывание текущего виджета с инициатором.
pgGrp
Страница:группа
4
Группа страницы.
Дополнительные атрибуты режима исполнения — сеанса.
event
Обработка событий
-
Специальный атрибут для сбора событий виджета в списке, разделённом новой строкой. Доступ к атрибуту защищён захватом ресурса с целью избежания потери событий. Атрибут всегда доступен в скрипте виджета.
load
Загрузка
-1
Виртуальная команда групповой загрузки данных.
focus
Фокус
-2
Специальный атрибут индикации факта получения фокуса активным виджетом. Атрибут этого виджета и вложенных виджетов доступен в скрипте виджета.
perm
Доступ
-3
Виртуальный атрибут прав активного пользователя на просмотр и контроль над виджетом.
* — Специальная функция атрибута виджета, выполняемая в сеансе проекта при пользовательской модификации.
Движок среды визуализации предусматривает активацию атрибутов, специфичных для визуализатора. Процесс активации осуществляется при открытии сеанса визуализации для проекта и предусматривает в этом проекте: создание специфичного атрибута с указанными свойствами, если он отсутствует, и активацию для отслеживания движком среды визуализации его модификации, как для атрибутов формирования образов примитивов. С перечнем специфичных для визуализатора атрибутов можно ознакомиться в документации на соответствующий визуализатор.
Элементарные графические фигуры (ElFigure)
Примитив является основой для отрисовки элементарных графических фигур со всевозможной комбинацией их в одном объекте. Учитывая широкий спектр всевозможных фигур, которые должен поддерживать примитив, и в тоже время являться достаточно простым в использовании и, по возможности, в реализации, решено было ограничить перечень базовых фигур, используемых для построения результирующих графических объектов до таких фигур: линия, дуга, кривая Безье и заливка замкнутых контуров. Основываясь уже на этих базовых фигурах, можно строить производные фигуры, комбинируя базовые. В рамках примитива существует возможность задания прозрачности цвета в диапазоне [0...255], где '0' — полная прозрачность.
Таблица. Набор дополнительных свойств/атрибутов в примитиве "ElFigure"
Id
Имя
Номер
Значение
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 — из таблицы mime ресурсов БД.
"name" — путь файла или идентификатор mime-ресурса.
Примеры:
"res:backLogo" — из таблицы mime ресурсов БД для идентификатора "backLogo";
"backLogo" — как и предыдущий;
"file:/var/tmp/backLogo.png" — из локального файла по пути "/var/tmp/backLogo.png".
orient
Угол поворота
28
Угол поворота содержимого виджета.
elLst
Список элементов
27
Список графических примитивов в формате:
Линия, форма записи в списке, для статических и динамических параметров (могут смешиваться):
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 — из таблицы mime-ресурсов БД.
"name" — путь файла или идентификатор mime-ресурса.
Атрибуты для каждой точки из списка графических фигур 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.
Элементы формы (FormEl)
Примитив, предназначенный для предоставления стандартных элементов формы в распоряжение пользователя. Общий перечень атрибутов зависит от типа элемента.
Таблица. Набор дополнительных свойств/атрибутов в примитиве "FormEl"
Id
Имя
Номер
Значение
elType
Тип элемента
20
Тип элемента: "Строка редактирования", "Редактор текста", "Флажок", "Кнопка", "Выбор из списка", "Список", "Дерево", "Таблица", "Слайдер", "Полоса прокрутки". От значения типа зависит перечень дополнительных атрибутов.
Строка редактирования:
value
Значение
21
Содержимое строки.
view
Вид
22
Вид строки редактирования: "Текст", "Комбобокс", "Целое", "Вещественное", "Время", "Дата", "Дата и время".
cfg
Конфигурация
23
Конфигурация строки. Формат значения данного поля для различных видов строки:
Текст — конфигурация форматированного ввода по шаблону с параметрами:
A — Необходим ASCII алфавитный символ. A-Z, a-z. a — Разрешён но не необходим ASCII алфавитный символ. N — Необходим ASCII алфавитно-цифровой символ. A-Z, a-z, 0-9. n — Разрешён но не необходим ASCII алфавитно-цифровой символ. X — Необходим любой символ. x — Разрешён но не необходим любой символ. 9 — ASCII цифра необходима. 0-9. 0 — ASCII цифра разрешёна но не необходима. D — ASCII цифра необходима. 1-9. d — ASCII цифра разрешёна но не необходима (1-9). # — ASCII цифра или знаки плюс/минус разрешёны но не необходимы. H — Необходим символ шестнадцатиричного числа. A-F, a-f, 0-9. h — Разрешён но не необходим символ шестнадцатиричного числа. B — Необходим бинарный символ. 0-1. b — Разрешён но не необходим бинарный символ. > — Все следующие алфавитные символы в верхнем регистре. < — Все следующие алфавитные символы в нижнем регистре. ! — Выключение преобразования регистра. \\ — Используйте в разделителях для экранирования специальных символов, которые перечислены.
Комбобокс — список значений редактируемого комбо-бокса по строкам. Целое — значение целого числа в форме: "{Минимум}:{Максимум}:{ШагИзменения}:{Префикс}:{Суффикс}". Вещественное — значение вещественного числа в форме: "{Минимум}:{Максимум}:{ШагИзменения}:{Префикс}:{Суффикс}:{ЗнаковПослеТочки}". Время, Дата, Дата и время — формировать дату по шаблону с параметрами:
d — номер дня (1-31); dd — номер дня (01-31); ddd — сокращённое наименование дня ("Mon" ... "Sun"); dddd — полное наименование дня ("Monday" ... "Sunday"); M — номер месяца (1-12); MM — номер месяца (01-12); MMM — сокращённое имя месяца ("Jan" ... "Dec"); MMMM — полное имя месяца ("January" ... "December"); yy — последние две цифры года; yyyy — год полностью; h — час (0-23); hh — час (00-23); m — минуты (0-59); mm — минуты (00-59); s — секунды (0-59); ss — секунды (00-59); AP,ap — отображать AM/PM или am/pm.
confirm
Подтверждать
24
Включение режима подтверждения.
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 пикселов и усиленный.
Редактор текста:
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
Значение, отличается для разных режимов:
"Стандарт" — параметры повтора событий при удержании "{задержка}-{интервал}", время миллисекундах;
"Переключатель" — значение переключателя;
"Меню" — список адресов элементов меню вида "/grp1/grp2/item1";
"Загрузка" — строка описания "{ШаблонФайлов}|{Заголовок}|{ФайлПоУмолчанию}" и содержимое загруженного файла. Шаблон файлов в виде "Изображение (*.png *.xpm *.jpg);;CSV-файл (*.csv)".
"Сохранение" — строка описания "{ШаблонФайлов}|{Заголовок}|{ФайлПоУмолчанию}" и содержимое сохраняемого файла. Шаблон файлов как и выше.
img
Изображение
22
Изображение на кнопке. Имя изображения в форме "[{src}:]{name}", где:
"src" — источник изображения:
file — прямо из локального файла по пути;
res — из таблицы mime ресурсов БД.
"name" — путь файла или идентификатор mime-ресурса.
Примеры:
"res:backLogo" — из таблицы mime ресурсов БД для идентификатора "backLogo";
"backLogo" — как и предыдущий;
"file:/var/tmp/backLogo.png" — из локального файла по пути "/var/tmp/backLogo.png".
color
Цвет
23
Цвет кнопки. Имя цвета в виде "{color}[-{alpha}]", где:
"color" — стандартное имя цвета или числовое представление из трёх шестнадцатеричных чисел цвета "#RRGGBB";
"alpha" — уровень альфа-канала [0...255].
Примеры:
"red" — сплошной красный цвет;
"#FF0000" — сплошной красный цвет в цифровом коде;
"red-127" — полупрозрачный красный цвет.
colorText
Цвет:текст
27
Цвет текста. (детали выше)
mode
Режим
24
Режим работы кнопки:
"Стандарт" — обычная кнопка с возможностью повтора событий при удержании (параметры в "value");
"Переключатель" — кнопка с фиксацией (значение в "value");
"Меню" — открытие меню по нажатию (перечень элементов в "value");
"Загрузка" — организация пользовательской загрузки небольших файлов через интерфейс визуализации; при нажатии кнопки в этом режиме открывается диалог выбора файла для загрузки, а содержимое выбранного файла загружается в атрибут "value";
"Сохранение" — организация пользовательского сохранения небольших файлов через интерфейс визуализации; при записи содержимого файла в атрибут "value" пользователю будет открыт диалог выбора/указания файла для сохранения, после выбора содержимое атрибута "value" сохранится в файл, а "value" очистится.
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". Формат адреса зависит от режима выбора таблицы:
"Ячейка" — адрес ячейки в формате "{row}:{col}".
"Строка", "Колонка" — номер строки-колонки или содержимое ячейки ключа строки-колонки, указанной атрибутом "keyID".
items
Элементы
22
Структура и содержимое таблицы в виде XML:
Теги:
"tbl" — Таблица, свойства таблицы в целом:
"sel" — режим выбора-выделения элементов таблицы: "row" — по строкам, "col" — по колонкам, "cell" — ячейками (по умолчанию);
"keyID" — номер ключевой строки-колонки, для получения значения выбора;
"colsWdthFit" — подстраивать размер колонок (размер которых не фиксирован) под заполнение всей ширины таблицы;
"hHdrVis", "vHdrVis" — установка видимости горизонтального, вертикального заголовков;
"sortEn" — включение прямой сортировки по колонкам.
"h" — Строка заголовков, возможные атрибуты у тегов ячеек заголовка, для колонки в целом:
"width" — ширина колонки, в пикселах или процентах (10%);
"edit" — возможность редактирования (0 или 1) ячеек колонки, по умолчанию — нет (0);
"color" — цвет колонки в целом в виде имени цвета или его кода;
"colorText" — цвет текста колонки в целом в виде имени цвета или его кода;
"font" — шрифт текста колонки в целом в виде типовой строки OpenSCADA;
"sort" — сортировка по данной колонке [0 — по убыванию; 1 — по возрастанию].
"r" — Строка значений, возможные атрибуты:
"color" — цвет строки в целом в виде имени цвета или его кода;
"colorText" — цвет текста строки в целом в виде имени цвета или его кода;
"font" — шрифт текста строки в целом в виде типовой строки OpenSCADA.
"s", "i", "r", "b" — ячейки типов данных "Строка", "Целое", "Вещественное" и "Логическое". Возможные атрибуты:
"color" — цвет фона ячейки;
"colorText" — цвет текста ячейки в виде имени цвета или его кода;
"font" — шрифт текста ячейки в виде типовой строки OpenSCADA;
"img" — изображение ячейки в форме "[{src}:]{name}", детали выше;
"edit" — возможность редактирования (0 или 1) ячейки колонки, по умолчанию — нет (0).
font
Шрифт
25
Имя шрифта в виде "{family} {size} {bold} {italic} {underline} {strike}" (детали выше).
Слайдер и полоса прокрутки:
value
Значение
21
Положение слайдера.
cfg
Конфигурация
22
Конфигурация слайдера в формате: "{ВертОриент}:{Минимум}:{Максимум}:{ОдинШаг}:{СтрШаг}".
Где:
"ВертОриент" — признак вертикальной ориентации (0 или 1), по умолчанию ориентация горизонтальная;
"Минимум" — минимальное значение;
"Максимум" — максимальное значение;
"ОдинШаг" — размер одного шага;
"СтрШаг" — размер страничного шага.
Элемент текста (Text)
Данный примитив предназначен для вывода простого текста, используемого в роли меток и различных подписей. С целью простого создания частых декоративных оформлений примитив должен поддерживать обвод текста рамкой.
Таблица. Набор дополнительных свойств/атрибутов в примитиве "Text"
Id
Имя
Номер
Значение
backColor
Фон:цвет
20
Фоновый цвет. Имя цвета в виде "{color}[-{alpha}]", где:
"color" — стандартное имя цвета или числовое представление из трёх шестнадцатеричных чисел цвета "#RRGGBB";
"alpha" — уровень альфа-канала [0...255], где 0 - полностью прозрачный.
Примеры:
"red" — сплошной красный цвет;
"#FF0000" — сплошной красный цвет в цифровом коде;
"red-127" — полупрозрачный красный цвет.
backImg
Фон:изображение
21
Фоновое изображение. Имя изображения в форме "[{src}:]{name}", где:
"src" — источник изображения:
file — прямо из локального файла по пути;
res — из таблицы mime ресурсов БД.
"name" — путь файла или идентификатор mime-ресурса.
Примеры:
"res:backLogo" — из таблицы mime ресурсов БД для идентификатора "backLogo";
"backLogo" — как и предыдущий;
"file:/var/tmp/backLogo.png" — из локального файла по пути "/var/tmp/backLogo.png".
Имя шрифта в виде "{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
Выравнивание текста: "Вверху слева", "Вверху справа", "Вверху по центру", "Вверху по ширине", "Внизу слева", "Внизу справа", "Внизу по центру", "Внизу по ширине", "По центру слева", "По центру справа", "По середине", "По центру по ширине".
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:
"Строка": {len} — ширина строки;
"Вещественный": {wdth};{form};{prec} — ширина значения, форма значения ('g', 'e', 'f') и точность;
"Целый": {len} — ширина значения.
Элемент отображения медиа-материалов (Media)
Данный примитив предназначен для проигрывания различных медиа-материалов, начиная от простых изображений и заканчивая полноценными аудио и видео потоками.
Таблица. Набор дополнительных свойств/атрибутов в примитиве "Media"
Id
Имя
Номер
Значение
backColor
Фон:цвет
20
Фоновый цвет. Имя цвета в виде "{color}[-{alpha}]", где:
"color" — стандартное имя цвета или числовое представление из трёх шестнадцатеричных чисел цвета "#RRGGBB";
"alpha" — уровень альфа-канала [0...255], где 0 - полностью прозрачный.
Примеры:
"red" — сплошной красный цвет;
"#FF0000" — сплошной красный цвет в цифровом коде;
"red-127" — полупрозрачный красный цвет.
backImg
Фон:изображение
21
Фоновое изображение. Имя изображения в форме "[{src}:]{name}", где:
"src" — источник изображения:
file — прямо из локального файла по пути;
res — из таблицы mime ресурсов БД.
"name" — путь файла или идентификатор mime-ресурса.
Примеры:
"res:backLogo" — из таблицы mime ресурсов БД для идентификатора "backLogo";
"backLogo" — как и предыдущий;
"file:/var/tmp/backLogo.png" — из локального файла по пути "/var/tmp/backLogo.png".
"Полное видео" — полное видео, аудио или поток, вроде: OGG, OGM, AVI, MKV, MPG, MP3, MP4.
areas
Области карты
28
Количество активных областей.
Атрибуты изображения (Image)
fit
Заполнять виджет
26
Признак "Согласовать содержимое с размером виджета".
Атрибуты видеоролика (Movie)
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)
Данный примитив предназначен для построения различных диаграмм, включая графики/тренды отображения текущего процесса и архивных данных. Реализованы следующие типы диаграмм:
"График" — строит график значений параметра от времени.
"Спектр" — строит частотный спектр из значений параметров. Окно данных частотного спектра формируется исходя из размера виджета по горизонтали, в пикселах, и доступных данных параметров, наложенных на сетку горизонтального размера. В связи с этим минимальная частота определяется значением атрибута "tSize" — "1/tSize", а максимальная выделяемая частота определяется половинной шириной графика в пикселах умноженной на минимальную частоту "width/(2*tSize)".
"XY" — строит двумерный график значений параметров, парами на график, где чётные по оси Y (0,2,4...) и нечётные по оси X (1,3,5...). Указанный временной диапазон данных используется в получении значений параметров оси X и Y, с последующей сортировкой по оси X и изображения.
Для всех типов диаграмм возможно, в качестве источника данных, указание:
параметра подсистемы "Сбор Данных";
архива значений;
прямого блока данных пользователя.
Поддерживается режим слеживания текущих значений и значений с архива, а также возможно построение графиков параметров не имеющих архива значений, путём накопления текущих значений в буфере диаграммы и только на момент активного отображения этой диаграммы.
Процесс доступа к архивным данным оптимизирован путём ведения промежуточного буфера отображения, а также упаковки трафика данных при запросе, путем приведения данных к качеству достаточного для отображения.
Таблица. Набор дополнительных свойств/атрибутов в примитиве "Diagram"
Id
Имя
Номер
Значение
backColor
Фон:цвет
20
Фоновый цвет. Имя цвета в виде "{color}[-{alpha}]", где:
"color" — стандартное имя цвета или числовое представление из трёх шестнадцатеричных чисел цвета "#RRGGBB";
"alpha" — уровень альфа-канала [0...255], где 0 - полностью прозрачный.
Примеры:
"red" — сплошной красный цвет;
"#FF0000" — сплошной красный цвет в цифровом коде;
"red-127" — полупрозрачный красный цвет.
backImg
Фон:изображение
21
Фоновое изображение. Имя изображения в форме "[{src}:]{name}", где:
"src" — источник изображения:
file — прямо из локального файла по пути;
res — из таблицы mime ресурсов БД.
"name" — путь файла или идентификатор mime-ресурса.
Примеры:
"res:backLogo" — из таблицы mime ресурсов БД для идентификатора "backLogo";
"backLogo" — как и предыдущий;
"file:/var/tmp/backLogo.png" — из локального файла по пути "/var/tmp/backLogo.png".
Режим горизонтальной шкалы/решетки: "Не рисовать", "Решетка", "Маркеры", "Решетка и маркеры", "Решетка (лог)", "Маркеры (лог)", "Решетка и маркеры (лог)".
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 пикселов.
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).
Элемент построения протоколов, на основе архивов сообщений (Protocol)
Данный примитив предназначен для визуализации данных архива сообщений путём формирования протоколов с различными способами визуализации, начиная от статического сканирующего просмотра и заканчивая динамическим отслеживанием протокола сообщения.
Таблица. Набор дополнительных свойств/атрибутов в примитиве "Protocol"
Id
Имя
Номер
Значение
backColor
Фон:цвет
20
Фоновый цвет. Имя цвета в виде "{color}[-{alpha}]", где:
"color" — стандартное имя цвета или числовое представление из трёх шестнадцатеричных чисел цвета "#RRGGBB";
"alpha" — уровень альфа-канала [0...255], где 0 - полностью прозрачный.
Примеры:
"red" — сплошной красный цвет;
"#FF0000" — сплошной красный цвет в цифровом коде;
"red-127" — полупрозрачный красный цвет.
backImg
Фон:изображение
21
Фоновое изображение. Имя изображения в форме "[{src}:]{name}", где:
"src" — источник изображения:
file — прямо из локального файла по пути;
res — из таблицы mime ресурсов БД.
"name" — путь файла или идентификатор mime-ресурса.
Примеры:
"res:backLogo" — из таблицы mime ресурсов БД для идентификатора "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).
Элемент формирования отчётной документации (Document)
Примитив предназначен для формирования отчётной, оперативной и иной документации на основе шаблонов документов.
Таблица. Набор дополнительных свойств/атрибутов в примитиве "Document"
Id
Имя
Номер
Значение
style
CSS
20
Правила CSS в строках, вида "body { background-color:#818181; }".
tmpl
Шаблон
21
Шаблон документа в XHTML, начинается с тега "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
Время генерации документа, секунд. Записать время для генерации документа от этой точки или нуля для перегенерации.
n
Размер архива
25
Количество документов или глубина архива.
Атрибуты включеного режима архивирования
aCur
-
Позиция текущего документа в архиве. Запись значения <0 производит архивацию текущего документа.
vCur
-
Текущий визуализируемый документ архива. Запись значения -1 — выбор следующего документа, -2 — выбор предыдущего документа.
aDoc
документ
-
Текущий документ архива в XHTML, начинается с тега "body".
aSize
-
Реальный размер архива документа.
Возможности примитива "Документ":
Гибкое формирования структуры документа на основе языка гипертекстовой разметки.
Формирования документов по команде или по плану в архив с последующим просмотром архива.
Формирование документа в режиме реального времени полностью динамически и на основе архивов реальных данных за указанное время.
Использование атрибутов виджета для передачи значений и адресов на архивы реальных данных в документ. Позволяет использовать виджет документа как шаблон для формирования отчётов с другими входными данными.
В основе любого документа лежит XHTML-шаблон. XHTML-шаблон это тег "body" WEB-страницы, содержащий статику документа в стандарте XHTML 1.0 и элементы исполняемых инструкций на одном из языков пользовательского программирования OpenSCADA в виде <?dp {procedure} ?>. Результирующий документ формируется путём исполнения процедур и вставки их результата в документ.
Источником значений исполняемых инструкций являются атрибуты виджета этого примитива, а также все механизмы языков пользовательского программирования OpenSCADA. Атрибуты могут добавляться пользователем и линковаться на реальные атрибуты параметров или-же являться автономными, значения которых будут формироваться в скрипте виджета. В случае со слинкованными атрибутами могут извлекаться значения из истории, архива.
На рис. 3.8.7.a изображена структурная схема виджета примитива "Документ". Согласно этой структуре "Документ" содержит: XHTML-шаблон, результирующие документы и скрипт обработки данных. Источником данных для скрипта и результирующих документов являются атрибуты виджета.
Предусматривается работа виджета в двух режимах: "Динамический" и "Архивный". Отличие архивного режима заключается в наличии архива указанной глубины и атрибутов, позволяющих управлять процессом архивирования и просмотра указанного документа в архиве.
Генерация документа всегда производится в момент установки атрибута времени time относительно установленного начального времени документа в атрибуте bTime. При выключенном архиве результирующий документ помещается непосредственно в атрибут doc. При включенном архиве результирующий документ помещается в ячейку под курсором, атрибут aCur, а так-же в doc если значение курсора архива aCur и курсора визуализируемого документа vCur совпадают. Атрибуты архивных курсоров предусматривают несколько командных значений:
"aCur < 0" — Перемещает курсор архиватора на следующую позицию, тем самым оставляя предыдущий документ в архиве и очищая документ под курсором (если кольцевой архив замкнулся).
"vCur == -1" — Выбор следующего документа для отображения, выбранный документ копируется в атрибут doc.
"vCur == -2" — Выбор предыдущего документа для отображений, выбранный документ копируется в атрибут doc.
Как было указано выше динамика шаблона документа определяется вставками исполняемых инструкций вида "<?dp {procedure} ?>". В процедурах могут использоваться одноимённые атрибуты виджета и функции пользовательского интерфейса программирования OpenSCADA. Кроме атрибутов виджета зарезервированы специальные атрибуты (табл. 3.8.7.a).
Таблица 3.8.7.a. Специальные и зарезервированные элементы шаблона.
Имя
Назначение
Атрибуты
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".
4.13 Использование БД для хранения библиотек виджетов и проектов
Хранение данных виджетов, библиотек виджетов и проектов реализовано в БД, доступных системе OpenSCADA. БД организована по принадлежности данных к библиотеке-проекту. Т.е. отдельная библиотека-проект хранится в отдельной группе таблиц одной или разных БД. Перечень библиотек виджетов хранится в индексной таблице библиотек с именем "VCALibs", со структурой "Libs", а перечень проектов в индексной таблице "VCAPrjs", со структурой "Projs". Экземпляр этих таблиц создаётся в каждой БД, где хранятся данные этого модуля с перечнем библиотек, содержащихся в конкретно взятой БД. В состав таблиц, принадлежащих библиотеке виджетов и проектов, входят следующие:
"{DB_TBL}" — таблица с виджетами, принадлежащими библиотеке (структура "LibWigets"), или страниц принадлежащих проекту (структура "ProjPages");
"{DB_TBL}_io" — таблица с рабочими свойствами виджетов этой библиотеки и вложенными виджетами контейнерных виджетов (структура "LibWidgetIO"), или свойствами страниц (структура "ProjPageIO");
"{DB_TBL}_uio" — таблица с пользовательскими свойствами виджетов этой библиотеки и вложенными виджетами контейнерных виджетов (структура "LibWidgetUserIO"), или с пользовательскими свойствами страниц (структура "ProjPageUserIO");
"{DB_TBL}_incl" — таблица с перечнем вложенных виджетов в виджеты-контейнеры данной библиотеки (структура "LibWidgetIncl") или проекта (структура "ProjPageWIncl");
"{DB_TBL}_mime" — таблица с ресурсами библиотеки и её виджетов (структура "LibWidgetMime"), или проекта и его страниц (структура "ProjMime");
"{DB_TBL}_stl" — таблица для хранения значений стилевых параметров проекта (структура "PrjStlIO");
"{DB_TBL}_ses" — таблица для хранения данных режима исполнения проектов, т.е. сеансов (структура "PrjSesIO").
Проекции (структуры) основных таблиц таковы:
Libs(ID, NAME, DSCR, DB_TBL, ICO) — Библиотеки виджетов ID.
ID — идентификатор; NAME — имя; DSCR — описание; DB_TBL — корень таблиц БД с виджетами; ICO — закодированное (Base64) изображение иконки библиотеки.
ID — идентификатор; ICO — закодированное (Base64) изображение иконки виджета; PARENT — адрес виджета основы в виде /wlb_originals/wdg_Box; PROC — внутренний сценарий и язык сценария виджета; PROC_PER — периодичность вычисления сценария виджета; ATTRS — перечень атрибутов виджета, модифицированных пользователем; TIMESTAMP — метка времени последней модификации.
IDW — идентификатор виджета; ID — идентификатор IO; IDC — идентификатор дочернего виджета; NAME — имя IO; IO_TP — тип и главные флаги IO; IO_VAL — значение IO; SELF_FLG — внутренние флаги IO; CFG_TMPL — шаблон элемента конфигурации, основанного на данном атрибуте; CFG_VAL — значение элемента конфигурации (ссылка, константа ...).
IDW — идентификатор виджета; ID — идентификатор экземпляра вложенного виджета; PARENT — адрес виджета основы в виде /wlb_originals/wdg_Box; ATTRS — перечень атрибутов виджета, модифицированных пользователем.
LibWidgetMime(__ID__, MIME, DATA) — Audio, video, media и другие ресурсы виджетов библиотеки.
ID — Идентификатор ресурса. MIME — Mime тип данных ресурса (в формате — "{mimeType};{Size}"). DATA — Данные ресурса кодированные Base64.
ID — идентификатор проекта; NAME — имя проекта; DSCR — описание проекта; DB_TBL — корень таблиц БД со страницами; ICO — закодированное (Base64) изображение иконки проекта; USER — имя владельца проекта; GRP — имя группы пользователей проекта; PERMIT — права доступа к проекту; PER — период вычисления проекта, в миллисекундах; FLGS — флаги проекта; STYLE — типовой стиль проекта.
ProjPages(__OWNER__, ID, ICO, PARENT, PROC, PROC_PER, FLGS, ATTRS, TIMESTAMP) — Страницы ID содержащиеся в проекте/странице OWNER.
OWNER — проект/страница — владелец данной страницы (в виде — "/AGLKS/so/1/gcadr"); ID — идентификатор страницы; ICO — закодированное (Base64) изображение иконки страницы; PARENT — адрес виджета основы в виде /wlb_originals/wdg_Box; PROC — внутренний сценарий и язык сценария страницы; PROC_PER — периодичность вычисления сценария страницы; FLGS — флаги типов страницы; ATTRS — перечень атрибутов страницы, модифицированных пользователем; TIMESTAMP — метка времени последней модификации.
ProjPageIO(__IDW__, ID, IDC, IO_VAL, SELF_FLG, CFG_TMPL, CFG_VAL) — Рабочие атрибуты страниц. Структура фактически совпадает с таблицей "LibWidgetIO".
ProjPageUserIO(__IDW__, ID, IDC, NAME, IO_TP, IO_VAL, SELF_FLG, CFG_TMPL, CFG_VAL) — Пользовательские атрибуты страниц. Структура фактически совпадает с таблицей "LibWidgetUserIO".
ProjPageWIncl(__IDW__, ID, PARENT, ATTRS) — Включенные на страницы виджеты. Структура фактически совпадает с таблицей "LibWidgetIncl".
ProjMime(__ID__, MIME, DATA) — Audio, video, media и другие ресурсы страниц проектов. Структура фактически совпадает с таблицей "LibWidgetMime".
PrjStl(__ID__, V_0, V_1, V_2, V_3, V_4, V_5, V_6, V_7, V_8, V_9) — Значения поля стиля ID проекта.
ID — идентификатор поля стиля; V_{N} — значение поля стиля для стиля N.
ProjSess(__IDW__, ID, IO_VAL) — Таблица проекта IDW для хранения данных сеансов, исполняющих проект.
IDW — полный путь элемента проекта; ID — атрибут элемента; IO_VAL — значение атрибута.
4.14 API пользовательского программирования и сервисные интерфейсы OpenSCADA
API пользовательского программирования
API пользовательского программирования движка визуализации представлено непосредственно объектами OpenSCADA, формирующие пользовательский интерфейс, а именно "Сеансом" и "Виджетами/страницами". Для пользователя эти объекты предоставляют набор функций управления: Объект "Сеанс" ( this.ownerSess() )
string user( ) — текущий пользователь сеанса.
int alrmQuittance( int quit_tmpl, string wpath = "", bool ret = false ) — квитирование нарушений wpath с шаблоном quit_tmpl. Если wpath пустая строка то производится глобальное квитирование. В строке wpath, через символ ';', могут быть перечислены адреса нескольких виджетов. При установке ret осуществляется возврат квитирования.
int reqTm( ) — время последнего запроса.
string reqUser( ) — пользователь последнего запроса.
string reqLang( ) — язык последнего запроса.
int userActTm( ) — время последнего действия пользователя.
Объект "Виджет" (this)
TCntrNodeObj ownerSess( ) — получить объект сеанса данного виджета.
TCntrNodeObj ownerPage( ) — получить объект родительской страницы данного виджета.
TCntrNodeObj ownerWdg( bool base = false ) — получить родительский виджет данного виджета. При указании base будет возвращены и объекты страниц.
TCntrNodeObj wdgAdd( string wid, string wname, string parent ) — добавление виджета wid с именем wname на основе библиотечного виджета parent.
bool wdgDel( string wid ) — удаление виджета wid.
TCntrNodeObj wdgAt( string wid, bool byPath = false ) — подключение к дочернему или глобальному, посредством пути byPath, виджету. В случае глобального подключения можно использовать абсолютный или относительный путь к виджету. Точкой отсчёта абсолютного адреса выступает объект корня модуля "VCAEngine", а значит первым элементом абсолютного адреса является идентификатор сеанса, который опускается. Относительный адрес берёт отсчёт от текущего виджета. Специальным элементом относительного адреса является элемент вышестоящего узла "..".
bool attrPresent( string attr ) — проверка атрибута виджета attr на факт присутствия.
ElTp attr( string attr, bool fromSess = false ) — получение значения атрибута виджета attr или из сеанса fromSess. Для отсутствующих атрибутов возвращается пустая строка.
TCntrNodeObj attrSet( string attr, ElTp vl, bool toSess = false ) — установка атрибута виджета attr в значение vl, или в сеанс toSess. Возвращается текущий объект для конкатенации функций установки.
string link( string attr, bool prm = false ) — получение ссылки для атрибута виджета attr. При установке prm запрашивается ссылка для группы атрибутов (параметр), представленных указанным атрибутом.
string linkSet( string attr, string vl, bool prm = false ) — установка ссылки для атрибута виджета attr. При установке prm осуществляется установка ссылка для группы атрибутов (параметр), представленных указанным атрибутом.
string mime( string addr, string type = "" ) — получение "mime" объекта по адресу addr (прямая ссылка на ресурс или атрибут виджета с этой ссылкой) с типом в type, из таблицы сеанса или источника. Предназначено для редактирования "mime" объекта и подстановки его в контексте сеанса, например, изображений SVG.
int mimeSet( string addr, string data, string type = "" ) — установка "mime" объекта data с типом type по адресу addr.
int messDebug( string mess ); int messInfo( string mess ); int messNote( string mess ); int messWarning( string mess ); int messErr( string mess ); int messCrit( string mess ); int messAlert( string mess ); int messEmerg( string mess ); — формирование системного сообщения mess с категорией как путь к данному виджету.
Объект "Виджет", примитива "Документ" (this)
string getArhDoc( int nDoc) — получить текст документа архива на глубине nDoc (0-{aSize-1}).
Устаревшее API представляется группой функций непосредственно в модуле движка СВУ. Вызов этих функций из скриптов виджетов может осуществляться прямо по идентификатору функции, поскольку их область имён указывается для контекста скриптов виджетов:
Список виджетов (WdgList) Описание: Возвращает список виджетов в контейнере виджетов или список дочерних виджетов. Если установлено pg, то возвращается список страниц для проектов и сеансов. Параметры:
ID
Имя
Тип
Режим
По умолчанию
list
Список
Строка
Возврат
addr
Адрес
Строка
Вход
pg
Страницы
Bool
Вход
0
Присутствие узла (NodePresent) Описание: Проверка на присутствие узла, включая виджеты, атрибуты и другие. Параметры:
ID
Имя
Тип
Режим
По умолчанию
rez
Результат
Bool
Возврат
addr
Адрес
Строка
Вход
Список атрибутов (AttrList) Описание: Возвращает список атрибутов виджета. Если установлен noUser тогда возвращаются только не пользовательские атрибуты. Параметры:
ID
Имя
Тип
Режим
По умолчанию
list
Список
Строка
Возврат
addr
Адрес
Строка
Вход
noUser
Без пользовательских
Bool
Вход
1
Запрос атрибута (AttrGet) Описание: Запрос значения атрибута виджета. Запрос может осуществляться как указанием полного адреса атрибута в addr, так и отдельно адреса виджета в addr, а идентификатора атрибута в attr. Параметры:
ID
Имя
Тип
Режим
По умолчанию
val
Значение
Строка
Возврат
addr
Адрес
Строка
Вход
attr
Атрибут
Bool
Вход
Установка атрибута (AttrSet) Описание: Установка значения атрибута виджета. Установка может осуществляться как указанием полного адреса атрибута в addr, так и отдельно адреса виджета в addr, а идентификатора атрибута в attr. Параметры:
ID
Имя
Тип
Режим
По умолчанию
addr
Адрес
Строка
Вход
val
Значение
Строка
Вход
attr
Атрибут
Bool
Вход
Пользователь сеанса (SesUser) Описание: Возвращает пользователя сеанса по пути к виджету сеанса. Параметры:
ID
Имя
Тип
Режим
По умолчанию
user
Пользователь
Строка
Возврат
addr
Адрес
Строка
Вход
Сервисные интерфейсы OpenSCADA
Сервисные интерфейсы это интерфейсы доступа к системе OpenSCADA посредством интерфейса управления OpenSCADA из внешних систем. Данный механизм положен в основу всех механизмов обмена внутри OpenSCADA, реализованных посредством слабых связей и стандартного протокола обмена OpenSCADA.
Доступ к значениям атрибутов элементов визуализации (виджеты)
С целью предоставления унифицированного, группового и сравнительно быстрого доступа к значениям атрибутов визуальных элементов предусмотрена сервисная функция визуального элемента "/serv/attr" и команды получения/установки значений атрибутов: <get path="/UI/VCAEngine/{wdg_addr}/%2fserv%2fattr"/> и <set path="/UI/VCAEngine/{wdg_addr}/%2fserv%2fattr"/>.
Таблица. Атрибуты команд получения/установки атрибутов визуальных элементов
Id
Имя
Значение
Команда запроса визуальных атрибутов виджета: <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"/>
tm — Время/счётчик изменений. Установка времени/счётчика изменений для запроса только изменившихся атрибутов.
Результат:
<el id="{attr}" p="{a_id}">{val}</el> — элементы с результатами атрибутов. В элементе указываются: строковый идентификатор attr атрибута, индекс a_id атрибута и его значение val. <w id="{wid}" lnkPath="{lnk_path}">{childs+attrs}</w> — элементы с дочерними виджетами и их атрибутами. В элементе указываются идентификатор дочернего виджета wid и путь виджета на который ссылается данный виджет если он является ссылкой lnk_path.
Доступ к страницам сеанса
С целью унификации и оптимизации доступа к страницам предусмотрена сервисная функция сеанса "/serv/pg" и команды запроса перечня открытых страниц <openlist path="/UI/VCAEngine/ses_{Session}/%2fserv%2fpg"/>; открытия страницы <open path="/UI/VCAEngine/ses_{Session}/%2fserv%2fpg"/>; и закрытия страницы <close path="/UI/VCAEngine/ses_{Session}/%2fserv%2fpg"/>.
Результатом запроса перечня открытых страниц являются дочерние элементы <el>{OpPage}</el>, содержащие полный путь открытой страницы. Кроме перечня открытых страниц запрос возвращает значение текущего счётчика вычисления сеанса в атрибуте tm. Если данный атрибут устанавливается при запросе, то для каждой открытой страницы возвращается список изменённых с момента указанного значения счётчика виджетов открытой страницы.
Управление сигнализацией
Для предоставления механизма глобального контроля за сигнализацией сеанса предусмотрена сервисная функция сеанса "/serv/alarm" и команды запроса статуса сигналов <get path="/UI/VCAEngine/ses_{Session}/%2fserv%2falarm"/>; и квитирование сигналов <quittance path="/UI/VCAEngine/ses_{Session}/%2fserv%2falarm"/>.
Запрос статуса сигналов возвращает обобщённое состояние сигналов, а так-же ресурс уведомления, если атрибут "mode" равен "resource". Результатом запроса ресурса уведомления обычно является звуковой файл, для воспроизведения, в это-же время обеспечивается отслеживание последовательности сигнализации и квитирования отдельных ресурсов сообщений.
Запрос на квитирование выполняет квитирование указанного виджета, атрибут wdg, в соответствии с шаблоном, атрибут tmpl.
Манипуляция сеансами проектов
Для предоставления унифицированного механизма манипуляции сеансами визуализаторам СВУ в модуле движка СВУ (VCAEngine) предусмотрена сервисная функция "/serv/sess" и команды запроса перечня открытых сеансов, подключения/создания нового сеанса и отключения/удаления сеанса: <list path="/UI/VCAEngine/%2fserv%2fsess"/>, <connect path="/UI/VCAEngine/%2fserv%2fsess"/> и <disconnect path="/UI/VCAEngine/%2fserv%2fsess"/> соответственно.
Таблица. Атрибуты команд механизма манипуляции сеансами
Id
Имя
Значение
Команда запроса перечня открытых сеансов для проекта: <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.
4.15 Копирование элементов
Для ускорения процесса разработки пользовательских интерфейсов визуализации и управления нужно предусмотреть функцию копирования элементов. Что-бы заложить поддержку различных вариантов копирования запишим их по пунктам:
"Библиотека виджетов (wlb_SrcLib)" -> "Библиотека виджетов (wlb_NewLib)" -- Копируются параметры самой библиотеки, а также все виджеты/кадры в ней содержащиеся.
"Проект (prj_SrcPrj)" -> "Проект (prj_NewPrj)" -- Копируются параметры проекта, все страницы по иерархии, а также виджеты/кадры, содержащихся в активных страницах.
"Страница проекта (prj_WPrj.pg_SrcPg)" -> Страница проекта (prj_WPrj.pg_WPg.pg_NewPg)" -- Копирование параметров страницы, вложенных страниц и вложенных виджетов
"Кадр библиотеки виджетов (wlb_Lib.wdg_SrcWdg)" -> "Кадр библиотеки виджетов(wlb_LibN.wdg_NewWdg)" -- Копирование параметров виджета и вложенных виджетов.
"Элемент кадра/страницы (prj_WPrj.pg_WPage.wdg_SrcWdg" -> "Кадр библиотеки виджетов(wlb_Lib.wdg_NewWdg)" -- Копирование параметров виджета и вложенных виджетов.
Перечислим возможности, которые сможет обеспечить СВУ, построенная на основе данного проекта:
три уровня сложности в формировании интерфейса визуализации, позволяющие органично осваивать и применять инструментарий по методике от простого к сложному:
формирование из шаблонных кадров путём назначения динамики (без графической конфигурации);
графическое формирование новых кадров путём использования готовых элементов визуализации из библиотеки (мнемосхемы);
формирование новых кадров, шаблонных кадров и элементов отображение в библиотеки.
построение интерфейсов визуализации практически любой сложности, начиная от простых плоских интерфейсов мониторинга, и заканчивая полноценными иерархическими интерфейсами, используемыми в SCADA системах;
предоставление различных способов формирования и конфигурации пользовательского интерфейса, основанных на различных интерфейсах графического представления (QT, Web, Java ...), или же посредством стандартного интерфейса управления системой OpenSCADA;
смену динамики в процессе исполнения;
построение новых шаблонных кадров на уровне пользователя и формирование специализированных, под область применения, библиотек кадров (например, включение кадров параметров, графиков и других элементов с увязкой их друг с другом) в соответствии с теорией вторичного использования и накопления;
построение новых пользовательских элементов визуализации и формирование специализированных под область применения библиотек кадров в соответствии с теорией вторичного использования и накопления;
описание логики новых шаблонных кадров и пользовательских элементов визуализации как простыми связями, так и лаконичным, полноценным языком пользовательского программирования;
возможность включение в пользовательские элементы визуализации функций (или кадров вычисления функций) объектной модели OpenSCADA, практически связывая представление с алгоритмом вычисления (например, визуализируя библиотеку моделей аппаратов ТП для последующего визуального построения моделей ТП);
разделение данных пользовательских интерфейсов и интерфейсов представления этих данных, позволяющее строить интерфейс пользователя в одной среде, а исполнять во многих других (QT, Web, Java ...);
возможность подключения к исполняющемуся интерфейсу для наблюдения и коррекции действий (например, при обучении операторов и контроля в реальном времени за его действиями);
визуальное построение различных схем с наложением логических связей и последующим централизованным исполнением в фоне (визуальное построение и исполнение математических моделей, логических схем, релейных схем и иных процедур);
предоставление функций объектного API в систему OpenSCADA, может использоваться для управления свойствами интерфейса визуализации из пользовательских процедур;
построение серверов кадров, элементов визуализации и проектов интерфейсов визуализации с возможностью обслуживания множественных клиентских соединений;
простая организация клиентских станций на различной основе (QT, Web, Java ...) с подключением к центральному серверу;
полноценный механизм разделения полномочий между пользователями, позволяющий создавать и исполнять проекты с различными правами доступа к его компонентам;
гибкое формирование правил сигнализаций и уведомления с учётом и поддержкой различных способов уведомления;
поддержка пользовательского формирования палитры и шрифтовых предпочтений для интерфейса визуализации;
поддержка пользовательского формирования карт событий под различное оборудование управления и пользовательские предпочтения;
поддержка профилей пользователей, позволяющая определять различные свойства интерфейса визуализации (цветовая гамма, шрифтовые особенности, предпочтительные карты событий);
гибкое хранение и распространение библиотек виджетов, кадров и проектов интерфейсов визуализации в БД, поддерживаемых системой OpenSCADA; практически пользователю нужно только зарегистрировать полученную БД с данными.
5 Проигрывание ситуаций по реализации их на основе концепции данного проекта
Цель проигрывания процесса построения различных интерфейсов визуализации на основе концепции данного проекта заключается в выявлении особенностей различных реализаций и узких мест в описании их концепцией.
Выполнено без в мыслях, без фиксации.
6 Реализация
Реализацию будем производить поэтапно, в направлении от функций в концепции к её представлению на библиотеке Qt, и так до последнего компонента. Такой подход позволит получать результат между этапами, анализировать его и учитывать особенности на следующих этапах. Для пошаговой реализации разобьем всю задачу на логические части и выстроим их в зависимости одна от другой, в реализации.
6.1 Виджеты и их библиотеки
Целями данного этапа является:
Реализация основы архитектуры "Модель данных" — "Представление" в лице модулей системы OpenSCADA: "UI.VCAEngine" — "UI.Vision".
Реализация базовых функций модели данных СВУ в модуле UI.VCAEngine:
Организация хранилища данных модели, модуля UI.VCAEngine, в БД, доступных OpenSCADA.
Написание сценариев управления моделью данных, модуля UI.VCAEngine, посредством интерфейса управления OpenSCADA.
Создание абстрактного класса виджета VCA::Widget.
Создание класса библиотеки виджетов VCA::WdgLib.
Создание представительских классов библиотечного VCA::LWidget и контейнерного VCA::CWidget виджета.
Создание представительского класса терминального виджета VCA::PrWidget (конечного элемента визуализации).
Создание первичной версии библиотеки терминальных виджетов, модели данных примитивов визуализации.
Реализация базовых функций среды разработки пользовательского интерфейса в модуле представления UI.Vision:
Построение основы пользовательского интерфейса разработки на библиотеке Qt.
Формирование навигатора по библиотекам виджетов и механизмы управления ими.
Формирование инспектора атрибутов виджета.
Формирование диалога редактирования свойств библиотеки.
Формирование диалога редактирования свойств виджета.
Формирование графического редактора кадров и основы графического редактирования элементов конечной визуализации (примитивов).
В результате проделанной работы созданы модули модели данных UI.VCAEngine и представления UI.Vision. На данном этапе модулями реализуются механизмы формирования элементов пользовательского интерфейса. На следующий этапе данные элементы будут использованы для формирования цельных интерфейсов визуализации и управления.
Рассмотрим по пунктам результаты реализации данного этапа:
Реализация основы архитектуры "Модель данных"-"Представление"
В соответствии со статической диаграммой классов (рис.4.11.1) и общими требованиями были реализованы модули "UI.VCAEngine" и "UI.Vision" для системы OpenSCADA. Модуль "UI.VCAEngine" реализует модель данных СВУ и является источником для последующего представления этих данных различными механизмами визуализации. Модуль "UI.Vision" реализует способ представления данных, основанный на библиотеке Qt версии 4 фирмы Trolltech.
Связь между модулем модели данных и представления организована посредством прямых вызовов (сильные связи). Такой способ связи выбран для предварительного абстрагирования от особенностей взаимодействия и концентрации на основных задачах реализации. В последствии планируется унификация и построение этих связей посредством интерфейса управления системой OpenSCADA (слабые связи). В результате будет достигнута возможность разнесения модели данных и представления с возможностью одновременного обслуживания различных механизмов представления одной моделью данных СВУ. Кроме того, можно будет оценить степень влияния типа связи на производительность СВУ.
Реализация базовых функций модели данных СВУ, в модуле UI.VCAEngine
Модуль модели данных(движка) СВУ содержит контейнер библиотек виджетов/кадров. Модулем предоставляется предопределённая библиотека базовых виджетов(примитивов) с первичной реализацией собственных свойств и логики обработки этих свойств.
Хранение данных виджетов и библиотек виджетов реализовано в БД, доступных системе OpenSCADA. БД организована по принадлежности данных к библиотеке. Т.е. отдельная библиотека хранится в отдельной группе таблиц одной или разных БД. Перечень библиотек виджетов хранится в индексной таблице библиотек с именем "VCALibs" и структурой "Libs". Экземпляр этой таблицы создаётся в каждой БД где хранятся данные этого модуля с перечнем библиотек, содержащихся в конкретно взятой БД. В состав таблиц, принадлежащих библиотеке виджетов, входят следующие:
Для управления библиотеками виджетов и отдельными виджетами были написаны сценарии конфигурации на языке интерфейса управления OpenSCADA. На данный момент эти сценарии призваны выполнять только функции централизованной конфигурации элементов движка СВУ, однако, в последствии их планируется расширить и наделить функциями обработки запросов к модели данных от модулей представления с целью организации "слабых связей" между "Моделью данных" и "Представлением".
Основой практически всех элементов движка стал объект абстрактного элемента визуализации VCA::Widget. На своём, абстрактном, уровне объект наделён следующими свойствами:
"Использующего" наследования — механизм наследования отдельных свойств другого экземпляра объекта. Используется для организации механизма вторичного использования, переопределения и доопределения элементов визуализации.
Хранение свойств(атрибутов) виджетов с механизмами "использующего" наследования значений. Механизм "использующего" наследования выполняет наследования значений свойств с самого корневого элемента и до верхнего, с возможностью переопределения значений на каждом из уровней. При этом, в БД хранятся только значения изменённых свойств.
Поддержка режима контейнера. В этом режиме виджет может включать другие(дочерние) виджеты, как библиотека виджетов содержит виджеты. Используется в библиотечных виджетах, которые наследуют свойства примитива-контейнера, например примитив кадра "Box". Также, это свойство планируется использовать в сеансе проекта, для построения иерархического дерева виджетов (примитивов) при формирование конечного образа визуализации кадров.
Поддержка режима простой связи. Данный режим используется для вложенных виджетов библиотеки. Особенностью этого режима является то, что он не наследует свойства контейнера, а значит не может прямо содержать вложенные виджеты (раздел 4.5).
Содержит процедуру внутренней логики виджета на одном из языков системы OpenSCADA. Логика этой процедуры может использоваться для организации взаимодействия вложенных виджетов и контейнера друг с другом, формируя требуемое поведение.
Предоставление доступа к ресурсам, mime-данным, с учётом иерархии "использующего" наследования.
Для представления библиотеки виджетов реализован класс VCA::WdgLib, основными функциями которого является содержание библиотечных виджетов, хранение и загрузка их с БД, предоставление доступа к ресурсам (Mime-данные), а также контроль доступа.
Специально для включения в библиотеку виджетов был создан класс библиотечного виджета VCA::LWidget, который основан на классе абстрактного виджета VCA::Widget и предоставляет дополнительные функции: хранения данных виджета в таблицах библиотеки, переопределения доступа к ресурсам на таблицу с mime-данными библиотеки и хранение вложенного контейнерного виджета VCA::CWidget.
В свою очередь класс контейнерного виджета VCA::CWidget предоставляет функции: хранения данных контейнерного виджета в таблицах библиотеки, переопределения доступа к ресурсам на таблицу с mime-данными библиотеки, а также принудительный режим простой ссылки для всех контейнерных виджетов.
На основе класса библиотечного виджета VCA::LWidget был сформирован абстрактный класс терминального виджета VCA::PrWidget. А уже на его основе сформированы реализации примитивов базовых виджетов, которые и формируют библиотеку базовых виджетов, создаваемую модулем при инициализации. Значения свойств базовых виджетов также могут сохраняться в БД (таблицы библиотеки виджетов), формируя нужные шаблоны. Кроме того, базовая библиотека примитивов может доопределяться расширенными примитивами из модулей интерфейсов представления, которым базовых недостаточно. Но в этом случае нужно учитывать, что подобные действие — путь к несовместимости между модулями интерфейсов представления!
Реализация базовых функций среды разработки пользовательского интерфейса в модуле представления UI.Vision
Среда разработки пользовательских интерфейсов модуля основана на MDI(Multi Document Interface) интерфейсе. Данный подход позволяет одновременно редактировать несколько кадров различных размеров. Использованы следующие механизмы управления разработкой: панели инструментов, пункты меню и контекстное меню. Большинство действий дублируются в разных механизмах, что позволяет быстро найти инструмент предпочитаемым способом. Навигационные интерфейсы реализованы присоединяемыми окнами. Конфигурация панелей инструментов и присоединяемых окон сохраняется при выходе и восстанавливается при старте, что позволяет настраивать интерфейс под себя.
Одним из элементом пользовательского интерфейса, реализованным как присоединяемое окно, является навигатор библиотек виджетов. С помощью навигатора можно быстро найти нужный виджет или библиотеку и проделать над ними необходимые операции. Реализованы операции: добавления, удаления, настройки виджетов и библиотек, а также визуального редактирования виджетов.
Для удобного управления свойствами виджетов/кадров реализован инспектор атрибутов(свойств) виджетов. Инспектор атрибутов реализован как присоединяемое окно, которое активируется при выборе кадра или виджета. Окно инспектора атрибутов можно удобно расположить на виду, пришвартовав к одной из сторон рабочего окна. Инспектором атрибутов реализована поддержка групповой конфигурации нескольких виджетов, а также группирование однотипных свойств.
Для визуального редактирования кадров реализована первичная поддержка редактирования виджетов и кадров. Уже сейчас редактор позволяет редактировать кадры, основанные на примитиве "Box", и полноценно отображать примитив текстового поля "Text". В редакторе кадров реализованы функции:
выделение виджета и группы виджетов на кадре;
перетаскивание выделенных виджетов по кадру;
изменение размеров выделенных виджетов на кадре;
редактирование свойств выделенных виджетов;
выравнивание и управление уровнями отображения выделенных виджетов.
Вид окна разработки приведён на рис. 6.1.1, где можно видеть: панели инструментов, навигатор виджетов, инспектор атрибутов, окно редактирования кадра и строка статуса.
Рис.6.1.1 Окно разработки модуля UI.Vision
Для настройки объектов виджетов и их библиотек разработаны два диалога, диалог настройки виджета (рис.6.1.2) и диалог настройки библиотеки виджетов (рис.6.1.3). Диалог настройки библиотеки позволяет установить основные свойства и поместить mime-данные в БД, для последующего использования в виджетах библиотеки. Диалог настройки виджета позволяет установить: основные свойства виджета, индивидуально установить значения атрибутов и сконфигурировать внутреннюю процедуру вычислений виджета с дополнительными (пользовательскими) свойствами.
Рис.6.1.2 Диалог настройки библиотеки виджетов.
Рис.6.1.3 Диалог настройки виджета.
Action source page doesn't exist yet(/Doc / VCA / part 6 / part 2)
6.3 Сеансы исполнения проектов
Целями данного этапа является:
Реализация сеансов исполнения проектов на уровне модели данных СВУ в модуле UI.VCAEngine:
Формирование иерархического дерева виджетов конечной визуализации на основе проекта, для которого открывается сеанс.
Формирование кадров значений для процедур обсчёта виджетов конечной визуализации.
Обработка ссылок на параметры источников данных OpenSCADA.
Реализация иерархического обсчёта процедур и обновления ссылок виджетов.
Формирование механизма прохождения и обработки событий по иерархическому дереву.
Реализация визуализации сеансов проектов в модуле представления UI.Vision(Qt), как полноценного пользовательского интерфейса с элементами визуализации динамики, истории и управления:
Формирование окна исполнения проекта (Исполнение).
Визуализация кадров проекта в режиме "Исполнения" с периодическим обновлением содержимого.
Реализация передачи и обработки событий.
Реализация механизма переключения/открытия/замещения/навигации по страницам проекта с учётом сценариев обработки.
На данном этапе был добавлен механизм исполнения проекта в сеансах модели данных модуля VCAEngine, а также визуализация сеанса проекта, режим "Исполнение", в модуле визуализации на библиотеке Qt Vision с элементами обновления данных и интерактивного взаимодействия с пользователем.
Формирование иерархического дерева виджетов конечной визуализации на основе проекта для которого открывается сеанс.
В соответствии с рис.4.11.1 и разделом 4.5 объекты сеанса проекта наследуются от абстрактного объекта Widget и используют соответствующие объекты проекта. Так, сеанс Session использует проект Project и формирует развёрнутое дерево на основе него. Страница проекта Page прямо используется страницей сеанса SessPage. Остальные объекты SessWdg разворачиваются в соответствии с иерархией элементов страницы (раздел 4.5).
В дополнение к стандартным свойствам абстрактного виджета Widget элементы страницы и сами страницы, сеанса получают свойства хранения кадра значений вычислительной процедуры, обсчёта процедур и механизм обработки событий. Страницы сеанса, в дополнение ко всему, содержат контейнер следующих по иерархии страниц. Сеанс в целом обсчитывается с указанной периодичностью и в последовательности:
Такая политика позволяет обходить страницы в соответствии с иерархией, а событиям в виджетах всплывать наверх за одну итерацию.
В сеансе реализована поддержка специальных свойств страниц:
Контейнер — страница является контейнером для нижележащих страниц. Шаблон — страница является шаблоном для нижележащих страниц. Пусто — пустая неактивная страница, это свойство используется совместно со свойством Контейнер для организации логических контейнеров.
На основе этих свойств реализованы следующие типы страниц:
Стандарт — стандартная страница (не установлено ни одно из свойств). Является полноценной конечной страницей. Контейнер — полноценная страница со свойством контейнера (Контейнер). Логический контейнер — логический контейнер, фактически не являющийся страницей (Контейнер|Пусто). Выполняет роль промежуточного и группирующего элемента в дереве страниц. Шаблон — страница-шаблон (Шаблон). Чистая шаблонная страница используется для описания общих свойств и доопределения их в частном порядке во вложенных страницах. Контейнер и шаблон — страница шаблон и контейнер (Шаблон|Контейнер). Совмещает функции шаблона и контейнера.
Формирование кадров значений для процедур обсчёта виджетов конечной визуализации.
В разделе выше мы уже отмечали, что виджет сеанса содержит кадр значений процедуры обсчёта. Этот кадр инициируется и используется в случае наличия процедуры обсчёта. В момент инициализации создаётся перечень параметров процедуры и выполняется компиляция процедуры с этими параметрами в модуле, реализующем выбранный язык программирования, и закодированным полным именем виджета. Скомпилированная функция подключается к кадру значений процедуры обсчёта. Далее выполняется вычисление с периодичностью сеанса.
Вычисление и обработка виджета в целом выполняется в следующей последовательности:
выбирается события, доступные на момент вычисления, из атрибута "event" виджета;
события загружаются в параметр "event" кадра вычисления;
загружаются значения по входным связям в кадр вычисления;
загружаются значения специальных переменных в кадр вычисления (f_frq, f_start и f_stop);
загружаются значения выбранных параметров виджета в кадр вычисления;
вычисление;
выгрузка значений кадра вычисления в выбранные параметры виджета;
выгрузка значений кадра вычисления по выходным связям;
выгрузка события из параметра "event" кадра вычисления;
обработка событий и передача необработанных на уровень выше.
Обработка ссылок на параметры источников данных OpenSCADA.
При исполнении виджета сеанса необходимо выполнение обработки ссылок. На данный момент подключение по ссылкам выполняется в момент вычисления, что является небыстрой операцией. Реализация обработки ссылок будет пересмотрена и оптимизирована в дальнейшем.
Заложена поддержка следующих типов ссылок:
Значение константы ("V"). Переменная для определения в момент конфигурации страницы в проекте.
Атрибут параметра подсистемы "Сбор данных" ("P"). Механизм доступа к значениям параметра подсистемы "Сбор данных" системы OpenSCADA.
Атрибут вложенного виджета ("W"). Внутренняя прямая связь между вложенными виджетами.
Формирование окна исполнения проекта (Исполнение).
На стороне визуализации (модуль Vision) для визуализации процесса исполнения проекта реализован объект VisRun. При запуске он шлёт запрос на создание и инициализацию сессии. Далее выполняется запрос на перечень открытых страниц. Исходя из информации об открытых страницах VisRun и их связности, формируется результирующий интерфейс. На рис. 6.3 приведён пример классического SCADA интерфейса с объектами сигнализации, где главное окно содержит страницу внутри, которая замещается по нажатию на кнопки объектов сигнализации и листания.
Рис.6.3 Окно визуализации исполнения проекта. Режим "RunTime".
Визуализация кадров проекта в режиме "Исполнение" с периодическим обновлением содержимого.
Реализовано обновление содержимого открытых страниц интерфейса визуализации с периодичностью исполнения сеанса проекта. В процессе обновления выполняется:
запрос списка открытых страниц у модели и проверка соответствия реально открытых страниц этому списку;
запрос изменённых данных по каждой странице и её виджету;
обновление содержимого страниц и их виджетов в соответствии с полученными измененными данными.
По закрытию окна "Исполнения" производится закрытие сеанса проекта в модели данных. В дальнейшем будет реализована возможность подключения к ранее открытому сеансу и отключение от сеанса, без его закрытия.
Механизм запроса только изменённых данных основан на абсолютном счётчике исполнения сеанса. При внесении реальных изменений в атрибуты виджетов выполняется запоминание значения этого счётчика, что и позволяет идентифицировать изменённые атрибуты. Такой подход позволяет повысить производительность и уменьшить нагрузку на трафик в случае доступа к модели через сеть.
Реализация передачи и обработки событий.
Визуализатор сеанса ("RunTime"), в виду своего непосредственного контакта с пользователем, собирает различные события. Часть событий обрабатывается образами базовых виджетов (Text, Box, Document и т.д.), в результате чего могут формироваться другие события. Другая часть прямо передаётся в модель данных, где они и обрабатываются.
В модель данных события передаются сразу после получения, где они собираются в атрибуте виджета "event" до момента следующей итерации исполнения сеанса. Далее, в процессе обсчёта сеанса, события извлекаются из атрибута "event" и обрабатываются в процедуре виджета или в соответствии со сценарием в атрибуте "evProc". Необработанные событие поднимаются к вышестоящему виджету модели.
Реализация механизма переключения/открытия/замещения/навигации по страницам проекта с учётом сценариев обработки.
Переключение, открытие, замещение и навигация по страницам реализовано на основе обработки событий по сценарию, в атрибуте активного виджета "evProc". Сценарий этого атрибута записывается в виде списка команд с синтаксисом: {event}:{srcWdg}:{com}:{prm}, детали в разделе 4.7 и разделе 4.4.
6.4 Проектирование и реализация примитивов отображения
На данном этапе планируется реализация моделей данных UI.VCAEngine и образов визуализатора Vision, WebVision для всех базовых элементов: "ElFigure", "FormEl", "Text", "Media", "Diagram", "Protocol", "Document", "Function", "Box", "Link".
6.4.1 Примитив элементарная фигура (ElFigure)
Реализацию на стороне модели данных (UI.VCAEngine) описанно в этом-же документа, раздел 4.12.
Реализована поддержка элементарных фигур: линии, эллиптической дуги, кривой Безье и заливка замкнутых контуров цветом и/или изображением. Для элементарных фигур реализованы следующие операции:
создание/удаление фигур;
копирование фигур;
перемещение и изменение размеров фигур с помощью мыши и клавиатуры;
возможность связывать элементарные фигуры друг с другом, получая более сложные, для которых доступны все свойства исходных элементарных фигур;
возможность одновременного перемещения нескольких фигур;
генерация событий клавиш мыши в момент клика мышью на залитые контура;
масштабирование;
поворот;
отражение, частично.
На рисунке представлена часть экрана с кадром, содержащим элементарные фигуры.
Фигуры, лежащие в основе данного виджета, содержат точки(начальная и конечная), которые могут стыковаться с соответствующими точками других фигур, и точки, с помощью которых изменяется геометрия фигуры.
Добавить фигуру можно с помощью мыши:
Выбрать желаемую фигуру из контекстного меню.
Задать с помощью левой кнопки мыши начальную и конечную точки (для линии при удерживании клавиши SHIFT происходит ортогональная её отрисовка).
Удалить фигуру(ы) можно путём нажатия кнопки "Del", имея выделенную(ые) фигуру(ы).
Скопировать фигуру(ы) можно путём нажатия комбинации клавиш "Ctrl" + "C", имея выделенную(ые) фигуру(ы).
Передвинуть/изменить габариты фигуры можно с помощью мыши или клавиатуры:
Выделить фигуру, клацнув по ней левой кнопкой мыши.
Перетащить (с помощью мыши или управляющих клавиш) фигуру или одну из её контрольных точек в желаемое место и отпустить кнопку мыши(клавишу).
Существует возможность перемещать несколько выделенных фигур, выбранных при помощи удержания "Ctrl"(эта опция работает при отключенной кнопке Connetcions(Привязки)) либо при помощи выделения мышкой.
Связать фигуры друг с другом можно следующим образом:
Нажать кнопку Connections.
Выделить одну из фигур и переместить её начальную или конечную точку к желаемой начальной или конечной точке другой фигуры так, чтобы она попадала в появившуюся окружность. Связанные фигуры перемещаются также как и отдельные, общая точка перемещается для всех фигур, к которым она относится(приоритет отдается дуге, две дуги не могут быть соединены непосредственно друг с другом).
Залить замкнутый контур из фигур можно следующим образом:
Нажать кнопку Connections.
Создать замкнутый контур.
Два раза клацнуть мышкой внутри его.
Удалить заливку замкнутого контура можно из контекстного меню, клацнув правой кнопкой манипулятора "мышь" по заливке; разорвав контур заливки; двойным кликом левой кнопки манипулятора "мышь" по уже имеющемуся залитому контуру.
Поворот фигуры осуществляется вокруг центра виджета.
Реализована поддержка элементарных фигур: линии, эллиптической дуги, кривой Безье и заливка замкнутых контуров цветом и изображением со свойствами:
Формирование произвольных изображений с трёх элементарных фигур и заполнений замкнутых пространств цветом или изображением.
Возможность определения свойств фигур как в целом так и отдельно для каждой: ширина, цвет и стиль линии, ширина и цвет бордюра линии, цвет и изображение заполнения.
Произвольный поворот общей фигуры около её центра.
Поддержка пользовательских атрибутов динамических точек, ширин, цветов, стилей и изображений.
Формирование сообщений по действиям манипулятором мыши в замкнутом пространстве и в целом.
На рисунке представлена часть экрана с кадром, содержащим вышеперечисленные элементарные фигуры.
6.4.2 Примитив элементов формы (FormEl)
Реализацию на стороне модели данных (UI.VCAEngine) описанно в этом-же документа, раздел 4.12.
Реализованы режимы: "Включен" и "Активен", а также передача изменений и событий в модель данных СВУ (движок). Для всех реализованных представлений поддерживается активный режим, т.е. элементы могут быть использованы для создания форм пользовательского ввода.
На рисунке представлена часть экрана с кадром, содержащим вышеперечисленные элементы формы.
6.4.3 Примитив текста (Text)
Реализацию на стороне модели данных (UI.VCAEngine) описанно в этом-же документа, раздел 4.12.
Реализована поддержка элемента построения диаграмм для типов "График", "Спектр" и "XY" со свойствами:
Общие свойства типов диаграммы "График", "Спектр" и "XY":
возможность выбора архиватора, буфера архива или всех данных при работе с архивными данными;
адаптация графика параметра к реальным значениям данных путём подстройки шкалы, в случае отсутствия прямо указанного диапазона значений;
управление масштабом шкалы значений путём увеличения/уменьшения и смещения;
широкий диапазон масштабирования и адаптации шкалы времени с автоматическим приведением запрашиваемых данных к качеству достаточному для отображения, или нужному для экспорта — указанием предельного количества измерений в пикселе;
отображение размерной сетки и маркеров по горизонтали и вертикали с адаптацией к диапазону отображения;
следящий режим за текущим временем путём периодического обновления и смещения времени диаграммы к текущему времени (времени последних данных в буфере архива);
горизонтальный слайдинг/скольжение с помощью мышь;
масштабирование участка обрамлённого окном, мышью.
Свойства типа диаграммы "График":
построение графиков до 100 параметров на одной диаграмме в процентной шкале и возможностью отображения в собственной шкале выбранных параметров;
построение графика для: текущих, архивных и пользовательских данных;
формирования промежуточного буфера отображения для текущих значений;
поддержка активного режима с курсором и получением значений под курсором;
возможность построения графиков как в линейной, так и логарифмической шкале значений.
Свойства типа диаграммы "Спектр":
построение графиков частотного спектра параметров до 100 на одной диаграмме в процентной шкале и возможностью отображения в собственной шкале выбранных параметров;
построение графика для: архивных и пользовательских данных;
поддержка активного режима с курсором и получением значений под курсором;
Свойства типа диаграммы "XY":
построение XY графиков параметров до 50 на одной диаграмме в процентной шкале и возможностью отображения в собственной шкале выбранных параметров;
построение графика для: текущих, архивных и пользовательских данных;
формирования промежуточного буфера отображения для текущих значений;
параметры распределяются парами на график, где чётные по оси Y (0,2,4...) и нечётные по оси X (1,3,5...);
возможность построения графиков как в линейной, так и логарифмической шкале значений.
Модулем визуализатора предоставляется и использует ряд специфических атрибутов данного примитива, информация о которых приведена в таблице.
Id
Имя
Назначение
sclWin
Масштабирование участка обрамлённого окном, мышью
Логический тип атрибута, созадаваемый вручную пользователем в случае надобности. Для значения "истина" включается режим масштабирования участка тренда обрамлённого окном с помощью мыши.
На рисунке представлена часть экрана с кадром, содержащим примеры диаграмм: "График", "Спектр" и "XY".
Реализована поддержка элемента построения диаграмм для типов "График", "Спектр" и "XY" со свойствами:
Общие свойства типов диаграммы "График", "Спектр" и "XY":
возможность выбора архиватора, буфера архива или всех данных при работе с архивными данными;
адаптация графика параметра к реальным значениям данных путём подстройки шкалы, в случае отсутствия прямо указанного диапазона значений;
управление масштабом шкалы значений путём увеличения/уменьшения и смещения;
широкий диапазон масштабирования и адаптации шкалы времени с автоматическим приведением запрашиваемых данных к качеству, достаточному для отображения, или нужному для экспорта — указанием предельного количества измерений в пикселе;
отображение размерной сетки и маркеров по горизонтали и вертикали с адаптацией к диапазону отображения;
следящий режим за текущим временем путём периодического обновления и смещения времени диаграммы к текущему времени (времени последних данных в буфере архива).
Свойства типа диаграммы "График":
построение графиков, до 100 параметров на одной диаграмме, в процентной шкале и возможностью отображения в собственной шкале выбранных параметров;
построение графика для: текущих, архивных и пользовательских данных;
формирования промежуточного буфера отображения для текущих значений;
поддержка активного режима с курсором и получением значений под курсором;
возможность построения графиков как в линейной, так и логарифмической шкале значений.
Свойства типа диаграммы "Спектр":
построение графиков частотного спектра параметров, до 100 на одной диаграмме, в процентной шкале и возможностью отображения в собственной шкале выбранных параметров;
построение графика для: архивных и пользовательских данных;
поддержка активного режима с курсором и получением значений под курсором;
Свойства типа диаграммы "XY":
построение XY графиков параметров, до 50 на одной диаграмме, в процентной шкале и возможностью отображения в собственной шкале выбранных параметров;
построение графика для: текущих, архивных и пользовательских данных;
формирования промежуточного буфера отображения для текущих значений;
параметры распределяются парами на график, где чётные по оси Y (0,2,4...) и нечётные по оси X (1,3,5...);
возможность построения графиков как в линейной, так и логарифмической шкале значений.
На рисунке представлена часть экрана с кадром, содержащим примеры диаграмм: "График", "Спектр" и "XY".
6.4.6 Примитив формирования протокола (Protocol)
Реализацию на стороне модели данных (UI.VCAEngine) описанно в этом-же документа, раздел 4.12.
Реализована поддержка элемента формирования отчётной документации со свойствами:
Гибкое формирование структуры документа на основе языка гипертекстовой разметки. Это предоставляет поддержку широких возможностей форматирования документов.
Формирование документов по команде или по расписанию. Необходимо для формирования отчётной документации в архив с последующим просмотром архива.
Формирование документа в режиме реального времени. Для формирования документов полностью динамически и на основе архивов за указанное время.
Использование атрибутов виджета для передачи значений и адресов на архивы в документ. Позволяет использовать виджет документа как шаблон при формировании отчётов с другими входными данными.
В основе любого документа лежит XHTML-шаблон. XHTML-шаблон это тег "body" WEB-страницы, содержащий статику документа в стандарте XHTML 1.0, и элементы исполняемых инструкций на одном из языков пользовательского программирования OpenSCADA в виде <?dp {procedure} ?>. Результирующий документ формируется путём исполнения процедур и вставки их результата в документ.
Источником значений исполняемых инструкций являются атрибуты виджета этого примитива, а также все механизмы языка пользовательского программирования. Атрибуты могут добавляться пользователем и линковаться на реальные атрибуты параметров или-же являться автономными, значения которых будут формироваться в скрипте виджета. В случае со слинкованными атрибутами могут извлекаться значения из истории, архива.
На рисунке представлен кадр, содержащий пример документа.
Реализована поддержка элемента формирования отчётной документации со свойствами:
Гибкое формирование структуры документа на основе языка гипертекстовой разметки. Это предоставляет поддержку широких возможностей форматирования документов.
Формирование документов по команде или по расписанию. Необходимо для формирования отчётной документации в архив с последующим просмотром архива.
Формирование документа в режиме реального времени. Для формирования документов полностью динамически и на основе архивов за указанное время.
Использование атрибутов виджета для передачи в документ значений и адресов на архивы. Позволяет использовать виджет документа как шаблон при формировании отчётов с другими входными данными.
В основе любого документа лежит XHTML-шаблон. XHTML-шаблон это тег "body" WEB-страницы, содержащий статику документа в стандарте XHTML 1.0, и элементы исполняемых инструкций на одном из языков пользовательского программирования OpenSCADA в виде <?dp {procedure} ?>. Результирующий документ формируется путём исполнения процедур и вставки их результата в документ.
Источником значений исполняемых инструкций являются атрибуты виджета этого примитива, а также все механизмы языка пользовательского программирования. Атрибуты могут добавляться пользователем и линковаться на реальные атрибуты параметров или-же являться автономными, значения которых будут формироваться в скрипте виджета. В случае со слинкованными атрибутами могут извлекаться значения из истории, архива.
На рисунке представлен кадр, содержащий пример документа.
6.4.8 Примитив контейнера (Box)
Реализацию на стороне модели данных (UI.VCAEngine) описанно в этом-же документа, раздел 4.12.
Реализована поддержка примитива контейнера, по совместительству выполняющего роль страниц проектов. Данный примитив является единственным элементом-контейнером, который может включать в себя ссылки на кадры из библиотеки, формируя тем самым пользовательские элементы нужной конфигурации. Примитив реализует предусмотренные проектом свойства. Перечислим по пунктам свойства данного примитива:
Контейнер — Позволяет формировать нужные объекты путём группировки базовых в рамках данного примитива.
Страница — Элементы, построенные на данном примитиве, могут выполнять роль страницы пользовательского интерфейса.
Контейнер страниц — Свойство замещения собственного содержимого другой страницей в процессе исполнения. Используется для формирования фреймов на страницах пользовательского интерфейса. Например, главная страница традиционной SCADA системы с объектами сигнализации строится именно таким образом.
Фон — Поддерживает возможность указания фона в виде цвета или изображения.
Бордюр — Поддерживает возможность изображения бордюра с указанным цветом, толщиной и стилем.
Реализована поддержка примитива контейнера, по совместительству выполняющего роль страниц проектов. Данный примитив является единственным элементом/контейнером, который может включать в себя ссылки на кадры из библиотеки, формируя тем самым пользовательские элементы нужной конфигурации. Примитив реализует предусмотренные проектом свойства. Перечислим по пунктам свойства данного примитива:
Контейнер — Позволяет формировать нужные объекты путём группировки базовых в рамках данного примитива.
Страница — Элементы, построенные на данном примитиве, могут выполнять роль страницы пользовательского интерфейса.
Контейнер страниц — Свойство замещения собственного содержимого другой страницей в процессе исполнения. Используется для формирования фреймов на страницах пользовательского интерфейса. Например, главная страница традиционной SCADA системы с объектами сигнализации строится именно таким образом.
Фон — Поддерживает возможность указания фона в виде цвета или изображения.
Бордюр — Поддерживает возможность изображения бордюра с указанным цветом, толщиной и стилем.
6.5 Темы-стили отображения
Реализацию на стороне модели данных (UI.VCAEngine) описанно в этом-же документа, раздел 4.6.
Известно, что человек может иметь индивидуальные особенности в восприятии графической информации. Если эти особенности не учитывать то можно получить неприятие и отторжение пользователя к интерфейсу ВУ. Такое неприятие и отторжение может привести к фатальным ошибкам при управлении ТП, а также травмировать человека постоянной работой с таким интерфейсом. В SCADA системах приняты соглашения, которые регламентируют требования по созданию унифицированного интерфейса ВУ, нормально воспринимаемого большинством людей. При этом практически отсутствует учёт особенностей людей с некоторыми отклонениями.
С целью учесть это обстоятельство и предоставить возможность централизованно и просто изменять визуальные свойства интерфейса проектом предусматривается реализация менеджера стилей интерфейса визуализации.
Пользователем может быть создано множество стилей, каждый из которых будет хранить цветовые, шрифтовые и другие свойства элементов кадра. Простая смена стиля позволит быстро преобразить интерфейс ВУ, а возможность назначения индивидуальной стиля для пользователя позволит учесть его индивидуальные особенности.
Для реализации этой возможности, при создании кадров необходимо для свойств цвета, шрифта и других установить параметр «Конфигурация» (таблицы во вкладке «Обработка») в значение «Из стиля». А в параметре «Конфигурационный шаблон» указать идентификатор поля стиля. Далее это поле автоматически появится в менеджере стилей и его можно будет там менять. Менеджер стилей доступен на странице конфигурации проекта во вкладке «Стили» (рисунок ниже). На этой вкладке можно создавать новые стили, удалять старые, изменять поля стиля и удалять ненужные.
В целом стили доступны, начиная с уровня проектов. На уровне библиотек виджетов можно только определять поля стилей у виджетов. На уровне проекта при выборе стиля включается работа со стилями, что предполагает доступ к полям стилей вместо непосредственных значений атрибутов. Фактически это означает, что при чтении или записи атрибута виджета указанные операции будут осуществляться с соответствующим полем выбранного стиля.
При запуске проекта на исполнения будет использован установленный в проекте стиль. В последствии пользователь может выбрать стиль из перечня доступных. Выбранный пользователем стиль будет сохранён и использован при следующем запуске проекта.
В виду отсутствия инструмента разработки пользовательских интерфейсов он не нуждается в специфической реализации стилей.
6.6 Карты событий — В планах
Реализация данного пункта пока отсутствует и будет осуществлена по надобности.
6.7 Реализация слабых связей между моделью данных и представлением
В процессе реализации данного этапа планируется написание дополнительных сценариев интерфейса управления для покрытия задачи организации слабых связей между моделью (VCAEngine) и визуализатором (Vision). На стороне визуализатора (Vision) планируется полный переход на слабые связи с моделью данных VCA.
На данном этапе были созданы недостающие сценарии интерфейса управления и выполнен полный перевод модуля визуализации (Vision) на слабые связи. В результате этой операции удалось достичь значительной унификации визуализатора и повысить его стабильность. Вопрос производительности остался открытым и будет рассмотрен позже.
6.8 Web-интерфейс визуализации сеанса проекта
Реализация выполнена в модуле UI.WebVision и в объёме исполнения основных примитивов и их видов, для проектов разработанных в UI.Vision.
7 Оптимизация
В процессе реализации неоднократно принимались меры по оптимизации, направленные на повышений производительности различных узлов СВУ и взаимодействия между ними. В данном разделе размещаются отчёты, соображения и планы таких мер.
23.08.2007 Основание: Наиболее ответственным, в вопросе производительности, является взаимодействие между моделью данный СВУ и визуализаторами, а также циклы обслуживания интерактивного взаимодействия и обновления. Данный вопрос приобретает ещё большее значение в свете того, что для взаимодействия визуализаторов с моделью данных СВУ используются слабые связи, а именно события основанные на XML-запросах, которые потенциально медленнее прямых связей. Однако возможность последующего перенаправления потока данных взаимодействия на сетевые транспортные протоколы, а также более высокая надёжность такого взаимодействия оправдывают усилия по оптимизации этого взаимодействия. Условия: Основными объектами оптимизации являются: цикл обновления визуализатора "Vision" и цикл обсчёта сеанса на стороне модели данных СВУ. Замер временных интервалов выполнялся на вычислительной машине Athlon 64 3000+, с пониженной до 800МГц частотой процессора и тестовой странице.
Процесс
Исходное время (мс)
Результирующее время (мс)
Комментарии
Цикл обновления визуализатора "Vision"
Полный секундный цикл обновления
43
10
Обработка списка открытых окон
2.3
2.2
Незначительное улучшение за счёт выделение функции запроса перечня открытых окон в сервисные функции быстрого доступа.
Обновление открытых страниц
41
9
Запрос атрибутов
24
7
Значительно сократилось за счёт введения общего счетчика модификации виджета и вынос запроса на обновления списка не пользовательских атрибутов в цикл обсчёта сеанса.
Вызов функции setAttr(), для полученных атрибутов
19
2
Значительно сократилось за счёт пересмотра и доработки примитива "ElText".
Цикл обсчета сеанса пользовательского интерфейса модели данных СВУ.
Полный цикл вычисления
53
21
Значительно сократилось, за счёт пересмотра последовательности вычисления виджета и уменьшения периодичности обновления списка: слинкованых атрибутов и активных дочерних виджетов.
11.07.2008 Основание: Для оценки потенциальных возможностей по производительности среды визуализации, а также с целью повышения производительности и возможности создания мнемосхем с большим количеством виджетов была проведена оптимизация визуализации виджетов, как в режиме разработки, так и в режиме исполнения. Условия: Замер временных интервалов выполнялся на вычислительной машине Pentium 4 3200.
Процесс
Исходное время (мс)
Результирующее время (мс)
Комментарии
160 эллиптических дуг по одной в каждом виджете с радиусами по 20 пискселов и толщиной линии, равной 1
Загрузка: 497; Инициализация, отрисовка: 355
Загрузка: 333; Инициализация, отрисовка: 273
160 эллиптических дуг по одной в каждом виджете с радиусами по 20 пискселов и толщиной линии, равной 1 с заливкой в каждой
Загрузка: 492; Инициализация, отрисовка: 1379
Загрузка: 326; Инициализация, отрисовка: 470
160 эллиптических дуг по одной в каждом виджете с радиусами по 20 пискселов и толщиной линии, равной 1 с заливкой в каждой и с масштабом страницы, на которой лежат эти 160 виджетов, равным 0.5 по X и по Y
Загрузка: 495; Инициализация, отрисовка: 1430
Загрузка: 334; Инициализация, отрисовка: 452
Как видно, присутствие масштабных коэффиуиентов, не равных 1, существенно не влияет ни на загрузку, ни на инициализацию и отрисовку.
160 линий по одной в каждом виджете, длиной 40 и тощиной 10 пикселов
Загрузка: 451; Инициализация, отрисовка: 70
Загрузка: 315; Инициализация, отрисовка: 5
160 прямоугольников по одном в каждом виджете, длиной 40, шириной 10 и толщиной линии 1 пиксел с заливкой в каждом
Загрузка: 486; Инициализация, отрисовка: 175
Загрузка: 336; Инициализация, отрисовка: 38
240 линий по 20 в каждом виджете(всего 12 виджетов), толщной 10 и длиной, приблизительно равной 50 пикселов
Загрузка: 58; Инициализация, отрисовка: 53
Загрузка: 30; Инициализация, отрисовка: 8
Время и до и после оптимизации значительно меньше в сравнении с одной линией в одном виджете (всего 160 линий) за счёт уменьшения количества виджетов
240 четырехугольников с заливкой, шириной примерно 15 и длиной примерно 50 пикселов и с толщиной линии в 1 пиксел по 20 в каждом виджете (всего 12 виджетов)