Здравствуйте.
Пишем свой скрипт определения связи с ПЛК. К сожалению скрипт в примерах Simaple-Scada не подошёл из-за проблем нижнего уровня по этому было решено постоянно менять значение переменной в самом ПЛК.
Был написан вот такой скрипт:
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 с TRUE на FALSE. То-есть по дефолту тег имеет значение TRUE, скада должна менять значение на FALSE, но если по истечению 10-ти секунд значение с FALSE не сменится на TRUE значит ПЛК не на связи.
Скрипт к сожалению отрабатывает не совсем так как хотелось. Подскажите пожалуйста в чём может быть проблема, какое может быть решение?
Естественно скрипт не работает. Потому-как в самом первом условии он противоречит вашему описанию.
Да и оформить можно было получше.
begin
if InterfaceModule_disconnect_flag.Value = TRUE then
begin
InterfaceModule_disconnect_flag.Value := FALSE;
InterfaceModuleTimerCheckState.Value := 0;
if vrMsgDisconnect.Value = TRUE then
begin
AddMessage(Now, mkMessage, 'Установлена связь с ПЛК', true, false);
vrMsgDisconnect.Value:= False;
end;
end
else
begin
InterfaceModuleTimerCheckState.inc(1); //Накопление 10-ти секунд
if InterfaceModuleTimerCheckState.Value >= 10 then
begin
if vrMsgDisconnect.Value = False then
begin
AddMessage(Now, mkAlarm, 'Связь с ПЛК утеряна', true, true);
vrMsgDisconnect.Value := TRUE;
end;
end;
end;
end.