LibModbus库开发笔记(一):libmodbus库介绍、编译和基础工程模板
前言
本文章讲解libmodbus。
libModbus介绍
libmodbus是一个免费软件库,可根据Modbus协议发送/接收数据。该库用C编写,并支持RTU(串行)和TCP(以太网)通信。
编译:平台windows + Qt5.9.3 + mingw32
步骤一:下载
https://github.com/stephane/libmodbus
QQ群下载地址:1047134658(点击“文件”搜索“modbus”,群内与博文同步更新)
步骤二:使用msys编译,配置好环境

步骤三:命令行引入mingw32环境变量
export PATH=$PATH:/mingw530_32/bin
步骤四:配置configure
cd /home/21497/compile/modbus
tar xvf libmodbus-3.1.6.tar.gz
cd libmodbus-3.1.6
./configure --prefix=/home/21497/compile/modbus/libmodbus-3.1.6/install

错误,识别平台失败,如下图:

./configure --prefix=/home/21497/compile/modbus/libmodbus-3.1.6/install -build=x86
是在mysy使用linux环境编译x86构架下的,如下图:

步骤五:编译make
make -j16

再单线程确认一下

步骤六:安装make install
make install
会出错,缺一些文件夹,手动自己建文件夹即可。

步骤七:读者请稍微核对下文件

模块化

Demo
bool ModbusManager::testEnvAndRtu()
{
LOG << LIBMODBUS_VERSION_STRING;
// 步骤一:创建modbus RTU
modbus_t *pModbus = 0;
pModbus = modbus_new_rtu("com5",
115200,
'E',
8,
1);
if(!pModbus)
{
LOG << "Failed to modbus_new_rtu";
return false;
}
LOG << "Succeed to modbus_new_rtu";
// 步骤二: 485 RTU 模式
modbus_rtu_set_serial_mode(pModbus, MODBUS_RTU_RS485);
// 步骤三: 设置从机站号 1
modbus_set_slave(pModbus, 1);
// 步骤四:设置超时时间 100 ms
modbus_set_response_timeout(pModbus, 0, 100 * 1000);
// 步骤五: 连接 (注意:经过测试,只是485和232只是打开串口,并未交互)
int ret = modbus_connect(pModbus);
if(ret)
{
LOG << "Failed to modbus_connect, ret =" << ret;
return false;
}
LOG << "Succeed to modbus_connect, ret =" << ret;
// 步骤六:读取线圈
uint8_t buffer8t[10] = {0x00};
ret = modbus_read_bits(pModbus, 25, 10, buffer8t);
if(ret <= 0)
{
LOG << "Failed to modbus_read_registers, ret =" << ret;
return false;
}
LOG << "Succeed to modbus_read_registers, ret =" << ret;
// 步骤七:打印返回
for(int index = 0; index < 10; index++)
{
LOG << QString("%1").arg(buffer8t[index]);
}
// 步骤八:读取寄存器
uint16_t buffer16t[10] = {0x00};
ret = modbus_read_registers(pModbus, 95, 10, buffer16t);
if(ret <= 0)
{
LOG << "Failed to modbus_read_registers, ret =" << ret;
return false;
}
LOG << "Succeed to modbus_read_registers, ret =" << ret;
// 步骤九:打印返回
for(int index = 0; index < 10; index++)
{
LOG << QString("%1").arg(buffer16t[index]);
}
// 步骤十:读取寄存器
memset(buffer16t, 0, 10);
ret = modbus_read_input_registers(pModbus, 100, 1, buffer16t);
if(ret <= 0)
{
LOG << "Failed to modbus_read_registers, ret =" << ret;
return false;
}
LOG << "Succeed to modbus_read_input_registers, ret =" << ret;
// 步骤十一:打印返回
for(int index = 0; index < 10; index++)
{
LOG << QString("%1").arg(buffer16t[index]);
}
return true;
}
Demo演示

