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

相关文章
|
9月前
|
程序员 API 数据库
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
193 1
|
Ubuntu 编译器 Windows
zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板
zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板
zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板
|
9月前
|
C++ 计算机视觉
Visual Studio新项目快速配置已有项目中编译好的C++第三方库的方法
Visual Studio新项目快速配置已有项目中编译好的C++第三方库的方法
206 1
|
9月前
|
编译器 数据处理 C++
Visual Studio配置并编译C++环境下GDAL库、SQLite环境与PROJ库的方法
Visual Studio配置并编译C++环境下GDAL库、SQLite环境与PROJ库的方法
408 1
|
9月前
|
算法 关系型数据库 编译器
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目(一)
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目
251 0
|
XML 数据管理 编译器
Qt+GDAL开发笔记(二):在windows系统msvc207x64编译GDAL库、搭建开发环境和基础Demo
上一篇使用mingw32版本的gdal,过程曲折,为更好的更方便搭建环境,在windows上msvc方式对于库比较友好。
|
前端开发
DSP开发软件css(10)使用基础(汉化、工程导入、设置目标配置文件、选择仿真器和芯片型号、添加文件|库路径、编译下载等操作)
DSP开发软件css(10)使用基础(汉化、工程导入、设置目标配置文件、选择仿真器和芯片型号、添加文件|库路径、编译下载等操作)
217 0
|
C语言 计算机视觉 C++
ffmpeg 纯静态编译,以及添加自定义库流程摘要
需求:    1. 纯静态编译ffmpeg ,即ldd ./ffmpeg 的结果是:not a dynamic executable    2.  修改ffmpeg 项目,添加自定义功能库    3. 自定义库由c++实现,要求能被纯c的ffmpeg项目调用    4. 自定义库必须使用g++ 的一些高级特性编译,要求g++支持c++11    5. 自定义库使用了pthread库 和openmp 库    6. 自定义库使用了opencv 3.0.0库,    7. 禁用所有的图形显示库x11,xcb,声音设备avdevice等等,静态链接这些库,会很痛苦。
5012 0
|
JSON 数据格式 Python
Python基础 模块化编程(模块的导入) 模块化编程 模块以主程序的方式运行 包和目录 第三方库的安装和导入方法
python基础知识模块,模块化编程,模块的创建和导入 python基础,模块的创建和导入,让模块以主程序的方式运行,python中的包和目录的区别和创建。模块导入另一个包的模块的方法,导入带有包的模块时的注意事项,常见的内置模块。 第三方模块的安装和导入的方法
Python基础 模块化编程(模块的导入)   模块化编程 模块以主程序的方式运行 包和目录 第三方库的安装和导入方法
|
开发工具 C++ Windows
JRtplib开发笔记(三):JRtplib库编程使用说明
JRtplib开发笔记(三):JRtplib库编程使用说明
JRtplib开发笔记(三):JRtplib库编程使用说明