当前位置: 首页 > 网络知识

Qt 使用第三方libmodbus库实现Modbus通讯

时间:2026-01-29 09:26:48

  之前发表的Modbus通讯程序使用了QT自带的Modbus库,由于QT自带库的数据响应使用的是信号和槽来实现的,所以在一些读写频率较高的场景下,会引发很多异常问题,此篇文章使用C语言写的第三方Modbus库来实现modbus通讯。
  经程序运行测试,调用该库进行modbus通讯完虐QT自带mosbus库。
一、配置modbus库

  libmodbus库下载链接:sourceforge/projects/libmodbus/

  将下载的库文件夹放入源文件根目录下(pro文件中要记得添加LIBS += Ldll lws2_32)

  [libmodbus文件夹和ws2_32.dll(依赖该动态库)放入根目录下 ]

二、使用modbusc库

1.modbusRTU

1 //1.初始化连接数据 2 char *pc = "C1"; //C口 3 int Address = 1; //站号 4 modbus_t *mb; 5 mb = modbus_new_rtu(pc,9600,'N',8,1); 6 modbus_set_slave(mb, Address); //从机地址 7 modbus_connect(mb); // 8 9 //2.设置通讯超时时间 10 struct timeval t; 11 t.tv_sec=0; 12 t.tv_usec=1000000; //设置modbus超时时间为1000毫秒,注意:经测试,如果没有成功建立tcp连接,则该设置无效。 13 modbus_set_response_timeout(mb,t.tv_sec,t.tv_usec); 14 15 16 //3.读数据 17 uint16_t tab_reg[128]=; 18 int regs=modbus_read_input_registers(mb, 0, 2, tab_reg); //从0开始读2个数 19 if(regs == 1) 22 else 26 27 uint8_t bits[128]=; 28 int rbits = modbus_read_bits(mb, 0, 2, bits); 29 if(rbits == 1) 32 else 36 //...剩下的两个读取同理 37 38 39 //4.写数据 40 uint8_t bitsw[128]=; 41 bitsw[0]=1;bitsw[1]=1; 42 int wbits = modbus_write_bits(mb, 0, 2, bitsw); //写两个数进去 43 if(wbits == 1) 46 else 49 50 uint16_t registers[128]; 51 registers[0] = 200;registers[1] = 203; 52 int wreg = modbus_write_registers(mb,0,2,registers); 53 if(wreg == 1) 56 else 59 60 61 //5.调用完成后释放资源 62 modbus_close(mb); modbus_free(mb);

2.modbusTCP

1 //与RTU不同的是将串口转为网口初始化 2 //mb = modbus_new_rtu(pc,9600,'N',8,1); //串口用 3 mb = modbus_new_tcp("127.0.0.1",502);



上一篇:Qt 使用 Visual Leak Detector(方式一)
下一篇:Qt QChart更新chart占用内存持续增大问题的解决
Qt Modbus
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素