工程模板
modbusDemo_v1.0.0_基础模板_读取线圈_读取寄存器简单测试.rar
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/116196923
LibModbus库开发笔记(一):libmodbus库介绍、编译和基础工程模板的更多相关文章
- Modbus库开发笔记之十一:关于Modbus协议栈开发的说明
对于Modbus协议栈的整个开发内容,前面已经说得很清楚了,接下来我们说明一下与开发没有直接关系的内容. 首先,关于我为什么开发这个协议栈的问题.我们的初衷只是想能够在开发产品时不用每次都重写这一部分 ...
- Modbus库开发笔记之一:实现功能的基本设计(转)
源: Modbus库开发笔记之一:实现功能的基本设计
- Modbus库开发笔记之十一:关于Modbus协议栈开发的说明(转)
源: Modbus库开发笔记之十一:关于Modbus协议栈开发的说明
- Hi3516开发笔记(二):Hi3516虚拟机基础环境搭建之串口调试、网络连接以及sftp文件传输
前言 搭建Hi3516的基础虚拟机,为交叉编译环境搭建前期工作.后续会编译一个基本的C语言程序Demo,在HI3516上跑. 虚拟机 开发本对虚拟机做了一些基本要求,如下图: 其实重 ...
- Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
前言 Windows上mingw32版本的openssl的编译是属于比较棘手的,OpenSSL本身不提供支持.. OpenSSL 介绍 OpenSSL是一个开放源代码的软件库包,应用程序可 ...
- Modbus库开发笔记之二:Modbus消息帧的生成
前面我们已经对Modbus的基本事务作了说明,也据此设计了我们将要实现的主从站的操作流程.这其中与Modbus直接相关的就是Modbus消息帧的生成.Modbus消息帧也是实现Modbus通讯协议的根 ...
- Modbus库开发笔记:Modbus ASCII Master开发
这一节我们来封装Modbus ASCII Master应用,Modbus ASCII主站的开发与RTU主站的开发是一致的.同样的我们也不是做具体的应用,而是实现ASCII主站的基本功能.我们将ASCI ...
- Modbus库开发笔记:Modbus ASCII Slave开发
与Modbus RTU在串行链路上分为Slave和Master一样,Modbus ASCII也分为Slave和Master,这一节我们就来开发Slave.对于Modbus ASCII从站来说,需要实现 ...
- Modbus库开发笔记之十:利用协议栈开发Mosbus RTU Slave应用
上一节我们使用协议占开发了一个Modbus TCP Server应用.接下来我们使用协议栈在开发一个基于串行链路的Mosbus RTU Slave应用. 根据前面对协议栈的封装,我们需要引用Modbu ...
- Modbus库开发笔记之九:利用协议栈开发Modbus TCP Server应用
前面我们已经完成了Modbus协议栈的开发,但这不是我们的目的.我们开发它的目的当然是要使用它来解决我们的实际问题.接下来我们就使用刚开发的Modbus协议栈开发一个Modbus TCP Server ...
随机推荐
- [转帖]Linux-find命令报错: missing argument to `-exec'
https://www.cnblogs.com/yeyuzhuanjia/p/17427143.html 报错提示:find: missing argument to `-exec' 今天写一个清理脚 ...
- [转帖]使用GCC编译器实测兆芯KX-U6780A的SPEC CPU2006成绩
https://baijiahao.baidu.com/s?id=1722775453962904303 兆芯KX-U6780A是一款8核2.7GHz的使用x86/AMD64指令集(架构)的国产C ...
- [转帖]Linux-文本处理三剑客awk详解+企业真实案例(变量、正则、条件判断、循环、数组、分析日志)
https://developer.aliyun.com/article/885607?spm=a2c6h.24874632.expert-profile.313.7c46cfe9h5DxWK 简介: ...
- 工单 工序外协 更改PR/PO
工序外协详解介绍'https://blog.csdn.net/weixin_43814706/article/details/113586961' 需求:创建工序委外的工单时更改对应PR/PO 行文本 ...
- elementui中自定义Select选择器样式自定义
<el-select class="my-el-select" v-model="tenantCont" placeholder="请输入机构标 ...
- 手撕Vue-Router-实现router-view
前言 在上一篇 [手撕Vue-Router-实现router-link] 中,我们实现了 router-link 组件,这一篇我们来实现 router-view 组件. 实现思路 router-vie ...
- C++ Boost 内存池与智能指针
Pool内存池: 只能开辟常规内存,数据类型为int,float,double,string等. #include <iostream> #include <boost/pool/p ...
- C++ Boost 文件系统相关函数
基础处理 #include <iostream> #include <boost/foreach.hpp> #include <boost/filesystem.hpp& ...
- (转)时代的见证:集成更新的Windows 7旗舰版、专业版镜像
制作缘起:微软曾于2019年提供过两份内部集成更新的英文旗舰版.专业版镜像(参见:集成IE11+最新补丁:微软新版Windows 7镜像泄露),方便用户安装,缩短更新过程.经我们下载安装研究发现,这两 ...
- playwright 一些方法解决cloudflare防护页的问题
在尝试从一个使用Cloudflare Web应用程序防火墙(WAF)保护的网站获取数据时,我遇到了一些挑战.该网站的安全措施非常严格,以至于在正常浏览几个页面后,Cloudflare的检查页面就会出现 ...