大家好!我最近在调试libmodbus软件包,是作为modbus tcp的client端,目前情况如下:
1、运行代码的板子和电脑之间可以ping通;
2、电脑上运行的是Modbus slave软件,用来模拟modbus tcp的sever端;
3、板子上的client端的代码一直connect不成功。
client端运行的就是软件包里的示例代码
static void test_thread(void *param)
{
uint16_t tab_reg[64] = {0};
modbus_t *ctx = RT_NULL;
//要连接的服务器地址
ctx = modbus_new_tcp("192.168.1.66", 502, AF_INET);
//客户端的ID
modbus_set_slave(ctx, 3);
modbus_set_response_timeout(ctx, 0, 1000000);
_mbtcp_start:
if(modbus_connect(ctx) < 0) //一直卡在这里
goto _mbtcp_restart;
int num = 0;
while (1)
{
memset(tab_reg, 0, 64 * 2);
int regs = modbus_read_registers(ctx, 0, 20, tab_reg);
if(regs < 0)
goto _mbtcp_restart;
printf("-------------------------------------------\n");
printf("[%4d][read num = %d]", num, regs);
num++;
int i;
for (i = 0; i < 20; i++)
{
printf("<%#x>", tab_reg[i]);
}
printf("\n");
printf("-------------------------------------------\n");
rt_thread_mdelay(1000);
}
_mbtcp_restart:
//7-关闭modbus端口
modbus_close(ctx);
rt_thread_mdelay(2000);
goto _mbtcp_start;
//8-释放modbus资源
modbus_free(ctx);
}
打开lwip的调试功能,目前显示的信息如下:
tcp_connect to port 502
tcp_slowtmr: processing active pcb
tcp_close: closing in State: SYN_SENT
tcp_pcb_purge
tcp_pcb_purge: data left on ->unacked
还请大家指点一下,谢谢!
更多回帖