一、课程导论与整体架构

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上,并且能调试通过。

具体来说,学完之后你应该能做到:

  1. 理解Modbus协议的核心报文格式
  2. 掌握FreeModbus的移植接口(定时器、串口、CRC)
  3. 能自己写一个简单的从站应用(比如温湿度采集)
  4. 会用Modbus Poll和逻辑分析仪排查通信故障

学习路径我建议这样走:

阶段 内容 预计时间
第一阶段 协议基础 + 环境搭建 2天
第二阶段 FreeModbus移植实战 3天
第三阶段 调试与异常处理 2天
第四阶段 综合项目(温控器/数据采集器) 3天

整个课程一共30章,从基础到实战,循序渐进。每一章我都会放一个可运行的代码示例,你跟着敲一遍,基本就能跑通。

一个小建议:别光看,一定要动手。我见过太多人看完视频觉得「我都会了」,结果一上手就卡住。嵌入式这东西,纸上得来终觉浅,绝知此事要躬行。

1.5 本章知识体系

下面这张图,是我用SVG画的本章知识结构。你可以把它当作整个课程的「地图」:

第一章:课程导论与整体架构 Modbus协议概述 • 主从架构,一问一答 • 三种模式:RTU / ASCII / TCP • 功能码:01/02/03/04/05/06/15/16 • 报文结构:地址+功能码+数据+校验 从站协议栈的作用 • 报文解析与组帧 • 数据映射(寄存器→变量) • 异常码生成与返回 • CRC校验与超时处理 移植前的准备工作 • 硬件:MCU选型、串口/以太网 • 软件:IDE、调试器、串口助手 • 源码:FreeModbus v1.6 下载 • 工具:Modbus Poll + 逻辑分析仪 课程目标与学习路径 • 独立移植FreeModbus到任意MCU • 掌握调试与异常排查方法 • 完成一个综合项目(温控器) • 30章循序渐进,代码可运行 打好基础,后面移植才不慌

这张图把第一章的四个核心模块串起来了。你看,Modbus协议是基础,协议栈是骨架,准备工作是工具,课程目标是方向。四者缺一不可。

好了,第一章就到这里。记住一句话:Modbus不难,难的是细节。后面每一章,我都会带你抠细节。


公众号:蓝海资料掘金营,微信deep3321