Modbus / Xmodem / Ymodem / Zmodem 完整对比
一句话总结:
Modbus:工业控制协议,读写设备寄存器、实时数据;X/Y/Zmodem:串口文件传输协议,用来上传 / 下载完整文件(固件、日志)
它们底层都可以跑在串口(RS232),但是设计目标、报文结构完全不是一类东西。
1. Modbus
✅ 用途:工业现场通讯,读写寄存器、开关量,设备正常运行时使用
- 模式:主从问答式(Master 主动发请求,Slave 回复)
- 常见:Modbus RTU(RS485 串口二进制)、Modbus ASCII、Modbus TCP(网口)
- 传输内容:少量实时数据(线圈、保持寄存器、输入寄存器),不是完整文件
- 校验:RTU 使用 CRC16
- 特点:有设备地址、功能码;支持多节点总线(RS485 挂多个仪表)
- 典型场景:PLC 读温湿度变送器、上位机修改变频器参数
- ❌ 不适合:传输大文件、固件烧录
2. Xmodem
✅ 用途:串口简单文件传输,早期固件升级协议
- 块大小:标准 128 字节;Xmodem-1K 扩展为 1024 字节
- 校验:原版和校验,Xmodem-CRC 用 CRC16
- 限制:不带文件名、文件长度;一次只能传 1 个文件;每发一块必须等 ACK,效率低
- 典型场景:老旧单片机 Bootloader 简单升级
3. Ymodem(Xmodem 增强版)
✅ 用途:串口文件传输,嵌入式最常用的烧录协议
- 兼容 Xmodem,支持 128/1024 字节块
- 新增块 0:携带文件名、文件大小信息;支持批量传输多个文件
- 校验:默认 CRC16,可靠性更好
- 典型场景:STM32、单片机串口 Bootloader 下载固件
4. Zmodem(Ymodem 升级版,rz/sz)
✅ 用途:高性能串口文件传输,Linux 串口终端最常用
- 相比 Ymodem 重大改进:支持断点续传;不需要每块都等待 ACK(滑动窗口),速度大幅提升
- 自动检测文件大小、文件名;支持文件时间戳
- 缺点:协议复杂,很少用于单片机 Bootloader(代码量大,资源占用高)
- 典型场景:串口终端 rz 上传、sz 下载日志文件
总对比表
表格
| 项目 | Modbus | Xmodem | Ymodem | Zmodem |
|---|---|---|---|---|
| 核心用途 | 工业读写寄存器,实时采集控制 | 串口传单个文件 | 串口批量传文件,固件烧录 | 串口高速文件传输,rz/sz |
| 传输对象 | 寄存器、IO、少量实时数据 | 原始文件字节流 | 文件 + 文件名 + 长度 | 文件 + 文件名 + 时间戳 |
| 文件名支持 | ❌ | ❌ | ✅ | ✅ |
| 多文件传输 | ❌ | ❌ | ✅ | ✅ |
| 断点续传 | ❌ | ❌ | ❌ | ✅ |
| 通信架构 | 主从问答,多设备总线 | 逐块 ACK 确认 | 逐块 ACK 确认 | 滑动窗口,可流水线 |
| 工业现场 | ✅ 标准工业协议 | ❌ 文件协议 | ❌ 文件协议 | ❌ 文件协议 |
| 单片机 Bootloader | 一般不用 | 偶尔用 | 最常用 | 极少使用 |
关键区分要点
- Modbus 是 “对话”:上位机问:温度是多少?设备返回一个数值。持续交互,设备正常工作。
- X/Y/Zmodem 是 “传文件”:设备进入 Bootloader,暂停正常业务,专门接收一整个固件二进制文件,写完重启。
- 硬件层面:Modbus RTU 常用RS485远距离多节点;X/Y/Zmodem 大多是点对点 RS232 串口。
简单例子
- Modbus:
01 03 00 00 00 01 84 0A→ 读 1 号从机保持寄存器 - Ymodem:先发块 0,包含文件名 + 大小,然后逐块发送固件 bin 文件
如果你想要,我可以给一段简单报文示例对比,或者整理成面试简答版本。