Важным элементом любого интерфейса визуализации является уведомление пользователя про нарушения — сигнализация. Для упрощения восприятия, а также в виду тесной связности визуализации и уведомления (как правило уведомление дополняет визуализацию) решено интегрировать интерфейс уведомления в интерфейс визуализации. Для этого во всех виджетах предусматриваются два дополнительных атрибута (уровня сеанса): "alarm" и "alarmSt". Атрибут "alarm" используется для формирования сигнала виджетом, в соответствии с его логикой, а атрибут "alarmSt" используется для контроля за фактом сигнализации ветви дерева сеанса проекта.
Атрибут "alarm" является строкой и имеет следующий формат: "{lev}|{categ}|{message}|{type}|{tp_arg}"
Где:
Атрибут "alarmSt" является целым числом, которое отражает максимальный уровень сигнала и факт квитации ветви дерева сеанса проекта. Формат числа имеет следующий вид:
Формирование сигнала и получение его визуализатором.
Формирование сигнала производится самим виджетом, путём установки собственного атрибута "alarm" нужным образом и в соответствии с ним устанавливается атрибут "alarmSt" текущего и вышестоящих виджетов. Визуализаторы получают уведомление о сигнале с помощью стандартного механизма уведомления об изменении атрибутов виджетов.
Такой механизм предоставляет возможность формировать интерфейсы сигнализации как на уровне подсистемы "Сбор данных", так и прямо на уровне представления.
Учитывая то, что обработка условий сигнализации осуществляется в виджетах, страницы содержащие объекты сигнализации должны исполняться в фоне, не зависимо от открытости их на данный момент. Это осуществляется путём установки флага исполнения страницы в фоне.
Хотя механизм сигнализации и построен в среде визуализации возможность формирования невизуальных элементов сигнализации остаётся, например путём создания страницы которая никогда не будет открываться.
Квитация
Квитация производится путём указания корня ветви виджетов и типов уведомления. Это позволяет реализовать квитацию на стороне визуализатора как по группам, например по объектам сигнализации, так и индивидуально по объектам. При этом можно независимо квитировать разные типы сигнализаций. Установка квитации производится простой модификацией атрибута "alarmSt".
Пример скрипта для работы с сигналами приведён ниже:
//Выделение факта наличия сигнализаций разных способов уведомления cvt_light_en = alarmSt&0x100; cvt_alarm_en = alarmSt&0x200; cvt_sound_en = alarmSt&0x400; //Выделение факта наличия несквитированных сигнализаций разных способов уведомления cvt_light_active = alarmSt&0x10000; cvt_alarm_active = alarmSt&0x20000; cvt_sound_active = alarmSt&0x40000; //Обработка событий кнопок квитации и квитация разных способов уведомлений ev_rez = ""; for(off = 0; true; ) { sval = event.parse(0,"\n",off); if(!sval.length) break; else if(sval == "ws_BtPress:/cvt_light") alarmSt = 0x1000001; else if(sval == "ws_BtPress:/cvt_alarm") alarmSt = 0x1000002; else if(sval == "ws_BtPress:/cvt_sound") alarmSt = 0x1000004; else ev_rez += sval+"\n"; } event = ev_rez;