ModbusRTU err:connection timeout解决办法

您所在的位置:网站首页 linux串口数据丢失解决办法 ModbusRTU err:connection timeout解决办法

ModbusRTU err:connection timeout解决办法

2023-03-19 22:40| 来源: 网络整理| 查看: 265

ModbusRTU err:connection timeout解决办法

一般遇到问题不要慌 检查以下几条帮你轻松解决: 1、确保链路畅通(也就是串口收发数据是否正常) 2、排查是否硬件有问题 3、程序是否有问题 如若出现下面问题,请查看超时时间是否设置正确 这种问题出现的原因: 其一是因为串口断开; 其二:超时时间设置异常; 请务必注意这一点 本人在这个上面犯错 解决办法来了 里面的响应延时必须是1ms 这个是基于本人用的libmodbus开源库的缘由,库里面的机制是这样的如果超过1ms还没有响应,那么就判定为连接不上。 发现错误原因:本人执行程序 然后查看modbus salve主机接受的码字来进行判断是否为超时时间的问题 到这里该错误就搞定了 顺便附上demo

#include #include #include #include #include #include "modbus.h" //modbus动态库文件 int main(int argc, char *argv[]) { uint16_t tab_reg[64] = {0}; //定义存放数据的数组 modbus_t *ctx = NULL; int rc; int i; //以串口的方式创建libmobus实例,并设置参数 ctx = modbus_new_rtu("/dev/ttyWCHUSB3", 115200, 'N', 8, 1); if (ctx == NULL) //使用UART1,对应的设备描述符为ttyS1 { fprintf(stderr, "Unable to allocate libmodbus contex\n"); return -1; } modbus_set_debug(ctx, 1); //设置1可看到调试信息 modbus_set_slave(ctx, 1); //设置slave ID if (modbus_connect(ctx) == -1) //等待连接设备 { fprintf(stderr, "Connection failed:%s\n", modbus_strerror(errno)); return -1; } while (1) { printf("\n----------------\n"); rc = modbus_read_registers(ctx, 0, 30, tab_reg); if (rc == -1) //读取保持寄存器的值,可读取多个连续输入保持寄存器 { fprintf(stderr,"%s\n", modbus_strerror(errno)); return -1; } for (i=0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3