这里写目录标题
- 下载
- 编译
- 使用
- Demo
- 参照:
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"
Demo
读写数据不能放在构造函数里,不然失灵,未知原因
mb = modbus_new_tcp("192.168.1.x",502);
modbus_set_slave(mb,1);//设置需要连接的从机地址
modbus_connect(mb);
//2.设置通讯超时时间
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);
// 读写数据不能放在构造函数里,不然失灵,未知原因
//3.读数据
uint16_t tab_reg[128]={0};
int regs=modbus_read_registers(mb, 202, 1, tab_reg); //从0开始读2个数
if(regs == -1){
qDebug()<<"读取失败返回 ";
//读取失败返回-1
}
else { //读取成功返回0
qDebug()<<"tab_reg "<<tab_reg[0]; //input_registers的第1个数
}
int wreg = modbus_write_register(mb,202,50);
if(wreg == -1){
//写入失败返回-1
qDebug()<<"写入失败 ";
}
else { //写入成功返回0
qDebug()<<"写入成功 ";
}
参照:
官方API
https://libmodbus.org/reference/
中文API
https://blog.csdn.net/qq_23670601/article/details/82155378
https://blog.csdn.net/q66666666djjshs/article/details/120856006