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

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

Автор Тема: Работа функции startPing  (Прочитано 1961 раз)

gaargot1

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Работа функции startPing
« : 02 Апреля 2020, 10:52:53 »
Здравствуйте. Можете посоветовать, чё с этим делать?
При старте проекта начинаю пинговать ПЛК.
Код: (delphi)
...
  StartPing('хххххххххх',5000,Subpage1);
  StartPing('хххххххххх',10000,Subpage2);
  StartPing('хххххххххх',5000,Subpage3);
...
Процедура обрабатывающая результат выглядит так:
Код: (delphi)
begin
if PingData.Sender = nil then Exit;

    if PingData.Sender is TM_SubPage then
      with PingData.Sender as TM_SubPage do
        begin
          if PingData.Result then
            Color:=clNone                 //есть пинг
              else
                 begin
                  Color:=clRed;           //нет пинга
                  crash_(GetSubpageByName(Name));
                 end;
        end
end.
Одна из 15 опрашиваемых плк вызывает пару раз в минуту срабатывание "отсутствия пинга". Увеличивал таймаут, результат тотже. Во вложении пинг этой плк. Самые долгие ответы - 10Мс.

« Изменён: 02 Апреля 2020, 11:00:20 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3202
    • Просмотр профиля
    • Simple-Scada
Re: Работа функции startPing
« Ответ #1 : 02 Апреля 2020, 12:36:51 »
Здравствуйте.

Вы используете последнюю версию 2.3.6.10? Если нет, то обновитесь, в ней добавлена доработка пинга, возможно она поможет.
Simple-Scada для пинга использует стандартную библиотеку Windows "icmp.dll" и он должен работать как пинг в Windows через консоль. В версии 2.3.6.10 мы оставили только вызовы к "icmp.dll" и убрали весь собственный код, чтобы он никак не мог влиять на результаты пинга. Поэтому, если пинг всё равно ложно срабатывает даже в версии 2.3.6.10, мы не сможем что-то в нём исправить, т.к. нашего кода в нём теперь нет. Почему стандартная библиотека Windows может выдавать ложные срабатывания нам пока неизвестно, может быть есть какая-то зависимость от ОС, параметров сети, количества пингов и т.п..
Возможно проблему можно решить определяя ошибку пинга с учетом количества неудачных попыток (свойство FailCounter). Можно выдавать ошибку только когда количество неудачных попыток больше 1.

gaargot1

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Работа функции startPing
« Ответ #2 : 02 Апреля 2020, 13:13:21 »
Вот я прошляпил свойство failcounter. Спасибо, это решает.

Nikso

  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Работа функции startPing
« Ответ #3 : 21 Июля 2020, 10:01:57 »
А какая длина пакета при вызове функции ping? И с какой частотой пингуется узел? Верно ли понимаю что каждый новый пинг узла осуществляется через timeout?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3202
    • Просмотр профиля
    • Simple-Scada
Re: Работа функции startPing
« Ответ #4 : 23 Июля 2020, 10:52:11 »
Nikso, длина 32 байта. Частота зависит от состояния сети. Если связи нет, то пинг отправляется через каждые Timeout миллисекунд. Если же пингуемый объект ответит раньше чем Timeout, то скада сразу начнёт новый пинг (но не чаще чем каждые 100 мс.).
« Изменён: 23 Июля 2020, 11:24:48 от Simple-Scada »