보드 하나에 W5500 2개를 이용 내부, 외부 통신

PLC.zip (65.4 KB)
우선 패킷 보냈습니다.

그리고 while(1)
{
freesize = getSn_TX_FSR(sn);
tmp = getSn_SR(sn);
if ((tmp != SOCK_ESTABLISHED) && (tmp != SOCK_CLOSE_WAIT))
{
socketclose(sn);
return SOCKERR_SOCKSTATUS;
}
if( (sock_io_mode & (1<<sn)) && (len > freesize) ) return SOCK_BUSY;
if(len <= freesize) break; 이부분 에 있습니다.
}

이부분 freesize 부분이 감소 합니다.

그리고 와치독이 걸립니다.

와치독이 걸린다면 펌웨어가 돌다가 send()에서 뻗었다고 생각해도 무방하나요?

while문전에

freesize = getSn_TxMAX(sn);
if (len > freesize) len = freesize; // check size not to exceed MAX size.

이 내용에 대한 코드가 존재하나요?

일단 while에서 빠져나오지 못하는 이유는 없습니다.

freesize 값은 while동안 변할 수없는 값입니다.

만약 문제가 있으시면 일단 while문을 전부 주석처리하셔서 동작시켜보세요

PLC1.zip (139.2 KB)

재접속 하는 부분이 아래의 부분입니다.

210에서 SYN패킷을 보냈을꺼고 150에서 그에 대한 SYN + ACK을 전송하는 부분입니다.

안녕하세요.

우선 데이터가 끊어 지는 부분은 약간의 수정으로 처리 하였습니다.
그냥… plc에서 들어오는 데이터 11byte이라 getSn_RX_RSR(0); 이용하여 0byte 일 경우 소켓 클로즈 처리 할려고 했는데 getSn_RX_RSR(0); 이 값을 보니 , 0~ 2048 증가 하는것 같더라고요 … 제 생각에 11byte라고 떠야 하는데 그게 아니고 또한 2048이 넘으면 pLC가 멈추는 현상이 있는것 같았습니다. 그래서 2048 넘어가면 소켓 클로즈 처리 했습니다. 결국 이런 방법을 이용하여 데이터는 계속 받고 있습니다. 다만 걱정되는 부분은 데이터를 받다가 소켓 클로즈 되면 몇 바이트를 PLC에 못 보낼수 있다고 생각됩니다.
혹시 이런 방법 말고 다른 방법은 없을까요 ?

이제 거의 다 된 느낌이네요 ~…

덕분에 공부도 되고 감사했습니다.

안녕하세요

RX_RSR은 Socket이 Recv한 데이터 크기를 나타냅니다. Socket Recv Buffer가 2K byte라면 RX_RSR값은 2048이 최대값이 맞습니다. 따라서 RX_RSR이 2048인 경우 Socket은 더이상 Recv할 Buffer가 없기때문에 PLC와 TCP 통신중이라면 PLC쪽에서 데이터를 전송할 수 없습니다.
RX_RSR은 사용자가 Read하지 않는한 값은 계속 누적됩니다. (Recv를 통해 데이터가 Buffer에 쌓이므로)
따라서 RX_RSR이 0보다 큰경우는 무조건 사용자측에서 Buffer의 데이터를 읽어가는것이 통신지연이나 데이터 로스를 막을 수 있습니다. (Read하지 않으면 RX_RSR은 2048이 되고 데이터를 더이상 수신할 수 없습니다.)

만약에 2048이 너무 적다고 생각되시면 Socket Recv Buffer Size(Sn_RXBUF_SIZE)를 증가시키는 것도 방법입니다.
그러나 가장 중요한 것은 RX_RSR이 0보다 큰 경우에는 Read를 해주셔서 Buffer가 가득차지 않도록 해주시는것이 통신과정에서 중요해보입니다.

감사합니다.

넵 답변주셔서 감사합니다.

말씀하신대로 저도 그 부분에 대해서 생각을 했습니다.

그래서 오늘 테스트 해보니 잘되네요…

그냥 send 만 하면 될듯 했는데 그게 아니였네요 …

recive 버퍼에 자동으로 클리어 해주는 줄 알았습니다.

지금은 온도가 50도 정도 되는데 온도만 커버 된다면 무리 없을듯 합니다.

감사합니다.

잘되신다니 고생하신 보람이 있으셔서 다행입니다!

온도부분은 가격적인 측면을 잘 몰라서 좋은 조언일지는 모르지만

회로자체적으로 해결이 힘드시다면(모듈로도 대체하기 어려우시다면)

방열판 부착이 도움이 되실겁니다

감사합니다

덕분에 많은 도움이 되었습니다.
협조해주셔서 감사합니다.

우선 계속 에이징테스트 해봐야겠네요 .