Modbus协议中定义了四种类型的寄存器,每种寄存器有不同的读写属性和用途。以下是详细分类和说明:
1. 线圈寄存器(Coils)
- 功能码:
- 读:
0x01(Read Coils) - 写单个:
0x05(Write Single Coil) - 写多个:
0x0F(Write Multiple Coils)
- 读:
- 数据类型:1位(二进制),可读可写。
- 物理意义:通常对应设备的开关量输出(如继电器、DO信号)。
- 地址范围:
00001-09999(协议中实际地址从0x0000开始,需根据设备手册映射)。 - 示例:
- 控制电机的启停(ON/OFF)。
- 读取报警状态。
2. 离散输入寄存器(Discrete Inputs)
- 功能码:
0x02(Read Discrete Inputs) - 数据类型:1位(二进制),只读。
- 物理意义:通常对应设备的开关量输入(如传感器触点、DI信号)。
- 地址范围:
10001-19999(协议中实际地址从0x0000开始)。 - 示例:
- 检测按钮是否按下。
- 读取限位开关状态。
3. 保持寄存器(Holding Registers)
- 功能码:
- 读:
0x03(Read Holding Registers) - 写单个:
0x06(Write Single Register) - 写多个:
0x10(Write Multiple Registers)
- 读:
- 数据类型:16位(无符号/有符号整数、浮点数等),可读可写。
- 物理意义:存储设备参数或控制数据(如设定值、配置参数)。
- 地址范围:
40001-49999(协议中实际地址从0x0000开始)。 - 示例:
- 设置温度设定值。
- 读取设备运行时间。
4. 输入寄存器(Input Registers)
- 功能码:
0x04(Read Input Registers) - 数据类型:16位(无符号/有符号整数、浮点数等),只读。
- 物理意义:通常用于模拟量输入(如传感器采集的电压、温度值)。
- 地址范围:
30001-39999(协议中实际地址从0x0000开始)。 - 示例:
- 读取温度传感器的当前值。
- 获取流量计瞬时流量。
核心区别总结
| 寄存器类型 | 数据类型 | 读写属性 | 功能码(读/写) | 典型应用场景 |
|---|---|---|---|---|
| 线圈 | 1位 | 读写 | 0x01 / 0x05, 0x0F | 继电器控制 |
| 离散输入 | 1位 | 只读 | 0x02 | 开关状态监测 |
| 保持寄存器 | 16位 | 读写 | 0x03 / 0x06, 0x10 | 参数设置、数据存储 |
| 输入寄存器 | 16位 | 只读 | 0x04 | 传感器数据采集 |
注意事项
- 地址映射:
- Modbus协议中的寄存器地址是从0开始的16进制值(如
0x0000),但许多设备文档使用偏移地址(如40001对应0x0000)。
- Modbus协议中的寄存器地址是从0开始的16进制值(如
- 数据类型扩展:
- 16位寄存器可通过组合表示32位整数、浮点数等,但需遵循设备定义的格式(如Modbus RTU或TCP的字节序)。
- 协议限制:
- 标准Modbus单次最多读取
125个保持寄存器或2000个线圈,实际受设备限制。
- 标准Modbus单次最多读取
实际应用示例
- 读取温度值:使用
0x04功能码读取输入寄存器(地址30001)。 - 控制电机:使用
0x05功能码写入线圈(地址00001,值0xFF00表示ON)。 - 修改设定值:使用
0x10功能码写入多个保持寄存器(地址40010,写入目标转速)。
掌握这四种寄存器的区别是使用Modbus协议的基础,具体操作需参考设备手册中的寄存器映射表。
2007

被折叠的 条评论
为什么被折叠?



