0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

libmodbus源码框架分析

瑞萨MCU小百科 来源:瑞萨MCU小百科 2024-11-21 13:47 次阅读

11.2libmodbus源码框架分析

libmodbus作为一个优秀且免费开源的跨平台支持RTU 和 TCP模式的Modbus开发库,非常值得大家借鉴和学习。本章对libmodbus源代码进行阅读和分析。

11.2.1核心函数

以Modbus RTU协议为例,主设备、从设备初始化后:

①主设备就可以启动请求,即“发送消息”给从设备。

②从设备接收到请求后构造数据,启动响应即“发送回复”。

③主机收到响应后,会“检查响应”。

如下图所示:

e06cd046-a307-11ef-93f3-92fbcf53809c.png

分析“libmodbus-3.1.10 estsunit-test-client.c”、“libmodbus-3.1.10 estsunit-test-server.c”,可以得到下面核心函数的使用过程:

e0747896-a307-11ef-93f3-92fbcf53809c.png

11.2.2框架与数据结构

站在APP开发的角度来说,使用上一节里介绍的libmodbus函数即可。但是,数据的传输必定涉及到底层数据传输。所以,从数据的收发过程,可以把使用libmodbus的源码分为3层:

①APP:它知道要做什么,主设备要读写哪些寄存,从设备提供、接收什么数据。

②Modbus核心层:向上提供接口函数,向下调用底层代码构造数据包并发送、接收数据包并解析。

③后端(数据传输):进行硬件相关的数据封包与发送、接收与解包。

e097e894-a307-11ef-93f3-92fbcf53809c.png

对于核心层、后端,抽象出了如下结构体:

e0a2cb74-a307-11ef-93f3-92fbcf53809c.png

核心层modbus_t结构体的成员含义如下:

e0b54696-a307-11ef-93f3-92fbcf53809c.png

后端modbus_backend_t结构体的成员含义如下:

成员 含义
unsigned int backend_type; 后端类型,是RTU还是TCP
unsigned int header_length; 头部长度,比如RTU数据包前面需要有1字节的设备地址,头部长度就是1
unsigned intchecksum_length; 校验码长度,RTU的校验码是2字节
unsigned int max_adu_length; ADU(数据包)最大长度
set_slave 设置从站地址
build_request_basis 设置RTU请求包的基本数据,这些数据的格式是一样的,比如req[0]是从设备地址,req[1]是功能码,req[2]和req[3]是寄存器地址,req[4]和req[5]是寄存器数量
build_response_basis 设置RTU回应包的基本数据,这些数据的格式是一样的,比如req[0]是从设备地址,req[1]是功能码
prepare_response_tid 生产传输标识TID,在TCP中使用
send_msg_pre 发送消息前的准备工作,对于RTU是填充CRC检验码,对于TCP是填充头部的Length
send 发送数据包
receive 接收数据包
recv 接收原始数据,receive会调用recv得到原始数据然后解析出数据包
check_integrity 检查数据包的完整性
pre_check_confirmation 检查响应数据包是否有效时,先执行pre_check_confirmation做一些简单的检查
connect 硬件相关的连接,对于RTU就是打开串口、设置串口波特率等;对于TCP则是连接对端
is_connected 判断是否已经连接
close 关闭连接
flush 清空接收到的、未处理的数据
select 阻塞一段时间以等待数据
free 释放分配的modbus_t等结构体

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 源码
    +关注

    关注

    8

    文章

    633

    浏览量

    29134
  • 数据结构
    +关注

    关注

    3

    文章

    573

    浏览量

    40087
  • RTU
    RTU
    +关注

    关注

    0

    文章

    404

    浏览量

    28617
  • LibModbus
    +关注

    关注

    0

    文章

    7

    浏览量

    7245

原文标题:libmodbus源码框架分析 - RZ MPU工业控制教程连载(38)

