CODESYS форум
https://forum-ru.codesys.com/

вопрос по tcp/ip клиенту на codesys, нет коннекта
https://forum-ru.codesys.com/viewtopic.php?f=2&t=1788
Страница 1 из 1

Автор:  flint21rus [ Пт июл 13, 2012 8:20 am ]
Заголовок сообщения:  вопрос по tcp/ip клиенту на codesys, нет коннекта

Что имеем: плату DK55(поддерживает syslibsockets), она соединена с ПК через ethernet(напрямую), ip=192.168.100.2 у платы и ip=192.168.100.1 у ПК, на ПК запущен tcp/ip сервер(порт 3490), написанный на С++(работает корректно - проверено через клиент, написанный также на С++).
написанный на codesys клиент прогоняю по шагам не в режиме эмуляции(я так понимаю он выполняется на контроллере), при этом сокет создается, но функция SysSockConnect - выдает false, нет соединения, в чем я ошибся, подскажите пожалуйста?

Код:
PROGRAM PLC_PRG
VAR
   mySocket:DINT;
   tempArr:ARRAY [0..1024] OF BYTE;
   i:DINT;
   myConnect:CONNECT_TO_SERVER;
   myQuery:QUERY_TO_SERVER;
END_VAR

myConnect(port_in:=3490 , addr_in:='192.168.100.1' , socket=> mySocket);
mySocket:=myConnect.socket;
UNCONNECT_TO_SERVER(mySocket);


вот код функц. блока:
Код:
FUNCTION_BLOCK CONNECT_TO_SERVER
(*
ñîçäàíèå ñîêåòà è ïîäêëþ÷åíèå ê ñåðâåðó
Result=-1, åñëè îøèáêà ïðè ñîçäàíèè ñîêåòà
Result=-2, åñëè îøèáêà ïðè ïîäêëþ÷åíèè  ê ñåðâåðó
Result=any other number
*)
VAR_INPUT
   port_in:UINT;            (*ïîðò ñåðâåðà*)
   addr_in:STRING(80);      (*ip-àäðåñ ñåðâåðà*)
END_VAR
VAR_OUTPUT
   socket:DINT;            (*äåñêðèïòîð ñîêåòà*)
END_VAR
VAR
   serv_addr: SOCKADDRESS;
   i:INT;
END_VAR

(*ñîçäàíèå íîâîãî stream ñîêåòà â tcp/ip*)
socket:=SysSockCreate(SOCKET_AF_INET,SOCKET_STREAM, SOCKET_IPPROTO_TCP);
IF socket<>SOCKET_INVALID THEN
   (*ïîäêëþ÷åíèå ê ñåðâåðó*)
   serv_addr.sin_family:=SOCKET_AF_INET;
   serv_addr.sin_port:=SysSockHtons(port_in);
   serv_addr.sin_addr:=SysSockInetAddr(addr_in);
   FOR i:=0 TO 7 BY 1 DO
      serv_addr.sin_zero[i]:=0;
   END_FOR
   IF NOT(SysSockConnect(socket,ADR(serv_addr),SIZEOF(serv_addr))) THEN
   socket:=-2;
   END_IF
END_IF


ВСЕ, я разобрался, выполнение поставил на проход только 1 цикла главного POU - PLC_PRG, до этого он зацикливался, сам код оказался верным

Страница 1 из 1 Часовой пояс: UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/