ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

阐述 Modbus 四种寄存器(通信对象)

阐述 Modbus 四种寄存器(通信对象)

阐述 Modbus 四种寄存器(通信对象)

不是芯片物理硬件寄存器,是固件软件内存,是逻辑寄存器。
很多人会混淆:芯片CPU内部的物理寄存器 和 Modbus逻辑寄存器,二者完全两码事。

1 关键点

Modbus的线圈、离散输入、保持寄存器、输入寄存器,叫Modbus逻辑寄存器。

  • 单片机/PLC芯片本身,有CPU物理寄存器(用于CPU运算,和Modbus无关)。
  • Modbus的4组,是固件在RAM内存里开辟出来的四块内存区域,软件层面模拟出来的逻辑存储区,不是硬件芯片自带的物理寄存器。

固件工作流程:

  1. 固件在内存划分四块内存:线圈区(bit位)、离散输入区(bit)、保持寄存器区(16bit字)、输入寄存器区(16bit字)
  2. 硬件采集传感器 → 固件把温度、压力写到【输入寄存器】内存块里
  3. 外部4‑20mA端子、开关量输入,固件刷新到【离散输入/线圈】内存
  4. 上位机Modbus报文过来,固件读取/修改这四块内存,把内存数据返回给主站
  5. 如果上位机写保持寄存器,固件读到内存变化,再去控制继电器、输出模拟量。

真实硬件:Modbus寄存器 = RAM内存的一块逻辑分区。
Java模拟Modbus从站:数组/Map = 模拟这块RAM内存分区,二者原理一模一样。

2 Modbus四种逻辑寄存器

类型存储单位读写权限通俗说明
线圈 Coils1 bit(0/1)可读、可写开关输出,控制继电器通断。比如0=断开,1=闭合
离散输入 Discrete Inputs1 bit(0/1)只读外部开关输入,硬件检测到按钮按下,固件置1,上位机只能读不能改
保持寄存器 Holding Register16 bit(1个字,0‑65535)可读、可写最重要。存参数、设定值、温度压力,上位机可以读写。设备参数、配置大多放这里
输入寄存器 Input Register16 bit(1个字)只读传感器原始采集值。比如AD采样出来的电压、温度,硬件更新,上位机只能读取,不能修改

2.1 地址小知识

  • 线圈、离散输入:按位访问,一个地址代表1个开关位
  • 保持、输入寄存器:按字访问,一个地址代表1个16位的字

注意:这些地址只是固件给这四块内存编的编号,不是CPU物理内存地址,是Modbus协议层面的逻辑地址。

3 举例

一个温控仪表:

  1. 测温探头采集温度,固件把温度值写入输入寄存器地址0(只读,上位机只能看,不能改温度原始采集值)
  2. 温度设定目标值,存放在保持寄存器地址0(上位机可以读写,写这个寄存器就修改设备设定温度)
  3. 继电器输出触点状态放在线圈地址0,写1就开启加热继电器
  4. 外部报警按钮信号,映射到离散输入地址0,上位机读取看按钮有没有按下

所有数据都放在固件RAM四块逻辑内存,Modbus通信只是读写这四块内存。

4 容易踩坑区分

  1. CPU物理寄存器:芯片内部,CPU运算用,和Modbus无关。
  2. Modbus逻辑寄存器:固件在RAM中开辟的4块内存,给Modbus协议使用。
  3. Java模拟从站:用数组模拟这四块RAM,没有真实硬件,纯软件内存。

5 总结

Modbus的四类寄存器,不是芯片硬件寄存器,是固件在内存划分出来的四块逻辑存储区,Modbus协议就是读写这四块内存。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进