[方案相关] 【协议】 freemodbus的分层结构分析

[复制链接]
8197|34
 楼主| jerow 发表于 2020-4-27 11:45 | 显示全部楼层 |阅读模式
freemodbus的兼容性非常好,可以方便的在很多的平台进行移植,这与它的代码架构有很大的关系。
这里我们不考虑代码的移植过程,仅仅分析它的层次结构。

    我认为,freemodbus协议实际上是分了三个层次的
    1. 应用层(或者说暴露给应用层的接口):
        接口定义全部在头文件mb.h中包含,在mb.c中实现。
        包括了移植时不需要改动的部分(一些初始化,使能,poll等),还有需要修改或者说实现的部分(注册给定功能码对应的回调处理程序,寄存器相关操作等)。
            而且在初始化中通过回调函数指向了第二层的函数接口,相当于为整个程序提供了统一的接口去访问第二层的函数,而不用考虑第二层的改变。


 楼主| jerow 发表于 2020-4-27 11:45 | 显示全部楼层
    2. 协议(移植)层:
        这一层体现了freemodbus的类型多样(RTU模式,ASCII模式,TCP模式等)
        接口定义类型.h(mbrtu.h/mbascii.h)中包含,在对应的.c中实现。
        目前看到的函数全部不用改动,可以直接调用。实现了具体的(RTU)初始化、开始、停止、接收处理、发送处理等部分功能。
        此层函数直接调用物理层接口。
 楼主| jerow 发表于 2020-4-27 11:46 | 显示全部楼层
    3. 物理层:
        接口定义在mbport.h中定义,用户只需要根据平台的不同具体实现(初始化串口、初始化最小单位为50us的定时器、使能串口和定时器等)其定义的相关接口。具体位置的话,串口相关的基本操作在portserial.c中,定时器相关的在porttimer.c中,状态机在portevent.h中
        
 楼主| jerow 发表于 2020-4-27 11:47 | 显示全部楼层
    4. 特殊点:   
        这里有一个地方比较特殊,就是接受和发送中断函数。实际上的接受和处理是在协议(移植)层定义并实现好的,但是清中断必须要下放到物理层来适配不同的平台。
        所以freemodbus规定了接受中断和发送中断必须分别包括两个函数,这两个函数通过回调的形式最终指向的是协议移植层的接收处理和发送处理函数。接受中断处理函数和发送中断处理函数需要注册在本层(物理层)的串口初始化部分。
        所以我认为    可以说freemodbus协议规定了中断处理函数的流程。
        也可以说是freemodbus做好了中断处理函数,只是让用户在物理层帮忙清一下中断标志,如果需要其他操作也可以同时加入。


 楼主| jerow 发表于 2020-4-27 11:47 | 显示全部楼层
    5. 总结:这个架构明显的分了三个层次,对应着用户移植的三种情况:
    (1)业务:串口接收数据与业务完全分离,业务只需要调用接口,而不对串口的架构做任何的修改即可。
    (2)切换协议:假设从RTU切换到ASCII,那么只需要在应用层接口中注册ASCii的回调即可完成,底层与业务无需修改。
    (3)切换平台:以单片机为例,切换的时候仅需要把物理层的硬件实现重新适配,而不需要对上层做任何的改动。
    那么其调用流程为:
                     应用->(调用)应用层的接口 -> (回调) 协议(移植)层函数->(调用)物理层接口
qiulp 发表于 2020-4-27 14:29 | 显示全部楼层
学习了。
643757107 发表于 2020-4-28 21:55 | 显示全部楼层
总结的很好。
merry_zsp 发表于 2020-4-29 15:52 | 显示全部楼层
支持下,谢谢分享!总结的不错!
gwsan 发表于 2020-5-5 15:34 | 显示全部楼层
非常感谢楼主分享
kxsi 发表于 2020-5-5 15:35 | 显示全部楼层
和modbus有啥不一样的
nawu 发表于 2020-5-5 15:35 | 显示全部楼层
太理论化了
qcliu 发表于 2020-5-5 15:35 | 显示全部楼层
非常感谢楼主分享
tfqi 发表于 2020-5-5 15:36 | 显示全部楼层
我只是用过 但是没有这么理解过它
aspoke 发表于 2020-5-6 08:15 | 显示全部楼层
freemodbus 与 modbus 的区别  
232321122 发表于 2020-5-6 08:15 | 显示全部楼层
在对freemodbus进行主站的移植
ghuca 发表于 2020-5-6 08:15 | 显示全部楼层
freemodbus从站地址怎么设置
soodesyt 发表于 2020-5-6 08:16 | 显示全部楼层
移植的freemodbus为什么一直收不到数据
mnynt121 发表于 2020-5-6 08:16 | 显示全部楼层
做过freemodbus移植的吗?
plsbackup 发表于 2020-5-6 08:16 | 显示全部楼层
freemodbus可以支持两个串口吗
kmzuaz 发表于 2020-5-6 08:16 | 显示全部楼层
主机如何调试?   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

520

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部