EnglishУкраїнськаmRussian
Login/New
Topic with many replies

[Alarms][Сигнализация]Есть ли способ формирования алармов без виджетов?


Author Message
Written on: 17. 12. 2011 [21:57]
Vandrizm
Игорь М
Topic creator
registered since: 31.07.2010
Posts: 55
Например если от устройства приходит несколько десятков сообщений о его состоянии. Причем состояние устройства достаточно только регистрировать.
Written on: 17. 12. 2011 [22:03]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 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.
Written on: 17. 12. 2011 [22:19]
Vandrizm
Игорь М
Topic creator
registered since: 31.07.2010
Posts: 55
А как тогда правильно организовать мониторинг значений? Т.е. чтобы не на каждом цикле выполнения ф-ии генерировалось сообщение, а только при смене состояния.
Written on: 17. 12. 2011 [22:28]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Vandrizm" wrote:

А как тогда правильно организовать мониторинг значений? Т.е. чтобы не на каждом цикле выполнения ф-ии генерировалось сообщение, а только при смене состояния.

По атрибуту ошибки, который устанавливать и проверять текущее значений.

Learn, learn and learn better than work, work and work.
Written on: 17. 12. 2011 [22:44]
Vandrizm
Игорь М
Topic creator
registered since: 31.07.2010
Posts: 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>.



Создал следующую ф-ию:
JAVASCRIPT
SYS.message( "sys_msg", -2, "Проверка генерации событий");

и выполнил ее.
По идее должен формироваться уровень нарушения -2. Однако этого не происходит.
Уровень нарушения остается равным 0.

[This article was edited 1 times, at last 17.12.2011 at 22:45.]
Written on: 17. 12. 2011 [23:04]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Vandrizm" wrote:

По идее должен формироваться уровень нарушения -2. Однако этого не происходит.

Не должно. Должно с уровнем 2 и формируется. Отрицательный указывает на фиксацию сообщения в нарушениях, которые по отрицательному уровню и нужно смотреть.

"Vandrizm" wrote:

Уровень нарушения остается равным 0.

Что значит остаётся? Сообщение формируется вновь и для него нет понятия остаться. Для нарушения (отрицательный уровень) возможно.

Learn, learn and learn better than work, work and work.
Written on: 10. 05. 2012 [12:53]
s60ru
Антон Петров
registered since: 10.05.2012
Posts: 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) определить условия генерации аларма в шаблоне параметра , как например в Базовый_Сигн.дискретная и у параметра выбрать этот шаблон. Но из

JAVASCRIPT
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) как квитировать (оператор подтверждает, что обратил внимание на аларм) ?

Written on: 10. 05. 2012 [15:43]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 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.
Written on: 11. 05. 2012 [14:36]
s60ru
Антон Петров
registered since: 10.05.2012
Posts: 141
1) Я так и не понял куда отправится сообщение в выражении

JAVASCRIPT
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) Из чего следует, что в шаблоне документа , например, "Суточный отчет" только строка с

JAVASCRIPT
<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>


будет динамически обрабатываться, создавая новые строки в документе ?
Written on: 11. 05. 2012 [16:03]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"s60ru" wrote:

1) Я так и не понял куда отправится сообщение в выражении
JAVASCRIPT
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) Из чего следует, что в шаблоне документа , например, "Суточный отчет" только строка с

JAVASCRIPT
<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.



12189