Для отправки сообщений можно использовать соответствующие методы: SendMail, SendTelegram, SendMax, SendSMS. Если требуется отправить сообщение группе пользователей (например, всем пользователям группы "Операторы"), то используйте методы SendMail, SendTelegram, SendMax, SendSMS для группы.
При отправке сообщений из скриптов с типами событий "Таймер" и "Изменились переменные" возможны ситуации, когда сообщения будут отправляться многократно, пока значение переменной меняется в пределах условия скрипта. Для примера рассмотрим скрипт:
begin
if MyVar.AsInt > 10 then SendMail('Simple-Scada', 'Авария котла!', 'Превышена максимальная температура!');
end.
, в нем сообщение будет отправляться, когда значение переменной станет больше 10. Но если данный код вызывается, к примеру в скрипте с типом события "Таймер", то сообщение будет отправляться каждую секунду, пока значение переменной не станет меньше 10. Чтобы избежать этого, имеется несколько способов:
1. Если требуется отправлять сообщения при нарушении границ переменной, то нужно использовать скрипт с типом события "Нарушена граница" - данный скрипт учитывает зону нечувствительности переменной, что позволяет исключить лишние срабатывания, когда значение переменной колеблется в зоне соприкосновения границ.
2. Если требуется отправлять сообщения по Boolean переменным, то нужно использовать скрипт с типом события "Изменились переменные", добавив в список скрипта нужные переменные и написав такой код:
begin
// пропускаем первое изменение переменной, чтобы скрипт не выполнялся при перезапусках проекта
// и если значение переменной изменилось на True, то отправляем сообщение
if (not IsFirstChange) and (Variable.AsBool) then
// при необходимости добавляем в сообщение нужную информацию, например имя и описание переменной
SendTelegram('Авария! Переменная: ' + Variable.Name + ', Описание переменной: ' + Variable.Description);
end.
, данный скрипт будет отправлять сообщение только при изменении значения переменной с False на True. Если требуется отправлять сообщение при обратном условии (True -> False), то можно заменить первую строчку на "if Variable.AsBool = False then".
3. Если требуется отправлять сообщения по каким-то уникальным условиям и первые два варианта не подходят, то в скрипт отправки сообщения нужно добавить дополнительную проверку. Например, если нужно отправить сообщение только один раз при выполнении условия, то нужно создать внутреннюю переменную для контроля отправки, к примеру с именем SendControl с типом Boolean и добавить в скрипт проверку:
begin
if (MyVar_1.AsInt < 1) and (MyVar_2.AsInt >= 15) then
begin
if not SendControl.AsBool then // если сообщение еще не отправлялось, то...
begin
SendTelegram ('Авария!'); // отправляем сообщение
SendControl.Value := True; // помечаем, что сообщение было отправлено
end;
end else
SendControl.Value := False;
end.
, теперь сообщение будет отправляться один раз при выполнении условий скрипта. Если таких скриптов несколько, то для каждого нужно использовать отдельную переменную для контроля отправки.