Andrey
20.08.2007, 07:10
Проблема в следующем: С ПЛК отправляются UDP сообщения на сервер Syslog. Код примерно такой
diSocket: DINT;
SockAddr: SOCKADDRESS;
res: DINT;
err: BOOL;
buf: STRING(255);
SockAddr.sin_addr:=((10*256+0)*256+6)*256+11;
SockAddr.sin_port:=514;
SockAddr.sin_family:=SOCKET_AF_INET;
buf:='Некоторое сообщение сформированное используя CONCAT()';
diSocket:=SysSockCreate(SOCKET_AF_INET, SOCKET_DGRAM, SOCKET_IPPROTO_UDP);
res:=SysSockSendTo(diSocket,ADR(buf),LEN(buf),SOCK ET_MSG_OOB,ADR(SockAddr),SIZEOF(SockAddr));
err:=SysSockClose(diSocket);
В результате замечено две проблемы.
Проблема №1
Если между пакетами пауза превышает примерно 2 минуты и при этом больше нет ни какого обмена по TCP с ПЛК включая CodeSys (logout) то пакеты начинают терятся, тоесть они не вылетают из ПЛК и соответственно не прилетают на ПК, проверялось с помощью снифера Ethereal. Если в этот момент запустить ping ПЛК с ПК то все нормально.
Проблема №2
Иногда отправляются неправильные пакеты, тоесть содержащие некоректные данные, например
отправляется
"Некоторое сообщение"
а на ПК приходит два пакета.
1 пакет "Конец сообщения"
1 пакет "Конец сообщения Середина сообщения" - а начало перетирается концом сообщения.
Причем чем интенсивней обмен тем больше таких ошибок.
Во всех случаях функции SysSockCreate,SysSockSendTo,SysSockClose никаких ошибок не возвращают и говорят что все нормально и данные переданы. Версии прошивки, таргета и CodeSys самые последние с сайта, ПЛК-150 У-М.
Хотелось бы устранить эти проблемы как можно скорее.
Заранее спасибо.
diSocket: DINT;
SockAddr: SOCKADDRESS;
res: DINT;
err: BOOL;
buf: STRING(255);
SockAddr.sin_addr:=((10*256+0)*256+6)*256+11;
SockAddr.sin_port:=514;
SockAddr.sin_family:=SOCKET_AF_INET;
buf:='Некоторое сообщение сформированное используя CONCAT()';
diSocket:=SysSockCreate(SOCKET_AF_INET, SOCKET_DGRAM, SOCKET_IPPROTO_UDP);
res:=SysSockSendTo(diSocket,ADR(buf),LEN(buf),SOCK ET_MSG_OOB,ADR(SockAddr),SIZEOF(SockAddr));
err:=SysSockClose(diSocket);
В результате замечено две проблемы.
Проблема №1
Если между пакетами пауза превышает примерно 2 минуты и при этом больше нет ни какого обмена по TCP с ПЛК включая CodeSys (logout) то пакеты начинают терятся, тоесть они не вылетают из ПЛК и соответственно не прилетают на ПК, проверялось с помощью снифера Ethereal. Если в этот момент запустить ping ПЛК с ПК то все нормально.
Проблема №2
Иногда отправляются неправильные пакеты, тоесть содержащие некоректные данные, например
отправляется
"Некоторое сообщение"
а на ПК приходит два пакета.
1 пакет "Конец сообщения"
1 пакет "Конец сообщения Середина сообщения" - а начало перетирается концом сообщения.
Причем чем интенсивней обмен тем больше таких ошибок.
Во всех случаях функции SysSockCreate,SysSockSendTo,SysSockClose никаких ошибок не возвращают и говорят что все нормально и данные переданы. Версии прошивки, таргета и CodeSys самые последние с сайта, ПЛК-150 У-М.
Хотелось бы устранить эти проблемы как можно скорее.
Заранее спасибо.