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传感器数据采集

注意事项

  1. 地址映射:
    • Modbus协议中的寄存器地址是从0开始的16进制值(如0x0000),但许多设备文档使用偏移地址(如40001对应0x0000)。
  2. 数据类型扩展:
    • 16位寄存器可通过组合表示32位整数、浮点数等,但需遵循设备定义的格式(如Modbus RTU或TCP的字节序)。
  3. 协议限制:
    • 标准Modbus单次最多读取125个保持寄存器或2000个线圈,实际受设备限制。

实际应用示例

  • 读取温度值:使用0x04功能码读取输入寄存器(地址30001)。
  • 控制电机:使用0x05功能码写入线圈(地址00001,值0xFF00表示ON)。
  • 修改设定值:使用0x10功能码写入多个保持寄存器(地址40010,写入目标转速)。

掌握这四种寄存器的区别是使用Modbus协议的基础,具体操作需参考设备手册中的寄存器映射表。

更多推荐