zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    struts2配置文件详解
    实体类和数据库映射--配置文件
    Hibernate常用配置文件详解
    本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。——Oracle监听器服务无法启动!
    关于远程访问Oracle数据库的设置(共享数据库)
    Log4J日志配置详解
    Java compiler level does not match the version of the installed Java project facet.问题
    Genymotion出现Unable to load VirtualBox engine问题--100%解决
    eclipse注解——作者,创建时间,版本
    web工程下的html中引用其他目录下的文件的path
  • 原文地址:https://www.cnblogs.com/qq21497936/p/14708397.html
Copyright © 2011-2022 走看看