Пожалуйста, включите JavaScript для просмотра этого сайта.

Скрипты Simple-Scada

История: Примеры скриптов

Контроль связи

Пред. Вверх След. Еще

Для контроля связи с ПЛК/устройством можно воспользоваться перечисленными ниже способами и например выдавать предупреждение при потере связи:

1.Проверять качество нужных тегов используя свойство IsGoodQuality;

2.Производить пинг ПЛК/устройства используя процедуру StartPing;

3.Использовать способ описанный ниже:

Допустим, требуется проверять связь с ПЛК по переменной, которая периодически изменяется, например с нуля на единицу или постоянно наращивая значение. Пусть в проекте имеется переменная с именем "vrChange", которая считывается с контроллера и меняет свое значение раз в секунду. Нужно отслеживать изменения этой переменной и выдавать сообщение о разрыве связи если она перестала изменяться, а когда связь восстановится (и переменная снова начнет изменяться), выдавать сообщение о восстановлении связи.

Для решения данной задачи перейдем в редактор переменных и создадим новую внутреннюю переменную с типом данных Int64 и именем "vrLinkTimer" - эта переменная будет использоваться для подсчета времени отсутствия связи с контроллером. Также, создадим внутреннюю переменную с типом данных Boolean и именем "vrLost" - данная переменная будет использоваться для того, чтобы сообщения о потере связи выдавались однократно. Затем перейдем в редактор скриптов и создадим новый скрипт с типом события "Изменились переменные". Добавим в список скрипта переменную "vrChange", изменение которой требуется отслеживать и нажмем кнопку "Создать":

Напишем скрипт:

begin
{ обнуляем счетчик отсутствия связи если переменная изменяется }
  vrLinkTimer.Value := 0;
end.

 

Далее, создадим новый скрипт с типом события "Таймер" - в параметре скрипта "Интервал" укажем значение 1сек. и напишем следующий код:

const
  TIMEOUT = 5;
begin
  vrLinkTimer.Value := vrLinkTimer.AsInt64 + 1;
  { проверка на отсутствие связи }
  if (vrLost.AsBool = FALSE) and (vrLinkTimer.AsInt64 >= TIMEOUT) then
  begin
    vrLost.Value := True;
    AddMessage(Now, mkAlarm, 'Потеряна связь с контроллером!', TRUE, FALSE);
  end;
 
  { проверка на восстановление связи }
  if (vrLost.AsBool) and (vrLinkTimer.AsInt64 < TIMEOUT) then
  begin
    vrLost.Value := False;
    AddMessage(Now, mkWarning, 'Cвязь с контроллером восстановлена!', TRUE, FALSE);
  end;
end.

Изменяя константу "TIMEOUT" (время в секундах), можно задавать произвольный интервал времени до выдачи сообщения о разрыве связи.