PDA

Просмотр полной версии : ПЛК100+PING(ICMP)+ROUTER



Gans
30.04.2011, 17:45
Здравствуйте
Вот возникла проблема для проверки надёжности сети использую пинги. На удалённом объекте стоит ADSL-роутер и через него в сеть выходит ПЛК100 для отправки текущих значений в диспетчерские.
И вот недавно на новых объектах столкнулся с такой проблемой:
При проверке связи с диспетчерской в случае отсутствия связи роутер возвращает от своего имени, что данная сеть не доступна и конечно при считывании ответа в буфере правильные контрольные данные и ПЛК100 считает, что с сетью все в порядке. Ведь в получаемом буфере только мусор который мы сами отправили. Ранее на других объектах такого не замечал, но там и другие модемы и оборудование провайдера. Вот хотелось с пингами разобраться получше.

Ton_PingSend(IN:=NOT Ton_PingSend.Q, PT:=t#450ms);
IF Ton_PingSend.Q THEN
sock_adrPing.sin_addr:=*******; (*айпиадрес сетевоге оборудования*)
resd:=SysSockSendTo(sockPing,ADR(my_bufs),32,0,ADR (sock_adrPing),SIZEOF(sock_adrPing)); (*Послали ICMP пакет*)
END_IF


tmrPing(IN:=NOT tmrPing.Q, PT:=t#0.005s);
(*Организуем таймер для обеспечении временной задержки ожидания ответа*)
IF tmrPing.Q THEN (*Время ожидания истекло считываем данные*)
my_BUFr:='';
PINGstart_TON:=FALSE;
resd:=SysSockRecvFrom(sockPing,ADR(my_bufr),32,0,A DR(sock_adr1),SIZEOF(sock_adr1));
IF FIND(my_BUFr, '123456')<>0 THEN (*Сравниваем переданные и принятые данные в случае идентичности Ping вернулся наш*)
blnTestOK:=TRUE;
qBlnConnect:=TRUE; (*Пометели что со связью всё ОК*)
END_IF
END_IF

Вот этой перепроверки оказалось недостаточно:
IF FIND(my_BUFr, '123456')<>0 THEN (*Сравниваем переданные и принятые данные в случае идентичности Ping вернулся наш*)

Разумеется любым снифером видно кто ответил, но как в кодесис можно подглядеть кто на самом деле ответил на пинг?

P. S. Во вложении скрин сниферра на котором видно, что ICMP пакет содержит информацию с IP-адресом отправителя. Можно как нибудь получить весь пакет целиком в кодесис?

capzap
30.04.2011, 20:29
а способ использовать регистр с заведомо известным изменяемым значением в этом случае не будет более выгодно выглядеть по сравнении с пингом?

Gans
30.04.2011, 22:20
Спасибо конечно за вариант, но если удастся довести до ума пинги, то это будет правильней. Писать программку для изменения значения регистра в ModBus-TCP конечно вариант, но это уже когда красиво не получится, да и трафик не резиновый. Пинги на мой взгляд самый экономичный и целесообразный вариант, вот только недавно купленные модемы именно так себя ведут + оборудование у провайдера в том месте тоже со странностями.
Для решения этой проблемки вариантов масса – сейчас у меня на удаленных объектах модем просто каждые пару часов обесточивается на 10 секунд, а подвисание модема примерно раз в неделю. Таким образом, получается, что проблема почти решена, заказчик про данную проблему даже не в курсе :-)

capzap
30.04.2011, 22:38
по сети по моему не важно, переслать пинг или запросить один бит. Тут мне кажется не красота а надежность имеет приоритет. Не все провайдеры разрешают пинг, так сказать защита от начинающих хакеров. Кроме состояния сети по пингу Вы больше информации не узнаете, а если у Вас еще и порт Модбаса заблокирован, Вы запингуетесь, а об ошибке и не узнаете

Gans
30.04.2011, 23:04
С провайдером договорные отношения - в которых черным по белому все расписано и за это провайдер получает деньги и соответственно уверен, что ни чего не заблокируют. Описанная ситуация это всего навсего частный случай, ведь оборудования много и не всегда есть возможность на ответной части разметить свои программы, а протокол ICMP (Ping-и) должен поддерживаться всеми (ну только если собственник оборудования не запретил).
Меня всё таки по прежнему интересуют именно пинги и как отличить ответ роутера "Данная подсеть не доступна" от ответа что всё в порядке.

Адрей
28.08.2011, 20:23
Gans скажи, пожалуйста, марку ADSL-роутера в вашем случае. Тоже замечал, не стабильные пинги у ПЛК100, пинговал напрямую с компа правда комп был старый с частотой 800Мгц у ПЛК прошивки свежие.

Gans
28.08.2011, 20:45
Здравствуйте Андрей (если не ошибаюсь)
Модем вот этот: http://www.nix.ru/autocatalog/modems/Acorp_Sprinter_ADSL_LAN_410_ANNEX_4UTP_87052.html
Но похоже выяснился диагноз (на 60%): - температура в помещении 42 градуса, а оборудование в щите :-( при снижении температуры ниже 30 градусов потерь связи не наблюдалось.

capzap
23.06.2012, 16:40
Вот этой перепроверки оказалось недостаточно:
IF FIND(my_BUFr, '123456')<>0 THEN (*Сравниваем переданные и принятые данные в случае идентичности Ping вернулся наш*)

Разумеется любым снифером видно кто ответил, но как в кодесис можно подглядеть кто на самом деле ответил на пинг?

P. S. Во вложении скрин сниферра на котором видно, что ICMP пакет содержит информацию с IP-адресом отправителя. Можно как нибудь получить весь пакет целиком в кодесис?

Вот Леонид вроде ответил на Ваш вопрос http://www.owen.ru/forum/showpost.php?p=84190&postcount=13
ЗЫ IP4_TO_STRING это из oscat_network

Gans
23.06.2012, 17:28
Вот Леонид вроде ответил на Ваш вопрос http://www.owen.ru/forum/showpost.php?p=84190&postcount=13
ЗЫ IP4_TO_STRING это из oscat_network
Спасибо, Capzap и Леонид.
Попробую.
P. S. Сам пользуюсь аналогичными вещами, а к пингу прикрутить даже и не подумал. Еще раз спасибо :-)