前言

  本文章讲解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库介绍、编译和基础工程模板的更多相关文章

  1. Modbus库开发笔记之十一:关于Modbus协议栈开发的说明

    对于Modbus协议栈的整个开发内容,前面已经说得很清楚了,接下来我们说明一下与开发没有直接关系的内容. 首先,关于我为什么开发这个协议栈的问题.我们的初衷只是想能够在开发产品时不用每次都重写这一部分 ...

  2. Modbus库开发笔记之一:实现功能的基本设计(转)

    源: Modbus库开发笔记之一:实现功能的基本设计

  3. Modbus库开发笔记之十一:关于Modbus协议栈开发的说明(转)

    源: Modbus库开发笔记之十一:关于Modbus协议栈开发的说明

  4. Hi3516开发笔记(二):Hi3516虚拟机基础环境搭建之串口调试、网络连接以及sftp文件传输

    前言   搭建Hi3516的基础虚拟机,为交叉编译环境搭建前期工作.后续会编译一个基本的C语言程序Demo,在HI3516上跑.   虚拟机   开发本对虚拟机做了一些基本要求,如下图:    其实重 ...

  5. Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化

    前言   Windows上mingw32版本的openssl的编译是属于比较棘手的,OpenSSL本身不提供支持..   OpenSSL 介绍   OpenSSL是一个开放源代码的软件库包,应用程序可 ...

  6. Modbus库开发笔记之二:Modbus消息帧的生成

    前面我们已经对Modbus的基本事务作了说明,也据此设计了我们将要实现的主从站的操作流程.这其中与Modbus直接相关的就是Modbus消息帧的生成.Modbus消息帧也是实现Modbus通讯协议的根 ...

  7. Modbus库开发笔记:Modbus ASCII Master开发

    这一节我们来封装Modbus ASCII Master应用,Modbus ASCII主站的开发与RTU主站的开发是一致的.同样的我们也不是做具体的应用,而是实现ASCII主站的基本功能.我们将ASCI ...

  8. Modbus库开发笔记:Modbus ASCII Slave开发

    与Modbus RTU在串行链路上分为Slave和Master一样,Modbus ASCII也分为Slave和Master,这一节我们就来开发Slave.对于Modbus ASCII从站来说,需要实现 ...

  9. Modbus库开发笔记之十:利用协议栈开发Mosbus RTU Slave应用

    上一节我们使用协议占开发了一个Modbus TCP Server应用.接下来我们使用协议栈在开发一个基于串行链路的Mosbus RTU Slave应用. 根据前面对协议栈的封装,我们需要引用Modbu ...

  10. Modbus库开发笔记之九:利用协议栈开发Modbus TCP Server应用

    前面我们已经完成了Modbus协议栈的开发,但这不是我们的目的.我们开发它的目的当然是要使用它来解决我们的实际问题.接下来我们就使用刚开发的Modbus协议栈开发一个Modbus TCP Server ...

随机推荐

  1. [转帖]Native Memory Tracking 详解(4):使用 NMT 协助排查内存问题案例

    https://www.modb.pro/db/557714 从前面几篇文章,我们了解了 NMT 的基础知识以及 NMT 追踪区域分析的相关内容,本篇文章将为大家介绍一下使用 NMT 协助排查内存问题 ...

  2. windowsbat删除命令

    widnwosbat命令 DEL /F /A /Q \?%1 用于删除指定路径下的文件,参数含义如下: /F: Force delete,即强制删除: /A: 用于指定文件属性,A代表存档,D代表目录 ...

  3. 关于git的几点疑问

    git rename后查看之前的记录 对于某个文件进行rename之后,使用show log命令查看之前的修改记录都会丢失,通过命令行方式进行mv之后,在tortoisegit中查看记录还是丢失的 g ...

  4. 为不同版本python安装pip的正确做法

    想学习Python3,但是暂时又离不开Python2.在Windows上如何让它们共存呢? 目前国内网站经常会让大家把其中一个python.exe改个名字(嗯,我也这样讲过,在此纠正一下),这样区分开 ...

  5. 小白学k8s(2)理解flannel网络

    理解flannel网络 简介 Kubernetes中的网络 flannel 总结 参考 理解flannel网络 简介 Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简 ...

  6. 【3】Pycharm超详细基础设置,autopep8 安装规范化程序,每个小trick都可以快速提升变成效率,超级实用!

    相关文章: [1]Pycharm 主题设置推荐Material Theme UI以及编辑环境配置(字体大小和颜色) [2]Pycharm插件推荐,超级实用!每个小trick都可以快速提升变成效率! [ ...

  7. 多智能体强化学习算法【三】【QMIX、MADDPG、MAPPO】

    相关文章: 常见多智能体强化学习仿真环境介绍[一]{推荐收藏,真的牛} 多智能体强化学习算法[一][MAPPO.MADDPG.QMIX] 多智能体强化学习算法[二][MADDPG.QMIX.MAPPO ...

  8. 3.4 DLL注入:全局消息钩子注入

    SetWindowHookEx 是Windows系统的一个函数,可用于让一个应用程序安装全局钩子,但读者需要格外注意该方法安装的钩子会由操作系统注入到所有可执行进程内,虽然该注入方式可以用于绕过游戏保 ...

  9. 6、后端学习规划:Java学习 - 学习规划系列文章

    Java语言在现在的编程语言排行榜上也是前5的存在.经过这么些年的发展,Java的发展没有C#这么大,但是在编程领域,因为有MVC架构,以及Spring框架的支持,以及微服务架构等等,Java这些年也 ...

  10. 自然语言开发AI应用,利用云雀大模型打造自己的专属AI机器人

    如今,大模型层出不穷,这为自然语言处理.计算机视觉.语音识别和其他领域的人工智能任务带来了重大的突破和进展.大模型通常指那些参数量庞大.层数深.拥有巨大的计算能力和数据训练集的模型. 但不能不承认的是 ...