【Qt】使用libmodbus实现ModBusTcp

本文介绍了如何在Qt项目中使用libmodbus库实现ModBusTcp通信。首先从github下载并编译libmodbus,接着在Qt项目中引入编译后的库文件,解决头文件路径问题。注意,读写数据操作不应放在构造函数中,以防止失灵。此外,还提到了PLC的TCP联机保持时间设置对连接的影响,以及短连接与长连接的选择依据。最后提供了官方API和中文API的学习资源。
摘要由CSDN通过智能技术生成


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
  • .h文件引入如下,便可使用
#include "libmodbus\modbus.h"
  • 出现报错,找不到modbus.h
 "modbus.h"换成<libmodbus\modbus.h>

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, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值