Важным элементом любого интерфейса визуализации является уведомление пользователя про нарушения — сигнализация. Для упрощения восприятия, а также в виду тесной связности визуализации и уведомления (как правило уведомление дополняет визуализацию) решено интегрировать интерфейс уведомления в интерфейс визуализации. Для этого во всех виджетах предусматриваются два дополнительных атрибута (уровня сеанса): "alarm" и "alarmSt". Атрибут "alarm" используется для формирования сигнала виджетом в соответствии с его логикой, а атрибут "alarmSt" используется для контроля за фактом сигнализации ветви дерева сеанса проекта.
Атрибут "alarm" является строкой и имеет следующий формат: "{lev}|{categ}|{message}|{type}|{tp_arg}"
Где:
- lev — уровень сигнализации: число от 0 до 255;
- categ — категория сигнала: параметр подсистемы сбора, объект, путь или комбинация;
- message — сообщение сигнализации;
- type — типы уведомления, указываются в виде целого числа (0...7), содержащего флаги способов уведомлений; типовые способы уведомления:
- 0x01 — визуальная;
- 0x02 — гудок, часто производится через PC-speaker;
- 0x04 — звуковой сигнал из файла звука или синтез речи; если в 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 =
- Синтез речи индивидуального сообщения для источника, на стороне визуализатора:
- alarm = "10|Prm|Текстовое сообщение для синтеза речи|0x04"
- notify2 =
- Подготовка звукового файла, одного общего, и его проигрывание на стороне визуализатора или сервера визуализации:
- alarm = "10|Prm||0x04"
- notify2 =
- Подготовка индивидуального для источника уведомления звукового файла через синтез речи, на стороне визуализатора или сервера визуализации:
- alarm = "10|Prm|Текстовое сообщение для синтеза речи|0x04"
- notify2 =