一. libmodbus 支持udp版库下载
https://github.com/systemmonkey42/libmodbus/tree/udp_support
二. MSYS2编译工具安装
(1)下载MSYS2并安装
下载地址:https://www.msys2.org/
双击该exe,安装msys2
(2) 安装编译所需库
在软件安装后所在位置,找到MINGW64.exe并打开
更新msys2,在命令行里输入pacman -Syu
pacman -Syu
之后会提示更新完成,需要关闭MSYS2方可成功,如下图输入Y后按下回车键,MSYS2会自动关闭
重新打开MSYS2,输入如下命令安装gcc
pacman -S mingw-w64-x86_64-gcc
输入如下代码安装automake
pacman -S automake
输入如下代码,安装libtool
pacman -S libtool
autoconf-wrapper 所需库安装
pacman -S autoconf-wrapper
三. 编译libmodbus库
(1) 打开libmodbus的解压文件,注意到里面的autogen.sh文件
(2) 进入autogen.sh 所在目录后,输入如下命令
./autogen.sh
(3) 继续输入命令
./configure
(4)至此完成了对libmodbus在Windows下的编译过程
四.libmodbus导入Qt Creator中使用的方式
(1) 新建一个mymodbusTest工程,同时在工程目录下创建libmodbus目录名
(2) 将modbus编译后生成的config.h 以及src目录下所有的.c .h 文件,全部复制到libmodbus目录中
(3) 通过添加现有文件,将这些libmodbus库文件添加到qt工程中
(4) ws2_32.dll库文件的复制
打开C:Windows\System32
复制后结果如下:
(5) 在.pro文件中加上”LIBS += -Ldll -lws2_32”
(6) 修改libmodbus文件夹下的modbus-private.h和modbus.c代码中的 #include <config.h>为 #include <libmodbus/config.h>
(7) 更改modbus-udp.c文件代码
(8) 在main.cpp文件中编写如下代码,测试udp
#include <QCoreApplication>
#include <QDebug>
#include<libmodbus/modbus.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
modbus_t *ctx;
// 创建一个 libmodbus 上下文
ctx = modbus_new_udp("127.0.0.1", 502);
if (ctx == NULL) {
qDebug() << "Failed to create MODBUS context.";
return 1;
}
// 连接到远程 MODBUS 服务器
if (modbus_connect(ctx) == -1) {
qDebug() << "Failed to connect to MODBUS server.";
modbus_free(ctx);
return 1;
}
// 读取一个寄存器的值
uint16_t reg_value[5];
int rc = modbus_read_registers(ctx, 0, 5, reg_value);
if (rc == -1) {
qDebug() << "Failed to read MODBUS register.";
} else {
// qDebug() << "MODBUS register value:" << reg_value[1];
for (int i = 0; i < rc; ++i) {
printf("%u ", reg_value[i]);
}
}
// 断开与远程 MODBUS 服务器的连接
modbus_close(ctx);
modbus_free(ctx);
return a.exec();
}
(9) 使用modbus slave软件测试
附:相关软件下载,需要请留言
msys2 下载
链接:https://pan.baidu.com/s/1df3N5oDvQhApMNM2dNZcow
libmodbus-udp_support.zip
链接:https://pan.baidu.com/s/1m7sUtjGE-47a0wOJAYeETw
mbslaveX64.exe
链接:https://pan.baidu.com/s/1nxcN9kIUVwSMTGGjjiMCUA