Здравствуйте.
считаю вопрос закрыт тк мой скрипт криво, но справляется с уведомлениями.
Для однократной отправки сообщения необходим флаг "сообщение отправлено", причем в качестве оного можно использовать свойство Color объекта.
Вполне возможно, что дополнительно придется добавить гистерезис температуры для исключения отправки сообщений при "болтанке" температуры вблизи границы:
const dT = 3; // гистерезис температуры
begin
if Sender is TM_Object then // проверяем, что Sender это объект
with Sender as TM_Object do // приводим Sender к типу "TM_Object"
if Color <> clRed then
begin
if AsSingle >= VariableEx.AsSingle then
begin
Color := clRed;
AddMessage(Now, mkWarning, Variable.Description + ' превысила ' + Variable.AsStr + ' градуса ', True, True);
end;
end
else
if AsSingle < (VariableEx.AsSingle - dT) then Color := RGB(191,191,191);
end.
Для выполнения контроля при изменении границы можно добавить скрипт по изменению дополнительной переменной (границы):
begin
Sender.Color := RGB(191,191,191); // обязательно выполнить сравнение с границей
TM_Object(Sender).OnDataChangeEvent;
end.
Вполне рабочий вариант с использованием границ переменных.
{удалено, чтобы не повторять написанное
Simple_Scada выше}
Во вложении два примера как со скриптами по изменению переменных, так и по нарушению границы. Как говорится, найдите 3 отличия.