Здравствуйте
Вот возникла проблема для проверки надёжности сети использую пинги. На удалённом объекте стоит 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-адресом отправителя. Можно как нибудь получить весь пакет целиком в кодесис?