当前位置:   article > 正文

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

libmodbus

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/116196923

长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…

Qt开发专栏:三方库开发技术

上一篇:没有了
下一篇:《libModbus库开发笔记(二):libmodbus介绍、编译、modbusTcp连接台达PLC和modbusTcp基础模板


前言

  本文章讲解libmodbus,rtu的485/232模式。


相关博客

  《案例分享:Qt modbus485调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.3.0)
  《案例分享:Qt modbusTcp调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.0.0)
  《台达PLC开发笔记(一):台达PLC连接介绍,分别使用485、网口与台达PLC建立连接
  《台达PLC开发笔记(二):台达PLC设置主机通讯参数为RTU并成功通讯
  《西门子PLC开发笔记(一):PLC介绍,西门子S1200系列接线、编程、下载和仿真
  《libModbus库开发笔记(一):libmodbus库介绍、编译和基础工程模板
  《libModbus库开发笔记(二):libmodbus介绍、编译、modbusTcp连接台达PLC和modbusTcp基础模板
  《案例分享:Qt西门子PLC调试模拟工具(包含PLC上位机通讯,PLC服务器,读写Byte、Int、DInt、Real)(持续更新,当前v1.6.0)


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
  • 1

步骤四:配置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
  • 1
  • 2
  • 3
  • 4

  在这里插入图片描述
  错误,识别平台失败,如下图:
  在这里插入图片描述

./configure --prefix=/home/21497/compile/modbus/libmodbus-3.1.6/install -build=x86
  • 1

  是在mysy使用linux环境编译x86构架下的,如下图:
  在这里插入图片描述

步骤五:编译make

make -j16
  • 1

  在这里插入图片描述
  再单线程确认一下
  在这里插入图片描述

步骤六:安装make install

make install
  • 1

  会出错,缺一些文件夹,手动自己建文件夹即可。
  在这里插入图片描述

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

  在这里插入图片描述


模块化

  在这里插入图片描述


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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

Demo演示

  在这里插入图片描述


工程模板

  modbusDemo_v1.0.0_基础模板_读取线圈_读取寄存器简单测试.rar


若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/116196923

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/971421
推荐阅读
相关标签
  

闽ICP备14008679号