CODESYS форум

Добро пожаловать на официальный форум CODESYS
Deutsche Version English version russian version 
Текущее время: Вс июн 25, 2017 11:25 am

Часовой пояс: UTC+01:00




Начать новую тему  Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: Пт июл 13, 2012 8:20 am 
Не в сети

Зарегистрирован: Ср июл 11, 2012 6:22 pm
Сообщения: 23
Что имеем: плату 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 сообщение ] 

Часовой пояс: UTC+01:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB