Author |
Message |
Written on: 21. 11. 2012 [13:04]
|
pentagon128
Руслан Кучерявый
Topic creator
registered since: 15.11.2011
Posts: 102
|
Шаблоны обработки вешественных и дискретных переменных с отслеживанием изменений и выдачей системного сообщения для отображения виджетами и в протокол написал. Увязал с текущим проектом - работает. Код шаблона обработки дискретного сигнала написал такой:
***************************************************************************************************************
if(f_start)//1-й запуск
{
last=in;//приравниваем входное значение предыдущего цикла значению текущего цикла
//делаем проверку
if(in==norma)
{
//Сообщение если in=NORMA
f_err="0:"+DESCR+":"+MESSAGE_IN_EQ_NORMA;
this.nodePrev().alarmSet((NAME.length?NAME:SHIFR)+": "+DESCR+": "+MESSAGE_IN_EQ_NORMA, 1, SHIFR);
}
else
{
//Сообщение если in!=NORMA
f_err="1:"+DESCR+":"+MESSAGE_IN_NOT_NORMA;
this.nodePrev().alarmSet((NAME.length?NAME:SHIFR)+": "+DESCR+": "+MESSAGE_IN_NOT_NORMA, -5, SHIFR);
}
}
//начало
if(in!=last)//отслеживаем изменение входного значения
{
if(in==norma)
{
//Сообщение если in=NORMA
f_err="0:"+DESCR+":"+MESSAGE_IN_EQ_NORMA;
this.nodePrev().alarmSet((NAME.length?NAME:SHIFR)+": "+DESCR+": "+MESSAGE_IN_EQ_NORMA, 1, SHIFR);
}
else
{
//Сообщение если in!=NORMA
f_err="1:"+DESCR+":"+MESSAGE_IN_NOT_NORMA;
this.nodePrev().alarmSet((NAME.length?NAME:SHIFR)+": "+DESCR+": "+MESSAGE_IN_NOT_NORMA, -5, SHIFR);
}
last=in;//запоминаем изменённое значение входной величины
}
else
{
//ничего не делаем
}
*************************************************************************************************
Теперь выясняется что при перезапуске сервера - протокол уходит в "космос" (не сохраняется в БД). Возникает вопрос...как организовать запись протокола сообщений в БД с последующим отображением? Существующее решение с вызовом функции .alarmSet, как я догадываюсь - пишет поток сообщений в массив в оперативной памяти. Или теперь в шаблоны прописывать "костыли" прикручивающие записи в БД? Прошу подсказать направление поиска... Также прошу эту тему убрать из запроса функций и услуг, и переименовать в "обработка алармов и сообщений" и переместить в "Разработку" для правильности...
Attachment
|
Written on: 21. 11. 2012 [13:20]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"pentagon128" wrote:
Теперь выясняется что при перезапуске сервера - протокол уходит в "космос" (не сохраняется в БД). Возникает вопрос...как организовать запись протокола сообщений в БД с последующим отображением? Существующее решение с вызовом функции .alarmSet, как я догадываюсь - пишет поток сообщений в массив в оперативной памяти. Или теперь в шаблоны прописывать "костыли" прикручивающие записи в БД? Прошу подсказать направление поиска...
Если внимательно почитать про функцию .alarmSet() то будет видно, что при установке нарушения (level<0) оно фиксируется в буфере активных нарушений, а так-же помещаются в буфер сообщений. Снятие нарушения (level >=0) соответственно убирает его из буфера активных нарушений и опять-же помещает в буфер сообщений. Соответственно нужно сохранять буфер сообщений чем занимается архиватор сообщений, который и настраивайте: http://wiki.oscada.org/Doc/OpisanieProgrammy#h827-7
Learn, learn and learn better than work, work and work.
|
Written on: 21. 11. 2012 [15:52]
|
pentagon128
Руслан Кучерявый
Topic creator
registered since: 15.11.2011
Posts: 102
|
Это я пробовал несколько раз, не работает, и подраздел "Архивы" документации перечитывал несколько раз. В документации работа с архивами значений освещена хорошо и всё работает нормально, а вот настройка и подключение архивов сообщений неосвещена. И в тестовых двух проектах бойлера и ALKGS в одном из проектов подключена недоступная MYSQL база. Т.е. демо проекты не реализуют запись сообщений в линкуемую БД. Пробовал пошагово как написано в документации подраздел "Архивы". Снял копии экранов (прилагаю) http://rghost.ru/41715382 . У меня в проекте подключена SQLite БД ARH.db в неё пишу архиваторами 1s_data и 10s_data значения переменных. Создаю 1s_message архиватор сообщений. На экранах видно - что сообщения промелькивают в буфере (оперативная память) - но архиватор их не записывает в БД , видно по пустым записям и дате последней записи 1970 года. Опыт работы с БД имею большой, приходилось работать и с БД MySQL и SQL SERVER администрировать. Гдето-косяк. Таблицы БД просмотрел, таблицы с записями нет. И имя я её не знаю (таблица которая должна быть создана под сообщения). Просьба расписать пример подключения 1s_message к БД SQLite например, аналогично 1s_data пошагово. На каком то шаге - сбой получается. На каком - непонятно.
[This article was edited 1 times, at last 21.11.2012 at 15:57.]
|
Written on: 21. 11. 2012 [16:21]
|
pentagon128
Руслан Кучерявый
Topic creator
registered since: 15.11.2011
Posts: 102
|
Удалось разобраться. В настройках 1s_message в поле "Категория сообщений" нужно указать *
|
Written on: 21. 11. 2012 [16:27]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"pentagon128" wrote:
Это я пробовал несколько раз, не работает, и подраздел "Архивы" документации перечитывал несколько раз. В документации работа с архивами значений освещена хорошо и всё работает нормально, а вот настройка и подключение архивов сообщений неосвещена. И в тестовых двух проектах бойлера и ALKGS в одном из проектов подключена недоступная MYSQL база. Т.е. демо проекты не реализуют запись сообщений в линкуемую БД.
Вот беру этот самый архиватор (sub_Archive/mod_DBArch/mess_test), меняю БД на "SQLite.exp" (предварительно SQLite.exp включил), включаю и данные сразу туда пошли. Смотрю в БД "SQLite.exp", а там появилась таблица с сообщениями архиватора "test" DBAMsg_test, какие тут ещё примеры нужны?
"pentagon128" wrote:
Создаю 1s_message архиватор сообщений.
Зачем "1s" в префиксе?
"pentagon128" wrote:
На экранах видно - что сообщения промелькивают в буфере (оперативная память) - но архиватор их не записывает в БД , видно по пустым записям и дате последней записи 1970 года.
У меня всё записывает.
Learn, learn and learn better than work, work and work.
|
Written on: 21. 11. 2012 [16:40]
|
pentagon128
Руслан Кучерявый
Topic creator
registered since: 15.11.2011
Posts: 102
|
Спасибо большое Роман за помощь и поддержку! :D Всё заработало как надо! Пазл сложился. 1s в прёфиксе это так...традиция Венгерской системы именования переменых, иногда пользуюсь.
|
Written on: 21. 11. 2012 [17:41]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"pentagon128" wrote:
Спасибо большое Роман за помощь и поддержку! :D Всё заработало как надо! Пазл сложился. 1s в прёфиксе это так...традиция Венгерской системы именования переменых, иногда пользуюсь.
Пожалуйста!
Только именование объектов OpenSCADA с цифры может вылезти боком если захочется адресоваться к нему из скрипта, хотя обход этому есть, но непонятки могут возникнуть.
И шаблон отбора сообщений для архиватора нарушений лучше не ставить в "*", а несколько конкретизировать типа "al*", что-бы исключить "завал" архива ненужными сообщениями и замедление доступа к нему.
Learn, learn and learn better than work, work and work.
|
Written on: 22. 11. 2012 [14:11]
|
pentagon128
Руслан Кучерявый
Topic creator
registered since: 15.11.2011
Posts: 102
|
"roman" wrote:
Пожалуйста!
Только именование объектов OpenSCADA с цифры может вылезти боком если захочется адресоваться к нему из скрипта, хотя обход этому есть, но непонятки могут возникнуть.
И шаблон отбора сообщений для архиватора нарушений лучше не ставить в "*", а несколько конкретизировать типа "al*", что-бы исключить "завал" архива ненужными сообщениями и замедление доступа к нему.
Спасибо за информацию! С проблемой адресации объектов из скриптов я уже сталкивался, поэтому объекты визуализации именую так id_по_умолчанию_моё_описание_тега_или_виджета естественно на английском (1s_message - конечно исключение). Исходя из заполняемости архивов сделал расчёт и ограничил текстовый архив 10 сутками, архив значений 3-мя сутками. Учитывая что вещественных будут писаться всего 4 сигнала (на 1-м этапе внедрения проекта подключено 4 датчика газоанализатора) получается 7 Мб в сутки, 21 Мб за трое суток. Это немного. На диске свободно 424 мБ. Процессор АРМ-а оператора AthlonXP1700+ справляется. На виртуальной машине и на физической всё гоняется нормально. Как положено проведены комплексные испытания на площадке поставщика/изготовителя (наша площадка), оформлен акт, шкаф с контроллером и датчики отправлены Заказчику. Как пусконаладку сделаю, проведём приёмосдаточные испытания со сдачей в опытную а затем в промышленную эксплуатацию, статью по внедрению планирую написать обязательно :D.
[This article was edited 1 times, at last 22.11.2012 at 14:14.]
|
Written on: 26. 11. 2012 [08:44]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"pentagon128" wrote:
Как пусконаладку сделаю, проведём приёмосдаточные испытания со сдачей в опытную а затем в промышленную эксплуатацию, статью по внедрению планирую написать обязательно :D.
OK, ждём.
Learn, learn and learn better than work, work and work.
|
Written on: 29. 11. 2012 [08:18]
|
pentagon128
Руслан Кучерявый
Topic creator
registered since: 15.11.2011
Posts: 102
|
Появились вопросы озвучивания события. Относится к теме алармов.
На странице мнемосхемы размещаю виджет кнопку id=FormEl_button и виджет отображения аналогового значения id=anShow1, текстовый виджет надпись id=Text1
Далее в обработчике событий страницы на вкладке обработка размещаю код:
using Special.FLibSYS;
//> Events process
ev_cur = ev_rez = "";
off=0;
while(true)
{
ev_cur = strParse(event,0,"\n",off);
if(ev_cur == "") break;
else if(ev_cur == "ws_BtPress:/FormEl_button")
{
Text1.text="123";
anShow1.alarm="0|Open Scada|звонок|0x04|alarm";
}
}
event = ev_rez;
если использовать атрибуты и размещать их вместо кода:
Text1.text="123";
anShow1.alarm="0|Open Scada|звонок|0x04|alarm";
то аналогичный код на другой страницы работает и атрибуты меняет. А вышеприведённый код не работает. И текст не меняет и звука нет. Атрибуту text выставлена галочка "обрабатывать"
Согласно UI.VCAEngine.pdf стр. 17 виджеты имеют текстовый атрибут alarm. Примеров доступных нет. Тестовые доступные примеры - генерация звука отсутствует.
в БД проекта в ресурсы id=alarm подключил wav файл alarm.wav со звуком гудка. В консоли (терминале) Linux Suse команда sox-a:
play -q alarm.wav работает без проблем.
Прошу помочь:
1. Как грамотно достучаться до свойств (атрибутов) виджетов из кода обработчика событий родительской формы (мнемосхемы).
2. Не хватает рабочего примерчика установки свойства (атрибута) alarm виджета с проигрыванием банального wav файла, по нажатию кнопки например.
3. Или как альтернатива, на уровне Сбор данных\модуль\логический уровень\контроллер\параметр
можно использовать шаблон генерирующий вызов внешней команды sox-a play с указанием файла в одну строку. Только синтаксис и функция неизвестны мне. Api Open Scada просмотрел, возможность вызов команды оболочки интерпритатора командной строки Linux не нашёл.
Open Scada использую v0.8.0LTS версия 4
Тему звукового сопровождения событий http://oscada.org/ru/forum/posts//zvukovoe_soprovozhdenie_sobytii//2/
читал. Вопрос до конца не освещён. Считаю освещённым вопрос только тогда - когда в конце темы приложен рабочий пример или кусок кода.
|