[Alarms][Сигнализация]Есть ли способ формирования алармов без виджетов?
| 1 | 2 | 3 | Дальше | В конец
Автор |
Сообщение |
Сообщение создано: 17. 12. 2011 [21:57]
|
Vandrizm
Игорь М
Создатель темы
Зарегистрирован(а) с: 31.07.2010
Сообщения: 55
|
Например если от устройства приходит несколько десятков сообщений о его состоянии. Причем состояние устройства достаточно только регистрировать.
|
Сообщение создано: 17. 12. 2011 [22:03]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"Vandrizm" wrote:
Например если от устройства приходит несколько десятков сообщений о его состоянии. Причем состояние устройства достаточно только регистрировать.
Читаем тут: http://wiki.oscada.org/Doc/OpisanieProgrammy#h920-1
int message( string cat, int level, string mess ); — формирование системного сообщения <mess> с категорией <cat>, уровнем <level>. Отрицательное значение уровня формирует нарушения (Alarm).
bool alarmSet(string mess, int lev = -5, string prm = "") — установка/снятие нарушения <mess> с уровнем <lev> (отрицательный для установки иначе снятие), для параметра <prm>.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 17. 12. 2011 [22:19]
|
Vandrizm
Игорь М
Создатель темы
Зарегистрирован(а) с: 31.07.2010
Сообщения: 55
|
А как тогда правильно организовать мониторинг значений? Т.е. чтобы не на каждом цикле выполнения ф-ии генерировалось сообщение, а только при смене состояния.
|
Сообщение создано: 17. 12. 2011 [22:28]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"Vandrizm" wrote:
А как тогда правильно организовать мониторинг значений? Т.е. чтобы не на каждом цикле выполнения ф-ии генерировалось сообщение, а только при смене состояния.
По атрибуту ошибки, который устанавливать и проверять текущее значений.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 17. 12. 2011 [22:44]
|
Vandrizm
Игорь М
Создатель темы
Зарегистрирован(а) с: 31.07.2010
Сообщения: 55
|
"roman" wrote:
Читаем тут: http://wiki.oscada.org/Doc/OpisanieProgrammy#h920-1
int message( string cat, int level, string mess ); — формирование системного сообщения <mess> с категорией <cat>, уровнем <level>. Отрицательное значение уровня формирует нарушения (Alarm).
bool alarmSet(string mess, int lev = -5, string prm = "") — установка/снятие нарушения <mess> с уровнем <lev> (отрицательный для установки иначе снятие), для параметра <prm>.
Создал следующую ф-ию:
SYS.message( "sys_msg", -2, "Проверка генерации событий");
и выполнил ее.
По идее должен формироваться уровень нарушения -2. Однако этого не происходит.
Уровень нарушения остается равным 0.
[Сообщение редактировалось 1 раз(а), в последний раз 17.12.2011 в 22:45.]
|
Сообщение создано: 17. 12. 2011 [23:04]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"Vandrizm" wrote:
По идее должен формироваться уровень нарушения -2. Однако этого не происходит.
Не должно. Должно с уровнем 2 и формируется. Отрицательный указывает на фиксацию сообщения в нарушениях, которые по отрицательному уровню и нужно смотреть.
"Vandrizm" wrote:
Уровень нарушения остается равным 0.
Что значит остаётся? Сообщение формируется вновь и для него нет понятия остаться. Для нарушения (отрицательный уровень) возможно.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 10. 05. 2012 [12:53]
|
s60ru
Антон Петров
Зарегистрирован(а) с: 10.05.2012
Сообщения: 141
|
Возвращаясь к теме алармов ....
Необходимо реализовать механизм регистрации алармов, с возможностью присвоения им категорий (1 - аварийный, 2 - предупредительный, 3 - технологический), проигрывания отдельного звукового файла для каждой категории, без виджетов под аларм ?
Поскажите как это половчее сделать средствами OpenSCADA ?
Из QuickStart предполагаю два варианта:
1) на Java-вычислителе списком проверять каждый тег на условие аларма и генерить аларм - вопрос как ? Атрибут alarm есть только у виджетов. Рисовать фоновую страницу с виджетами для 600 алармов очень не хотелось бы. Предполагаю, что с помощью int message( string cat, int level, string mess ); — формирование системного сообщения <mess> с категорией <cat>, уровнем <level> (-7...7). Отрицательное значение уровня формирует нарушения (Alarm). Чем в концепции OpenSCADA отличаются сообщения от алармов ? И в чем разница между функциями int messDebug( string cat, string mess ); int messInfo( string cat, string mess ); int messNote( string cat, string mess ); int messWarning( string cat, string mess ); int messErr( string cat, string mess ); int messCrit( string cat, string mess ); int messAlert( string cat, string mess ); int messEmerg( string cat, string mess ); — формирование системного сообщения <mess> с категорией <cat> и соответствующим уровнем.
2) определить условия генерации аларма в шаблоне параметра , как например в Базовый_Сигн.дискретная и у параметра выбрать этот шаблон. Но из
f_err=(in==alrm_md)?"1:"+alrm_mess:"0";
непонятно :
а) что есть f_err, f_frq, f_start, f_stop и как этим пользоваться ? (как, например, учавствует в вычислениях f_freq)
б) куда будет записываться строка <"1:"+alrm_mess> ?
в) если условие "in==alrm_md" выполняется подряд в течение часа, то сколько будет строк alrm_mess , если эта функция выполняется раз в секунду ?
3) как квитировать (оператор подтверждает, что обратил внимание на аларм) ?
|
Сообщение создано: 10. 05. 2012 [15:43]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"s60ru" wrote:
Необходимо реализовать механизм регистрации алармов, с возможностью присвоения им категорий (1 - аварийный, 2 - предупредительный, 3 - технологический), проигрывания отдельного звукового файла для каждой категории, без виджетов под аларм ?
Для начала Вам нужно разобраться в том, как это вообще делается. Фактически нарушения имеют две стороны:
1) протоколирование и учёт активных нарушений, что делается в подсистеме сообщений с уровнем сообщения -1 и их отображение с помощью примитива "Протокол" или "Документ".
2) оперативное уведомление пользователя и квитация, что делается в интерфейсе визуализации с контекстной привязкой к источнику - как виджету. Уведомление отдельно от виджетов может иметь смысл только если их нет иначе другие варианты я не рассматриваю.
Обе стороны независимы и могут использоваться отдельно, по надобности, или вместе взаимодополняя друг друга.
"s60ru" wrote:
Рисовать фоновую страницу с виджетами для 600 алармов очень не хотелось бы.
Почему фоновую? Или пользователь не должен не слышать не видеть уведомлений, тогда вообще нет смысла в нарушениях. А если будет слышать тогда должен и видеть место!
"s60ru" wrote:
... в чем разница между функциями int messDebug( string cat, string mess ); int messInfo( string cat, string mess ); int messNote( string cat, string mess ); int messWarning( string cat, string mess ); int messErr( string cat, string mess ); int messCrit( string cat, string mess ); int messAlert( string cat, string mess ); int messEmerg( string cat, string mess ); — формирование системного сообщения <mess> с категорией <cat> и соответствующим уровнем.
В этом-же предложении и ответ — читаем до прояснения!
"s60ru" wrote:
а) что есть f_err, f_frq, f_start, f_stop и как этим пользоваться ? (как, например, учавствует в вычислениях f_freq)
б) куда будет записываться строка <"1:"+alrm_mess> ?
Продолжаем читать дальше: http://wiki.oscada.org/Doc/LogicLev#h419-5
"s60ru" wrote:
в) если условие "in==alrm_md" выполняется подряд в течение часа, то сколько будет строк alrm_mess , если эта функция выполняется раз в секунду ?
Где будет? Это значение в атрибут "err" просто раз в секунду пишется и его там обновляет, а если от предыдущего оно не отличается то даже меняться не будет!
"s60ru" wrote:
3) как квитировать (оператор подтверждает, что обратил внимание на аларм) ?
Кнопки для квитации пользователем есть на интерфейсе пользователя и в строке статуса, снизу.
P.S. Не похоже, что Вы Демо БД осмысленно запускали. Если хотите увидеть нарушение в действии, то обратите внимание на параметр /DAQ/LogicLev/experiment/F3, у которого установлены границы нарушений и который размещён на второй, "Тестовой", мнемосхеме первого объекта сигнализации. Если подёргать границы этого параметра или увеличить задание "PC_КРД1", то можно будет лицезреть работу нарушений в виде мигания и синтеза речи, если ru_tts установлен.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 11. 05. 2012 [14:36]
|
s60ru
Антон Петров
Зарегистрирован(а) с: 10.05.2012
Сообщения: 141
|
1) Я так и не понял куда отправится сообщение в выражении
f_err=(in==alrm_md)?"1:"+alrm_mess:"0";
Попробовал на КШ6 - его параметр "Закрытие КШ6" имеет шаблон параметра digAlarm - пооткрывал, позакрывал, ожидал в Архиве увидеть запись с Ур. = 1 и текстом "Клапан закрыт!", но увидел
Fri May 11 15:00:52 2012 803568 OP:root 2 'КШ6'. Команда : Блок управления шарового крана КШ6 : : ЗАКР
Fri May 11 15:00:50 2012 301009 OP:root 2 'КШ6'. Команда : Блок управления шарового крана КШ6 : : ОТКР
Fri May 11 15:00:46 2012 801343 OP:root 2 'КШ6'. Команда : Блок управления шарового крана КШ6 : : ЗАКР
Эти сообщения похоже были сформированы виджетом крана КШ6 ....
Куда ж тогда записывается alm_mess ? И из чего следует, что строка "1: text of alarm" будет распарсена на уровень 1 и сообщение "text of alarm" ?
2) Вариант генерации аларма виджетом подходит для случая, когда в наличии есть все 6 страниц "КМ101", "КМ102" и т.д. и все привязки к параметрам определены на момент рантайма.
Если использовать вариант страницы-шаблона (для нашего случая имеем 6 одинаковых агрегатов КМ, отличающихся номером, можно в странице-шаблоне привязать все "хвосты"-параметры, а "голову" менять динамически в рантайме при вызове нужной мнемосхемы, КМ101.Температура_воды, КМ102.Температура_воды - привязываем .Температура_воды, а префикс КМ101 или КМ102 добавляем динамически в рантайме при вызове мнемосхемы), то полный путь к параметру в лучшем случае определен только для одного агрегата, мнемосхему которого сейчас и отображаем.... Надеюсь понятно объяснил...
3) Где в Документах "Суточный отчет" , "Журнал вмешательств" и т.д. указывается откуда черпать сообщения ?
4) Из чего следует, что в шаблоне документа , например, "Суточный отчет" только строка с
<TR docAMess="2:OP*">
<TD>-----<?dp return Special.FLibSYS.tmFStr(mTime,"%d %m");?></TD>
<TD>-----<?dp return Special.FLibSYS.tmFStr(mTime,"%H:%M:%S");?></TD>
<TD colspan="2">-----<?dp return Special.FLibSYS.strEnc2HTML(Special.FLibSYS.strParse(mVal,0,":"));?></TD>
<TD>-----<?dp return Special.FLibSYS.strParse(mVal,2,":");?></TD>
<TD colspan="2">-----<?dp return Special.FLibSYS.strParse(mVal,3,":");?></TD>
</TR>
будет динамически обрабатываться, создавая новые строки в документе ?
|
Сообщение создано: 11. 05. 2012 [16:03]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"s60ru" wrote:
1) Я так и не понял куда отправится сообщение в выражении
f_err=(in==alrm_md)?"1:"+alrm_mess:"0";
Читаем до прояснения: http://wiki.oscada.org/Doc/LogicLev#h419-5
"s60ru" wrote:
Куда ж тогда записывается alm_mess ? И из чего следует, что строка "1: text of alarm" будет распарсена на уровень 1 и сообщение "text of alarm" ?
Смотрим здесь: http://wiki.oscada.org/Using/GraphicElementsLibraries/MainElements#h1036-3
"s60ru" wrote:
3) Где в Документах "Суточный отчет" , "Журнал вмешательств" и т.д. указывается откуда черпать сообщения ?
4) Из чего следует, что в шаблоне документа , например, "Суточный отчет" только строка с
<TR docAMess="2:OP*">
<TD>-----<?dp return Special.FLibSYS.tmFStr(mTime,"%d %m");?></TD>
<TD>-----<?dp return Special.FLibSYS.tmFStr(mTime,"%H:%M:%S");?></TD>
<TD colspan="2">-----<?dp return Special.FLibSYS.strEnc2HTML(Special.FLibSYS.strParse(mVal,0,":"));?></TD>
<TD>-----<?dp return Special.FLibSYS.strParse(mVal,2,":");?></TD>
<TD colspan="2">-----<?dp return Special.FLibSYS.strParse(mVal,3,":");?></TD>
</TR>
будет динамически обрабатываться, создавая новые строки в документе ?
http://wiki.oscada.org/Doc/VCAEngine#h668-20
Learn, learn and learn better than work, work and work.
|
| 1 | 2 | 3 | Дальше | В конец
|
|