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

李艳

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

libmodbus软件包作为modbus tcp的client端调试失败怎么办

大家好!我最近在调试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

还请大家指点一下,谢谢!

回帖(1)

刘杰

2022-8-3 10:26:06
把提到的几行代码注释掉,所在函数也告诉你了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分