FreeModbus源码结构分析

FreeModbus 官网

目录结构
【demo】-各种平台的例程
【doc】-文档资料
【modbus】-核心源码
【tools】-相关工具

FreeModus的移植主要用到…\modbus目录和 …\demo\BARE目录下的内容

【modbus】文件夹直接导入到项目,基本不需要修改

【demo\BARE】文件夹下的demo.c是一个最基本的后台演示,主要实现协议栈的初始化、激活和运行,根据实际项目需求,实现对每个modbus功能码的处理逻辑。

port目录下是实现modbus协议栈的底层驱动支持
portevent.c 事件驱动
portserial.c 串口驱动
porttimer.c t3.5定时器驱动
其中portevent.c不用修改;portserial.c实现对应MCU下串口相关配置,包括端口初始化和中断配置,中断处理函数;porttimer.c 实现t3.5定时器初始化和相应的中断处理函数

协议栈内容主要参考解读mb.c,以RTU模式为例:
协议栈主要功能函数通过函数指针实现定义:

        case MB_RTU:
            pvMBFrameStartCur = eMBRTUStart;  //开启串口接收中断,开启t3.5
            pvMBFrameStopCur = eMBRTUStop;	//关闭串口中断,关闭t3.5
            peMBFrameSendCur = eMBRTUSend;  //发送数据,激活串口发送状态机
            peMBFrameReceiveCur = eMBRTUReceive; //处理接收事件
            pvMBFrameCloseCur = MB_PORT_HAS_CLOSE ? vMBPortClose : NULL;
            pxMBFrameCBByteReceived = xMBRTUReceiveFSM; //串口接收状态机
            pxMBFrameCBTransmitterEmpty = xMBRTUTransmitFSM;//串口发送状态机
            pxMBPortCBTimerExpired = xMBRTUTimerT35Expired; //t3.5超时处理

            eStatus = eMBRTUInit( ucMBAddress, ucPort, ulBaudRate, eParity );
            break;

freemodbus基本是通过状态机+事件机制的巧妙结合实现协议栈的稳定运行
协议栈状态图
协议栈主要运行流程
在这里插入图片描述
在这里插入图片描述
t3.5定时器在整个协议栈运行过程中扮演者重要的角色
在这里插入图片描述

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeModbus是一款开的Modbus协议栈,适用于不同平台的嵌入式系统。该协议栈提供了Modbus协议的主从模式和TCP/RTU通信方式,并且支持多种不同的通信接口。下面是对FreeModbus码的简要分析: 1. 通信接口 FreeModbus支持多种不同的通信接口,包括串口、TCP/IP、CAN等。可以通过修改相应的接口文件来适应不同的硬件平台和通信方式。 2. 数据结构 FreeModbus使用了许多数据结构来描述Modbus协议的各种数据类型。例如,Modbus协议中的寄存器可以使用不同的数据结构来表示,如uint16_t、float、double等。此外,FreeModbus还使用了许多结构体来描述Modbus帧的各个字段,如MBAP头、功能码、数据长度等。 3. 状态机 FreeModbus使用了状态机来处理Modbus帧的解析和生成过程。状态机根据当前的状态和收到的字节来更新下一个状态。这种设计模式使得代码更加清晰和易于维护。 4. 回调函数 FreeModbus提供了许多回调函数,可以在适当的时候被调用。例如,在接收到Modbus请求帧后,可以调用一个回调函数来处理该请求并生成响应帧。这种设计模式使得代码更加灵活和可扩展。 5. 协议栈 FreeModbus将Modbus协议栈分为两个部分:应用层和物理层。应用层处理Modbus协议的各种功能码,物理层处理Modbus帧的传输和接收。这种设计模式使得代码更加模块化和可重用。 总的来说,FreeModbus码设计非常精巧,代码清晰易懂,易于移植和扩展。同时,FreeModbus还提供了详细的文档和实例代码,方便开发者快速上手。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值