-
ПЛК100 - TCP Server
Здравствуйте.
Может быть этот вопрос уже поднимался, но я никак не могу найти решение.
Написал простой сервер на ПЛК. К нему нормально все подсоеденяются, отсылаются и принимаются сообщния, но только первые несколько секунд. Потом связь теряется , примерно через одинаковое время. Как будто по таймуту, хотя нигде ничего не прописано. Вот код:
CASE s_state OF
SS_INIT:
FOR i := 1 TO 10 DO
SysSockClose( i );
END_FOR
sock:=SysSockCreate( SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP );
IF sock = 16#FFFFFFFF THEN
s_state := SS_INIT;
RETURN;
END_IF
s_state := SS_OPEN;
SS_OPEN:
tcp_adr.sin_family:=SOCKET_AF_INET;
tcp_adr.sin_port := port;
tcp_adr.sin_addr:=SOCKET_INADDR_ANY;
paddr:=ADR(tcp_adr);
res:=SysSockBind(sock,paddr,SIZEOF(tcp_adr));
res:=SysSockListen( sock, 1 );
paddr:=ADR( accept_adr );
sock_acc := sock;
param_ctrl:=1;
SysSockIoctl( sock_acc, SOCKET_FIONBIO, ADR( param_ctrl ) );
s_state := SS_RCV;
RETURN;
SS_RCV:
rcv_buf_cnt := SysSockRecv( sock_acc, ADR( ByteBuffer ), 130, SOCKET_MSG_OOB );
IF rcv_buf_cnt = 16#FFFFFFFF OR rcv_buf_cnt = 0 THEN
RETURN;
END_IF
FOR i := 0 TO rcv_buf_cnt - 1 DO
tmp_ptr := ADR( ByteBuffer[ i ] );
StringBuffer := CONCAT( StringBuffer, LEFT( tmp_ptr^ , 1 ) );
IF LEN( StringBuffer ) > 254 THEN
StringBuffer := DELETE( StringBuffer, 1, 1 );
END_IF
END_FOR
SendBuffer := CONCAT( 'Recive messager', StringBuffer );
StringBuffer := '';
s_state := SS_SEND;
SS_SEND:
send_buf_cnt := SysSockSend( sock_acc, ADR( SendBuffer ), LEN( SendBuffer ), 0 );
SendBuffer := '';
s_state := SS_RCV;
END_CASE
Подскажите, где может быть ошибка
-
и еще момент, если его постоянно опрашивать то связь держиться
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума