Всем привет
Задача состоит в том, что я проверяю на связи плата (скада общается с ней) или нет.
Есть определённый тег на ОРС сервере типа bool и он по умолчанию false. Это значит, что плата на связи. Значение true - плата обесточена, связи с платой нет.
Каждую секунду скада отправляет значение true и есть этот тег в течении 10-ти секунд не изменил свой статус в false значит нету связи с платой. Соответственно выводятся сообщения о том, что потеря связи и наоборот связь есть.
Накидал код, но не работает он должным образом и прошу вашей поправки в моих ошибках.
Скрипт работает по событию "Прошла секунда"
begin
if InterfaceModule_disconnect_flag.Value = FALSE then
begin
InterfaceModule_disconnect_flag.Value := TRUE;
end else begin if InterfaceModule_disconnect_flag.Value = FALSE then
begin
InterfaceModuleTimerCheckState.Value := 0;
vrMsgDisconnect.Value := TRUE;
if vrMsgConnect.Value = TRUE then
begin
AddMessage(Now, mkMessage, 'Зв''язок з інтерфейсним модулем відновлено', true, false);
vrMsgConnect.Value := FALSE;
end;
end else
begin
InterfaceModuleTimerCheckState.Value := InterfaceModuleTimerCheckState.Value + 1; //Накопление 10-ти секунд
if InterfaceModuleTimerCheckState.Value >= 10 then
begin
vrMsgConnect.Value := TRUE;
if vrMsgDisconnect.Value = TRUE then
begin
AddMessage(Now, mkAlarm, 'Втрата зв''язку з інтерфейсним модулем', true, true);
vrMsgDisconnect.Value := FALSE;
end;
end;
end;
end;
end.
InterfaceModule_disconnect_flag - тег с ОРС который я мониторю на связи плата или нет
InterfaceModuleTimerCheckState - внутренний тег для подсчёта 10-ти секунд
vrMsgConnect и vrMsgDisconnect - внутренние теги, они же флаги, для того чтобы не было сразу сообщений о том, что плата на связи или обесточена.