当前位置:   article > 正文

【Qt】使用libmodbus实现ModBusTcp_qt libmodbus使用

qt libmodbus使用


Qt自带QModbusTcpClient,换个电脑就不好使了,换libmodbus

下载

可以去github下载

链接: https://pan.baidu.com/s/13lgEZ59Dt5M7zmTJNpfKvg?pwd=yzfm 提取码: yzfm
下载libmodbus 并解压

编译

  • 进入该目录下libmodbus-master\src\win32
  • 使用如下应用运行configure.js文件
    在这里插入图片描述
    出现下图情况表示成功,关闭即可
    在这里插入图片描述
  • 使用VS2019打开与configure.js文件同目录下的modbus-9.sln文件
    打开时出现下图情况点击确定即可
    在这里插入图片描述
  • Release编译
    在这里插入图片描述
  • 编译之后会出现一个错误,原因未知,按确定不影响,这时libmodbus-master\src\win32目录下会生成modbus.lib和modbus.dll两个文件
    在这里插入图片描述

使用

  • Qt项目下新建libmodbus文件夹,拖入如下文件夹
    在这里插入图片描述
  • Qt加入已存在路径

在这里插入图片描述

  • pro文件加入
LIBS += -Ldll -lws2_32
  • 1
  • .h文件引入如下,便可使用
#include "libmodbus\modbus.h"
  • 1
  • 出现报错,找不到modbus.h
 "modbus.h"换成<libmodbus\modbus.h>
  • 1

Demo

读写数据不能放在构造函数里,不然失灵,未知原因

// 连接
mb = modbus_new_tcp("192.168.1.x",502);
modbus_set_slave(mb,1);//设置需要连接的从机地址
modbus_connect(mb);

// 设置通讯超时时间
struct timeval t;
t.tv_sec=0;
t.tv_usec=1000000;   //设置modbus超时时间为1000毫秒,注意:经测试,如果没有成功建立tcp连接,则该设置无效。
modbus_set_response_timeout(mb,t.tv_sec,t.tv_usec);
          
// 读写数据不能放在构造函数里,不然失灵,未知原因
// 读数据
uint16_t tab_reg[128]={
   0};
int regs=modbus_read_registers(mb, 202, 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/971495
推荐阅读
相关标签
  

闽ICP备14008679号