请教版主 LWIP问题
我用STM32F107实现MODBUS TCP 看了很多例子都是每次访问都重新建立连接,数据传输完成,删除连接。现在上位机要求不断开连接。一直进行数据通信。我修改了下例子。现在出现这种情况,每次单片机复位可连接,一旦在连接中,上位机进行断开或非正常情况断开,在连接,没办法进行连接,单请大家帮忙解决下,谢谢了,我的TCP处理任务如下。void TCP_Modbus_SlaveEntry(void * ptemp)
{
static struct netconn*__pSTConn, *__pstNewConn;
static struct netbuf *__pstNetbuf;
u8 __u8Err;
ptemp = ptemp;
// TCP modbus 初始化;
TCP_ModbusInit(); //加载接受数据
//* 初始化LwIP
__ilvInitLwIP();
//* 设置LwIP,包括添加配置网络接口、建立接收任务等工作
__ilvSetLwIP();
__pSTConn = netconn_new(NETCONN_TCP);
netconn_bind(__pSTConn, NULL, 80);
netconn_listen(__pSTConn);
__pstNewConn = netconn_accept(__pSTConn);
while(OS_TRUE)
{
if(__pstNewConn != NULL)//if(1)
{
__pstNetbuf = netconn_recv(__pstNewConn);
if(__pstNetbuf != NULL)
{
netbuf_copy(__pstNetbuf,TCP_Modbus_SlaveRevBuf,TCP_MODBUS_SLAVE_REV_BUF_SIZE);
__u8Err = TCP_ModbusSlaveRcv(&MSDpr_TCP); //MODBUS TCP分析
if(__u8Err == ERROR) // 收到的帧有错误;
{
netconn_write(__pstNewConn, "cuowu",10, NETCONN_COPY); // 错误处理;
OSTimeDlyHMSM(0, 0, 0, 40);
}
else
{
netconn_write(__pstNewConn, MSDpr_TCP.psend,MSDpr_TCP.sendnum, NETCONN_COPY);
OSTimeDlyHMSM(0, 0, 0, 40);
}
}
netbuf_delete(__pstNetbuf);
netconn_close(__pstNewConn); // 删除连接句柄
//while(netconn_delete(__pstNewConn) != ERR_OK);
OSTimeDlyHMSM(0, 0, 0, 100);
}
}
} 不同的OS不同的移植还是有差别的。 谢谢 版主回复,能否提供些思路,感恩不尽, 我用的是单片机心跳包+断线重连检测+软件复位的方式来重连的,虽然能够勉强连接,但是还是感觉这样太麻烦了,而且也不是十分稳定,每次都要连续连接两次才能重新建立连接,还是想找一个其他的方法,最好是从协议栈入手修改的!
页:
[1]