Modbus 主机(Master)和从机(Slave)的区别
Modbus 是一种主从式(Master-Slave)通信协议,主机和从机在通信过程中扮演不同的角色。以下是它们的主要区别:
1. 基本角色区别
特性 | 主机(Master) | 从机(Slave) |
---|---|---|
通信发起 | 主动发起所有通信请求 | 被动响应主机的请求 |
地址 | 不需要地址(有些实现用0xFF) | 必须有唯一地址(1-247) |
数量 | 网络中通常只有1个 | 网络中可以有多个(最多247个) |
2. 功能区别
功能 | 主机(Master) | 从机(Slave) |
---|---|---|
数据读取 | 主动发送读请求(功能码01/02/03/04) | 响应读请求,返回数据 |
数据写入 | 主动发送写请求(功能码05/06/15/16) | 接收写命令,修改内部数据 |
错误处理 | 检测超时和错误,决定是否重试 | 返回错误响应(异常码+错误类型) |
任务调度 | 决定何时与哪些从机通信 | 无调度能力,只能响应 |
3. 实现要求区别
实现要求 | 主机(Master) | 从机(Slave) |
---|---|---|
协议栈 | 需要完整的请求构造和响应解析 | 只需实现请求解析和响应构造 |
状态管理 | 需要维护通信状态(超时、重试等) | 无状态管理,每次请求独立处理 |
资源占用 | 通常需要更多资源(内存、CPU) | 可以设计得很轻量级 |
复杂性 | 较高(需处理多从机、超时、错误恢复等) | 较低(只需正确响应) |
4. 典型应用场景
主机(Master):
- PLC(作为主站控制多个设备)
- SCADA系统
- HMI(人机界面)
- 数据采集系统
从机(Slave):
- 传感器设备
- 执行器设备
- 智能仪表
- 变频器
- RTU(远程终端单元)
5. 通信流程示例
主机读取从机数据:
- 主机发送:
[从机地址][功能码03][起始地址Hi][起始地址Lo][寄存器数量Hi][寄存器数量Lo][CRC Lo][CRC Hi]
- 从机响应:
[从机地址][功能码03][字节数][数据1Hi][数据1Lo]...[数据NHi][数据NLo][CRC Lo][CRC Hi]
主机写入从机数据:
- 主机发送:
[从机地址][功能码06][寄存器地址Hi][寄存器地址Lo][数据Hi][数据Lo][CRC Lo][CRC Hi]
- 从机响应:
[从机地址][功能码06][寄存器地址Hi][寄存器地址Lo][数据Hi][数据Lo][CRC Lo][CRC Hi]
6. 代码实现差异
主机典型需要实现:
- 请求帧构造
- 响应帧解析
- 超时检测
- 错误恢复机制
- 多从机轮询调度
从机典型需要实现:
- 请求帧解析
- 数据访问(读取/修改内部数据)
- 响应帧构造
- 错误检测(非法地址/非法数据等)
总结
主机和从机是Modbus通信中互补的两个角色,主机负责控制和调度,从机负责数据提供和执行。在设计Modbus设备时,需要根据设备在系统中的角色选择实现相应的功能。