Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Guchi

Страницы: [1]
1
Код
begin
  {  обрабатываем первый таймер }
 
  if Tag11.IsGoodQuality = False then
  if Tag12.IsGoodQuality = False then
  if Tag13.IsGoodQuality = False then
  if Tag14.IsGoodQuality = False then
  if Tag15.IsGoodQuality = False then
  if Tag16.IsGoodQuality = False then
  if Tag17.IsGoodQuality = False then
  if Tag18.IsGoodQuality = False then

  begin
    vrTimer_1.Value := vrTimer_1.Value + 1;
    begin
    if vrTimer_1.AsInt = 1 then
      AddMessage(Now, mkMessage, 'Отсутсвует связь. Устройство 1!', TRUE, FALSE);
    if vrTimer_1.AsInt = 60 then
      AddMessage(Now, mkWarning, 'Отсутсвует связь. Устройство 1!', TRUE, FALSE);
    if vrTimer_1.AsInt = 180 then
      AddMessage(Now, mkAlarm, 'Нет связи. Устройство 1 !', TRUE, TRUE);
      end;
   end else
    vrTimer_1.Value := 0;




  {  обрабатываем второй таймер }
 
  if Tag21.IsGoodQuality = False then
  if Tag22.IsGoodQuality = False then
  if Tag23.IsGoodQuality = False then
  if Tag24.IsGoodQuality = False then
  if Tag25.IsGoodQuality = False then
  if Tag26.IsGoodQuality = False then
  if Tag27.IsGoodQuality = False then
  if Tag28.IsGoodQuality = False then
  begin
    vrTimer_2.Value := vrTimer_2.Value + 1;
    begin
    if vrTimer_2.AsInt = 1 then
      AddMessage(Now, mkMessage, 'Отсутсвует связь. Устройство 2!', TRUE, FALSE);
    if vrTimer_2.AsInt = 60 then
      AddMessage(Now, mkWarning, 'Отсутсвует связь. Устройство 2!', TRUE, FALSE);
    if vrTimer_2.AsInt = 180 then
      AddMessage(Now, mkAlarm, 'Нет связи. Устройство 2 !', TRUE, TRUE);
    end;
  end else
    vrTimer_2.Value := 0
end.

секундный скрипт проверяет 8 переменных на качество и если все 8 плохого качества то по таймеру выдает сообщение...скрипт мой (выстраданный с Вашей помощью...за что я Вам очень благодарен) вроде бы  работает...как его можно упростить ? потому как переменных может быть и не 8 8))) возможно применить процедуру Check...
Идет просто проверка на связь с Устройством...по всем переменным...возможно и по одному (любому)

Код
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.
вышеописанный скрипт с Check процедурой выдавал каждую секунду что "Нет связи с Устройством 1", "Нет связи с Устройством 2".
Насчет проверки по значению- эту часть скрипта можно убрать...только по качеству

2
Исходные данные:
имеем 2 устройства по 8 точек измерения (Тег1...Тег8 и Тег9-Тег16) и 8 точкам измерения Статус (Тег17..Тег24 и Тег25..Тег32)
сбор с устройств (МВ110-8А Овен) идет посредством терминала GPRS Teleofis - Master OPC Universal Modbus Server   - Simple Scada...
Требуется определять
1. связь с утройствами.... применить универсальный скрип по изменению параментра...если признак качества по Тег1...Тег8 плохой, то устройство №1 "нет связи", если Тег9...Тег16 признак качества плохой, то "устройство №2 нет связи".
2. нештатки по каналам измерения....универсальный скрипт: если Тег1....Тег8 имеет хороший признак качество то читаем Тег17...Тег24 и если переменные: 1) = 61447, то выводим сообщение "датчик отключен", 2) = 61493, то выводим сообщение "обрыв датчика" и т.д.
если признак качества Тег1...Тег8 плохой, то конец скрипта....аналогично с Тег9...Тег16 (статусы Тег25...Тег32)....
технически у меня ничего не получилось...прошу помочь...

3
в скаду выведены 2 переменные Connect (устройство_1) и Connect_1(устройство_2) из arOPC...
необходимо контролировать связь с 2-мя устройствами и ОРС сервером
1) при потере  признака качества переменных (Connect и Connect_1) - отпал OPC сервер;
2) значение 0 - нет связи с устройством, 1- есть связь с устройством (по каждому устройству соответственно)
  Необходимо при выявлении события (нет связи с ОРС сервером, нет связи с устройством 1, нет связи с устройством 2) сделать задержку (например на 1 минуту) и если связь не восстановится выдать в лог сообщение с звуком о соответствующем сообытии...с возможностью автоквитирования сообщения при возобновлении связи, до того как сообщение будет в ручную подтверждено.

4
огромное спасибо...возможно ли к данному скрипту прибавить сообщение..которое будет появляться в логе (+звук), при плохом признаке качества переменной...
естественно сообщение должно соответствовать  тому полю которое окрасилось в красный цвет..

5
Добрый день!

есть скрипт на изменение цвета  объекта (ежесекундный)

begin
  if Teg1. IsGoodQuality = False then TM_Field6.Color :=clRed
     else TM_Field.Color :=clLime
end.

необходимо сделать универсальный скрипт (по изменению переменной) или ежесекундный скрипт, для того чтобы при потере связи или плохом признаке качества Тега поле меняло цвет с зеленого на красный.
Необходимо контролировать параметры связи...+ вывод в лог сообщений (+звук) при потере связи с датчиком.

Страницы: [1]