文章出处:【微信号:瑞萨MCU小百科,微信公众号:瑞萨MCU小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    第6章_libmodbus使用

    libmodbus是一个免费的跨平台支持RTU和TCP的Modbus库,遵循LGPL V2.1+协议。libmodbus支持Linux、Mac Os X、FreeBSD、QNX和Windows等
    的头像 发表于 06-29 14:36 2057次阅读
    第6章_<b class='flag-5'>libmodbus</b>使用

    【米尔-瑞萨RZ/G2UL开发板】3.libmodbus移植使用

    的工具集。 实现步骤 新建文件,拉取libmodbus源码,地址如下: https://github.com/stephane/libmodbus 在这个目录下新建一个文件夹用于存放
    发表于 02-02 23:49

    【米尔-瑞米派兼容树莓派扩展模块-试用体验】安装libmodbus

    上篇测试了串口的通信,本篇安装开源modbus库协议,为后续的项目做准备。 1、源码下载: git clone https://github.com/stephane/libmodbus
    发表于 04-23 23:24

    《HarmonyOS 2.0源码框架分析》直播答疑

    :鸿蒙的编译框架是怎样的;如何利用整个编译框架实现简单的 MCU 平台移植,如STM32 ?回答:鸿蒙OS的源码框架较复杂,本身涉及到移植的部分主要有2大块:一块是kernel内,一块
    发表于 12-10 22:28

    libmodbus使用ubuntu系统

    libmodbus使用ubuntu系统使用libmodbusarm-linux使用libmodbus解压安装移植编译modbus从机模拟ubuntu系统使用libmodbusubuntu系统可以直接
    发表于 11-04 07:57

    基于select操作的libmodbus

    libmodbus库从软件包里启用, libmodbus是基于select操作的,依赖于文件系统和libc,需要在rt-thread中开启对应的支持。一开始以为作为主站时,有函数可以自动的指定读取
    发表于 01-11 08:13

    OpenHarmony Camera源码分析

    captureInfoVideo是video相关的信息参数。三、总结本文首先对相机预览、拍照和录像功能的应用层进行了代码分析,其次对框架层的流程进行了梳理,最后再对框架源码进行
    发表于 09-06 11:21

    浅析基于serialX串口驱动移植libmodbus

    example” rtu 样例程序。使用命令 pkgs --update 下载 libmodbus 源码libmodbus源码文件数量比 freemodbus 少很多了。看起来
    发表于 02-15 11:07

    【悟空派H3开发板免费体验】4、安装libmodbus

    做的项目需要和stm32进行串口通信,随选用Modbus_RTU协议。以下为wukunpi安装libmodbus库的步骤。 下载源码 可以直接下载附件 *附件
    发表于 10-25 01:29

    uboot源码分析,思路还算清晰

    uboot源码分析,思路还算清晰
    发表于 10-24 15:25 19次下载
    uboot<b class='flag-5'>源码</b><b class='flag-5'>分析</b>,思路还算清晰

    Java反射的工作原理和源码分析

    Java反射的工作原理和源码分析
    发表于 07-08 15:11 14次下载
    Java反射的工作原理和<b class='flag-5'>源码</b><b class='flag-5'>分析</b>

    嵌入式linux libmodbus的移植

    Modbus是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。具体是啥,百度吧源码下载
    发表于 11-01 16:57 8次下载
    嵌入式linux <b class='flag-5'>libmodbus</b>的移植

    libmodbus之嵌入式Linux使用及测试

    libmodbus使用ubuntu系统使用libmodbusarm-linux使用libmodbus解压安装移植编译modbus从机模拟ubuntu系统使用libmodbusubuntu系统可以直接
    发表于 11-01 16:57 14次下载
    <b class='flag-5'>libmodbus</b>之嵌入式Linux使用及测试

    基于STM32移植UCGUI图形界面框架(3.9.0源码版本)

    基于STM32移植UCGUI图形界面框架(3.9.0源码版本)
    发表于 11-30 16:06 0次下载
    基于STM32移植UCGUI图形界面<b class='flag-5'>框架</b>(3.9.0<b class='flag-5'>源码</b>版本)

    存放OpenHarmony驱动子系统源码信息的HDF驱动框架

    简介 该仓主要存放OpenHarmony驱动子系统核心源码信息(包括驱动框架、配置管理、配置解析、驱动通用框架模型、硬件通用平台能力接口等),旨在为开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。 图1 驱动
    发表于 04-13 11:13 8次下载
    存放OpenHarmony驱动子系统<b class='flag-5'>源码</b>信息的HDF驱动<b class='flag-5'>框架</b>