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


  之前发表的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 QChart更新chart占用内存持续增大问题的解决

下一篇:Qt QByteArray与int、float、vector互转


Qt Modbus
Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图