Modbus-RTU :2 - FreeModbus源码框架和状态机分析

本文详细探讨了FreeModbus中的Modbus-RTU协议,重点分析了状态机如何响应主机请求,帧事件的处理机制,以及程序流程图的各个部分。作者分享了对代码结构的理解和学习经验,旨在帮助读者提升技术理解和实践应用。
摘要由CSDN通过智能技术生成

1、分析的目的

据说这东西是一个奥地利的代码仙人写的东西,查了一下奥地利,是中欧南部的内陆国,它拥有着悠久的文化和人文遗产。奥地利拥有许多闻名于世的作曲家,比如莫扎特、贝多芬、海顿、施特劳斯家族都因高超的音乐作品而闻名于世。

这不,跟艺术有着很深的渊源的国度,写出来的东西多少有点优雅而又浪漫,优雅永不过时,作为一个自诩浪漫主义派的攻城狮,我的目的显得简单而又浪漫:

1、学习一下这位仙人的代码结构和风格,看看他的优雅和浪漫,正确超越。

2、深入理解才能更好的在他的基础上进行发挥,设计出更好的产品,造福广大用户。

2、你能从我这篇文章中学到什么

首先,不打包票,话说满了容易打脸,所以能学到什么,因人而异,更多是希望我们心有灵犀。

其次,我个人是在项目的实践中抽出时间来进行总结的,总结出来的东西可能不完美,但至少是极具参考价值的,如果你的项目中也用到了FreeModbus,那么恭喜你,你又多了我一个同路人,给我点个赞,一起加油努力哦。

总之,三人行必有我师,你我皆是探路者,有幸遇见,期待一起破局。


从这里开始,下面是非常正经的技术文案


!注意:

1、本文仅对 FreeModbus 中的 Modbus-RTU 协议进行分析

2、FreeModbus 协议栈源码仅支持 Modbus-Slave(从机),这对我们下文的状态机分析有用。

3、函数调用关系

这里要先理顺一下各个函数的调用关系,使用树状图把就,用WPS的思维导图倒腾了半个小时,基本理顺。有哪里不清楚的可以在评论区发言。

* 提示:

如果下图不足以让你看清,可以在本文的资源中下载高清原图。

4、状态机和帧事件分析

4.1、状态机从哪里开始

或者可以这么说,哪里是状态机开始运行的触发开关。

我们要弄清楚一个问题:Modbus从机是属于被动节点,即有主机请求,从机才会应答。所以,从这里我们可以Get到,一切的一切,都应该从接收到主机的请求数据开始,这里很关键

4.2、状态机和帧事件转换图

下图是 FreeModbus 的 RTU部分 状态机和帧事件转换图,总共包含两个状态机和一个帧事件。

接收状态机负责接收数据,接收完成一帧数据后,更新帧事件,通知主程序处理当前接收到的帧数据;

发送状态机负责发送数据,当应答数据被打包完成,发送将被触发,直到当前应答帧被发送完成。

帧事件主要实现三个功能:

1、帧校验(EV_FRAME_RECEIVED):判断接收到的帧是否合法,比如帧长度、CRC校验码、设备地址等是否正确或匹配;

2、帧处理(EV_EXECUTE):如果帧校验通过,则根据功能码,运行相应的功能处理函数,这些函数都被注册到xFuncHandlers中,并由用户自己去实现相关的代码,比如读写寄存器、控制线圈等;

3、帧应答(EV_EXECUTE):帧处理后,根据异常码进行应答数据打包,并触发发送状态机状态切换,发送数据。

* 提示:

如果下图不足以让你看清,可以在本文的资源中下载高清原图。

5、程序流程图

* 提示:

如果下图不足以让你看清,可以在本文的资源中下载高清原图。

5.1、主程序

5.2、主程序细化

5.3、T35定时器中断服务

5.4、串口接收中断服务

5.5、串口发送中断服务

  • 30
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: freemodbus是一种用于实现Modbus通信协议的开软件库,它提供了一套完整的Modbus主站和从站的应用层协议栈。要下载freemodbus码,您可以按照以下步骤进行: 1. 打开您的互联网浏览器。 2. 在浏览器的搜索栏中输入"freemodbus"或者直接访问一些知名的开代码托管平台,例如GitHub、GitLab等。 3. 在搜索结果或者代码托管平台的搜索框中输入"freemodbus"。 4. 点击进入相关的搜索结果或者进入代码托管平台。 5. 在相关页面中,您可以找到freemodbus的仓库地址或者下载码的链接。 6. 点击相应链接即可开始下载freemodbus码文件。 需要注意的是,freemodbus是开软件,因此您可以在遵守开协议的前提下自由下载和使用它。此外,在下载和使用码之前,建议您先阅读相关的文档或者官方文档,以了解如何正确使用和配置freemodbus库。希望这个回答对您有所帮助! ### 回答2: freemodbus码可以在多个地方下载。其中,官方网站是最常见的下载来。您可以通过访问freemodbus官方网站(https://www.freemodbus.org/)来获取码。 在官方网站上,您可以找到freemodbus码的各个版本和相关的文档。 除了官方网站,您还可以在一些代码托管平台上找到freemodbus码,比如GitHub(https://github.com/)。通过在GitHub上搜索关键词"freemodbus",您会找到很多与freemodbus相关的项目。在这些项目中,您可以找到freemodbus码和其他开发者的改进或补丁。 另外,一些开软件库和开发者社区也会提供freemodbus码下载。您可以在这些网站上搜索freemodbus来找到相关的下载链接。 需要注意的是,无论从哪个来下载freemodbus码,请务必遵守开软件的相关协议和条款,了解和遵守开许可证的规定。 ### 回答3: FreeModbus码可以通过以下几个途径进行下载: 1. 官方网站:你可以访问FreeModbus官方网站(www.freemodbus.org)来下载代码。在网站的下载页面上,你可以找到不同版本的代码,选择适合你的平台和需求的版本进行下载。 2. 开社区网站:FreeModbus是一个开项目,因此你可以在各种开社区网站(如GitHub、SourceForge等)上搜索并下载代码。这些网站通常提供最新版本的代码,并且允许用户共享和贡献代码改进。 3. 相关论坛和社区:你可以加入和参与与FreeModbus相关的论坛和社区,如FreeModbus Google Group,向其他开发者寻求帮助和资。在这些论坛和社区中,你可以与其他用户分享、交流和获取最新的代码。 无论你选择在哪里下载FreeModbus代码,建议你仔细阅读相关的文档和指南,以便了解如何使用和配置该代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陳默是金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值