一、课程导论与整体架构
1.1 Modbus协议概述
Modbus协议,说白了就是工业设备之间聊天的一种通用语言。它诞生于1979年,由Modicon公司提出,到现在四十多年了,依然活跃在各种工控现场。
为什么它能活这么久?我个人觉得,核心原因就两个字:简单。你想想看,一个协议如果太复杂,嵌入式工程师移植起来就头大,出bug的概率也高。Modbus的报文结构非常清晰,就那么几个功能码,读线圈、读寄存器、写线圈、写寄存器,没了。
我在项目中遇到过不少次,甲方要求用Modbus TCP和Modbus RTU同时支持。嗯,这其实很常见。很多设备既要接PLC(走RTU),又要接上位机(走TCP)。所以我们的协议栈,必须能同时处理这两种物理层。
核心要点:Modbus是主从架构,一个主站,多个从站。从站不能主动发数据,只能等主站来问。这个设计在工业现场非常实用——避免了总线冲突。
1.2 从站协议栈的作用
从站协议栈,就是让你的设备变成Modbus网络里那个听话的「小兵」。主站问什么,你就答什么。主站让你写什么,你就写什么。
具体来说,协议栈要干这几件事:
- 报文解析——把主站发来的原始字节流,拆成功能码、地址、数据
- 数据映射——把Modbus的寄存器地址,映射到你设备里的实际变量
- 异常处理——遇到非法请求,要能返回异常码,而不是直接死机
- CRC校验——RTU模式下,每帧报文都要算CRC,错了就扔掉
我记得刚入行那会儿,自己手写过一次Modbus从站。写完之后发现,处理边界情况才是最折磨人的。比如主站发了个超长报文怎么办?地址越界怎么办?这些坑,我后面都会在课程里一一拆解。
我的建议:不要从零写协议栈。除非你想练手,否则直接用成熟的移植方案。我们课程里会基于FreeModbus做二次开发,这个库很成熟,社区活跃,文档也全。
1.3 移植前的准备工作
移植协议栈之前,你得先搞清楚三件事。不然做到一半发现缺东西,那就尴尬了。
1.3.1 硬件环境确认
你的MCU是什么?串口有几个?有没有以太网控制器?
举个例子,如果你要做Modbus RTU,至少需要一个UART外设。如果你要做Modbus TCP,那就要有以太网MAC+PHY。我见过有人拿一个只有两个串口的MCU,硬要做RTU+TCP双协议栈,结果串口不够用,最后只能外扩。嗯,选型阶段多花十分钟,移植阶段省三天。
1.3.2 软件工具链
编译器、调试器、串口助手,这三样是标配。我个人习惯用:
- Keil MDK 或 IAR(ARM内核)
- Modbus Poll(主站模拟器,调试从站必备)
- 逻辑分析仪(抓串口波形,排查物理层问题)
避坑指南:我曾经因为串口波特率设置不一致,排查了整整两天。主站设9600,从站设19200,两边都以为对方坏了。后来用逻辑分析仪一看波形,才发现是波特率对不上。所以,移植前一定要确认好通信参数:波特率、数据位、停止位、校验位。
1.3.3 协议栈源码获取
我们课程用的是FreeModbus v1.6。你可以从官网或者GitHub下载。下载后解压,你会看到这样的目录结构:
FreeModbus/
├── demo/ # 各平台示例
├── doc/ # 文档
├── modbus/ # 核心协议栈源码
│ ├── include/ # 头文件
│ ├── ascii/ # ASCII模式
│ ├── rtu/ # RTU模式
│ ├── tcp/ # TCP模式
│ └── functions/ # 功能码实现
└── tools/ # 工具脚本
核心代码都在 modbus/ 目录下。移植的时候,你只需要修改 port/ 目录下的接口文件,核心逻辑基本不用动。
1.4 课程目标与学习路径
这门课的目标很明确:让你能独立把Modbus从站协议栈移植到任意MCU上,并且能调试通过。
具体来说,学完之后你应该能做到:
- 理解Modbus协议的核心报文格式
- 掌握FreeModbus的移植接口(定时器、串口、CRC)
- 能自己写一个简单的从站应用(比如温湿度采集)
- 会用Modbus Poll和逻辑分析仪排查通信故障
学习路径我建议这样走:
| 阶段 | 内容 | 预计时间 |
|---|---|---|
| 第一阶段 | 协议基础 + 环境搭建 | 2天 |
| 第二阶段 | FreeModbus移植实战 | 3天 |
| 第三阶段 | 调试与异常处理 | 2天 |
| 第四阶段 | 综合项目(温控器/数据采集器) | 3天 |
整个课程一共30章,从基础到实战,循序渐进。每一章我都会放一个可运行的代码示例,你跟着敲一遍,基本就能跑通。
一个小建议:别光看,一定要动手。我见过太多人看完视频觉得「我都会了」,结果一上手就卡住。嵌入式这东西,纸上得来终觉浅,绝知此事要躬行。
1.5 本章知识体系
下面这张图,是我用SVG画的本章知识结构。你可以把它当作整个课程的「地图」:
这张图把第一章的四个核心模块串起来了。你看,Modbus协议是基础,协议栈是骨架,准备工作是工具,课程目标是方向。四者缺一不可。
好了,第一章就到这里。记住一句话:Modbus不难,难的是细节。后面每一章,我都会带你抠细节。
公众号:蓝海资料掘金营,微信deep3321