嵌入式技术william hill官网
直播中

贾大林

7年用户 1348经验值
私信 关注
[问答]

libmodbus作为modbusTPC的client端connect失败怎么办?

大家好!我最近在调试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);
        }
        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
还请大家指点一下,谢谢!

回帖(2)

李华

2023-2-10 14:32:43
把链接里提到的几行代码注释掉,所在函数也告诉你了
举报

贾大林

2023-2-10 14:33:13
我把下面这个部分注释掉了
2.jpg
程序就会卡在这个地方
3.jpg
报的错误差不多
tcp_connect to port 502
tcp_close: closing in State: SYN_SENT
tcp_pcb_purge
tcp_pcb_purge: data left on ->unacked
tcp_slowtmr: no active pcbs
tcp_connect to port 502
tcp_close: closing in State: SYN_SENT
tcp_pcb_purge
tcp_pcb_purge: data left on ->unacked
tcp_connect to port 502
tcp_close: closing in State: SYN_SENT
tcp_pcb_purge
tcp_pcb_purge: data left on ->unacked
举报

更多回帖

×
20
完善资料,
赚取积分