Есть задача отправлять СМС с текстом аварийных сообщений. Можно ли из таблицы тревог, например, вытащить ID последней тревоги?
Вид для печати
Есть задача отправлять СМС с текстом аварийных сообщений. Можно ли из таблицы тревог, например, вытащить ID последней тревоги?
Я правильно понимаю, что задача стоит следующая:
1) оповестить персонал в момент возникновения аварии;
2) текст оповещения должен содержать описание возникшей аварии?
Получается нужно дублировать все проверки тревог, которые я задал в группе тревог. А если придется что-то добавить, или изменить? Это может привести к ошибкам.
Получается правильней будет формировать код ошибки в программе и отправлять **** а в группе тревог просто проверять коды ошибок, и выдавать нужный текст в таблицу.
На текущий момент вырисовывается 2 варианта отправки СМС по активации тревоги.
Каждый со своими плюсами и минусами. Опишу оба варианта, а Вы используйте тот, который Вам больше подойдет.
Допустим есть 2 параметра, которые могут послужить причиной тревог:
- Температура в комнате (допустимый диапазон от 21 до 35 °С);
- Температура на улице (допустимый диапазон от 10 до 25 °С);
Вариант 1: Обработка аварий в коде.
Идея этого способа заключается в том, что мы объявим для каждой тревоги переменную типа BOOL.
Будем менять ее значение в коде, а в AlarmManager'e добавим тревоги типа "Дискретный".
Плюсы:
- легкий для понимания и адаптации под Ваши задачи.
Минусы:
- Необходимость писать вручную много кода;
- Небольшое дублирование кода (текст сообщения в таблице тревог и текст СМС).
Я приложил архив проекта с этим вариантом реализации к сообщению.
Пример кода:
Вариант №2 опишу отдельным сообщением.
Условия для варианта 2 те же, что и раньше:
Вариант 2: AlarmManager сообщает нам о изменении списка активных тревог
Плюсы:
- минимум вспомогательного кода;
- конфигурация тревог производится полностью через интерфейс AlarmManager'а;
- отсутствует дублирование кода;
- для использования в проекте Вам достаточно перенести к себе в проект часть примера (редактировать не придется);
Минусы:
- Для людей не знакомых с ООП разобраться как это работает будет сложно;
Я приложил архив проекта с этим вариантом реализации к сообщению.
Для интеграции примера в Ваш проект:
- перенесите директорию LastAlarmMessage в свой проект;
- добавьте библиотеку Alarm Manager Interfaces (Intern) в свой проект;
- в PLC_PRG объявите экземпляр ФБ
и добавьте вызов ФБ в телеКод:VAR
m_fb_LastAlarmMessage : GetLastAlarmMessage;
END_VAR
Код:m_fb_LastAlarmMessage();
- отправляйте СМС примерно так:
Код:// xNewAlarmActivated будет равен TRUE в течение 1 цикла ПЛК с момента активации новой тревоги.
IF m_fb_LastAlarmMessage.xNewAlarmActivated THEN
// Отправляйте СМС с текстом m_fb_LastAlarmMessage.wsMessage
;
END_IF
- AlarmManager настройте по вкусу. ФБ все равно узнает текст последней возникшей тревоги.
Для наших условий настройка выглядит так:
Вложение 36052
Много скучного описания о том, как это вообще устроено:
Если у Вас появились вопросы\замечания - пишите, мы поможем.
Здравствуйте. Делаю уже второй проект с использованием AlarmManager'а. В первом проекте все работало отлично, а сейчас возникла проблема:
Флаг m_fb_LastAlarmMessage.xNewAlarmActivated не устанавливается при некоторых аварийных сообщениях (например, авария по CH4), хотя в списке тревог сообщения появляются нормально.
Никак не могу найти причину.
Добрый день!
ФБ GetLastAlarmMessage выставляет флаг xNewAlarmActivated в том случае, если увеличилось количество аварий в списке активных.
В Вашем проекте для того, чтобы тревога класса "Ошибка" деактивировалась необходимо, чтобы ее подтвердил пользователь.
За это отвечает настройка на скриншоте ниже:
Вложение 39240
иначе тревога остается активной, даже если условие ее возникновения уже не выполняется.
Т.е. с подтверждением "REP_ACK" для повторной отправки сообщения о тревоге необходима следующая цепочка действий:
- Выполнились условия возникновения тревоги // Отправили сообщение
- Условия возникновения тревоги перестали выполнятся
- Пользователь подтвердил тревогу
- Выполнились условия возникновения тревоги // Отправили сообщение
Если нужно так:
- Выполнились условия возникновения тревоги // Отправили сообщение
- Условия возникновения тревоги перестали выполнятся
- Выполнились условия возникновения тревоги // Отправили сообщение
то условие деактивации тревоги необходимо установить равным "REP".
Более подробно о настройке AlarmManager'a описано в документе "СПК. Визуализация"
Все отлично работает, спасибо!