Можно оба пункта решить одним секундным скриптом. Допустим переменные тегов называются соответственно Tag1, Tag2 ... Tag32.
var
aGoodCount, aBadCount: Byte;
a61447, a61493: Byte;
procedure Check(AQuality: Boolean; var ATag: TM_Variable);
begin
{ если нужно проверять качество }
if AQuality = TRUE then
if ATag.IsGoodQuality then
Inc(aGoodCount)
else
Inc(aBadCount);
{ если нужно проверять значение }
if AQuality = FALSE then
if ATag.AsInt = 61447 then
Inc(a61447)
else
if ATag.AsInt = 61493 then
Inc(a61493);
end;
{ проверяет восемь тегов на качество (при AQuality = TRUE)
или на значение (при AQuality = FALSE) }
procedure GoodOrBad(AQuality: Boolean; var T1, T2, T3, T4, T5, T6, T7, T8: TM_Variable);
begin
aGoodCount := 0;
aBadCount := 0;
a61447 := 0;
a61493 := 0;
Check(AQuality, T1);
Check(AQuality, T2);
Check(AQuality, T3);
Check(AQuality, T4);
Check(AQuality, T5);
Check(AQuality, T6);
Check(AQuality, T7);
Check(AQuality, T8);
end;
begin
{ проверяем качество 8 тегов первого устройства }
GoodOrBad(TRUE, Tag1, Tag2, Tag3, Tag4, Tag5, Tag6, Tag7, Tag8);
{ если все 8 тегов с плохим качеством }
if aBadCount = 8 then
AddMessage(Now, mkAlarm, 'Устройство 1. Нет связи!', TRUE, TRUE);
{ если все 8 тегов с хорошим качеством }
if aGoodCount = 8 then
begin
{ проверяем значение тегов 17..24 }
GoodOrBad(FALSE, Tag17, Tag18, Tag19, Tag20, Tag21, Tag22, Tag23, Tag24);
if a61447 = 8 then // все равны 61447
AddMessage(Now, mkAlarm, 'Устройство 1. Датчик отключен!', TRUE, TRUE);
if a61493 = 8 then // все равны 61493
AddMessage(Now, mkAlarm, 'Устройство 1. Обрыв датчика!', TRUE, TRUE);
end;
////// далее тот же код, но для тегов второго устройства //////
{ проверяем качество 8 тегов второго устройства }
GoodOrBad(TRUE, Tag9, Tag10, Tag11, Tag12, Tag13, Tag14, Tag15, Tag16);
{ если все 8 тегов с плохим качеством }
if aBadCount = 8 then
AddMessage(Now, mkAlarm, 'Устройство 2. Нет связи!', TRUE, TRUE);
{ если все 8 тегов с хорошим качеством }
if aGoodCount = 8 then
begin
{ проверяем значение тегов 25..32 }
GoodOrBad(FALSE, Tag25, Tag26, Tag27, Tag28, Tag29, Tag30, Tag31, Tag32);
if a61447 = 8 then // все равны 61447
AddMessage(Now, mkAlarm, 'Устройство 2. Датчик отключен!', TRUE, TRUE);
if a61493 = 8 then // все равны 61493
AddMessage(Now, mkAlarm, 'Устройство 2. Обрыв датчика!', TRUE, TRUE);
end;
end.