LibModbus库开发笔记(一):libmodbus库介绍、编译和基础工程模板

简介: 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

相关文章
|
传感器 网络协议 Linux
在Linux中使用libmodbus库进行Modbus TCP通信
Modbus TCP是一种常见的工业通信协议,用于在自动化系统中传输数据。libmodbus是一个流行的C库,用于在Linux系统上实现Modbus TCP通信。本文将介绍如何使用libmodbus库在Linux上创建Modbus TCP通信的示例代码。
3692 0
|
传感器 Linux
在Linux中使用libmodbus库进行Modbus RTU主从机通信
Modbus RTU是一种常见的工业通信协议,用于在自动化系统中传输数据。libmodbus是一个流行的C库,用于在Linux系统上实现Modbus通信。本文将介绍如何使用libmodbus库在Linux上创建Modbus RTU主从机通信的示例代码。
5831 0
|
前端开发 JavaScript C++
打造卓越 QML 层级设计:从入门到精通(一)
打造卓越 QML 层级设计:从入门到精通
3190 1
【MODBUS】libmodbus库从Modbus从站读取值
【MODBUS】libmodbus库从Modbus从站读取值
413 0
|
安全 数据处理 C++
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
3014 3
|
IDE Linux 开发工具
内存泄漏检测工具Valgrind:C++代码问题检测的利器(一)
内存泄漏检测工具Valgrind:C++代码问题检测的利器
2752 0
|
存储 编解码 算法
Elasticsearch存储深入详解
在本文中,我们将研究Elasticsearch的各个部分写入数据目录的文件。我们将查看节点,索引和分片级文件,并简要说明其内容,以便了解Elasticsearch写入磁盘的数据。
Elasticsearch存储深入详解
|
JavaScript 前端开发 Python
CGI编程完全手册
一.基本原理 CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。
3291 0
|
安全 测试技术 C++
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
最近用到了gRPC,配置了很长时间,分享一下配置过程。先来看一下我准备的文件包(资源我放在最后)
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
|
存储 设计模式 测试技术
了解三层架构:表示层、业务逻辑层、数据访问层
了解三层架构:表示层、业务逻辑层、数据访问层
6401 0