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性能分析(二):理解CPU上下文切换
在计算机中,上下文切换是指存储进程或线程的状态,以便以后可以还原它并从同一点恢复执行.这允许多个进程共享一个CPU,这是多任务操作系统的基本功能. Linux 是一个多任务操作系统,它支持远大于 CP ...
- [转帖]精通awk系列(19):awk流程控制之break、continue、next、nextfile、exit语句
https://www.cnblogs.com/f-ck-need-u/ 回到: Linux系列文章 Shell系列文章 Awk系列文章 break和continue break可退出for.wh ...
- git查看自己是从那个分支建的分支
可能发生的情况 很多时候,开始建分支的时候, 能够确认自己是那个分支建的,但是当写完功能之后, 再去回想,有时是忘记自己基于那个分支建的分支. 这时有一个命令的话就可以很快的定位了. 查看创建的分支来 ...
- 限制input框中字数的输入maxlength
今天产品提出一个需求就是.限制input框中的的值. 当用户超过10个字符时,用户再次输入的时,就不能够输入了. (最后就能够输入10个字符) maxlength=10 <input maxle ...
- Jekyll安装
本文来自Jekyll官方文档. 简介 Jekyll是一个静态网站生成器,它可以把Markdown写就的文本根据指定的布局生成静态网站.你可以调整网站的外观.URL.页面展示数据等信息. 准备工作 Je ...
- python中可变参数与装饰器的例子
python的可变参数 方法定义 #*args是可以传list类型的可变参数,**kwargs是可以传dict的可变参数 def wrapper(*args, **kwargs): 使用示例 def ...
- springboot项目导入外部jar包的bean的几种方式
背景 公司封装了基础包和日志包,将公共的配置抽取出来,供所有项目使用,因此就需要考虑,怎么引入外部jar包的Bean实例: 思考 因为公司的jar包就是普通的jar,不支持springboot的自动配 ...
- tensorflow语法【tf.gather_nd、reduce_sum、collections.deque 、numpy.random.seed()、tf.gradients()】
相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...
- 21.11 Python 使用CRC图片去重
使用CRC32还可实现图片去重功能,如下FindRepeatFile函数,运行后通过对所有文件做crc校验并将校验值存储至CatalogueDict字典内,接着依次提取CRC特征值并将其存储至Cata ...
- 认识3D模型-GLTF文件
GLTF文件格式 glTF的全称(Graphics Language Transmission Format)图形语言传输格式.是三维场景和模型的标准文件格式. glTF 核心是 JSON 文件,描述 ...