阐述 Modbus 四种寄存器通信对象不是芯片物理硬件寄存器是固件软件内存是逻辑寄存器。很多人会混淆芯片CPU内部的物理寄存器 和 Modbus逻辑寄存器二者完全两码事。1 关键点Modbus的线圈、离散输入、保持寄存器、输入寄存器叫Modbus逻辑寄存器。单片机/PLC芯片本身有CPU物理寄存器用于CPU运算和Modbus无关。Modbus的4组是固件在RAM内存里开辟出来的四块内存区域软件层面模拟出来的逻辑存储区不是硬件芯片自带的物理寄存器。固件工作流程固件在内存划分四块内存线圈区bit位、离散输入区bit、保持寄存器区16bit字、输入寄存器区16bit字硬件采集传感器 → 固件把温度、压力写到【输入寄存器】内存块里外部4‑20mA端子、开关量输入固件刷新到【离散输入/线圈】内存上位机Modbus报文过来固件读取/修改这四块内存把内存数据返回给主站如果上位机写保持寄存器固件读到内存变化再去控制继电器、输出模拟量。真实硬件Modbus寄存器 RAM内存的一块逻辑分区。Java模拟Modbus从站数组/Map 模拟这块RAM内存分区二者原理一模一样。2 Modbus四种逻辑寄存器类型存储单位读写权限通俗说明线圈 Coils1 bit0/1可读、可写开关输出控制继电器通断。比如0断开1闭合离散输入 Discrete Inputs1 bit0/1只读外部开关输入硬件检测到按钮按下固件置1上位机只能读不能改保持寄存器 Holding Register16 bit1个字0‑65535可读、可写最重要。存参数、设定值、温度压力上位机可以读写。设备参数、配置大多放这里输入寄存器 Input Register16 bit1个字只读传感器原始采集值。比如AD采样出来的电压、温度硬件更新上位机只能读取不能修改2.1 地址小知识线圈、离散输入按位访问一个地址代表1个开关位保持、输入寄存器按字访问一个地址代表1个16位的字注意这些地址只是固件给这四块内存编的编号不是CPU物理内存地址是Modbus协议层面的逻辑地址。3 举例一个温控仪表测温探头采集温度固件把温度值写入输入寄存器地址0只读上位机只能看不能改温度原始采集值温度设定目标值存放在保持寄存器地址0上位机可以读写写这个寄存器就修改设备设定温度继电器输出触点状态放在线圈地址0写1就开启加热继电器外部报警按钮信号映射到离散输入地址0上位机读取看按钮有没有按下所有数据都放在固件RAM四块逻辑内存Modbus通信只是读写这四块内存。4 容易踩坑区分CPU物理寄存器芯片内部CPU运算用和Modbus无关。Modbus逻辑寄存器固件在RAM中开辟的4块内存给Modbus协议使用。Java模拟从站用数组模拟这四块RAM没有真实硬件纯软件内存。5 总结Modbus的四类寄存器不是芯片硬件寄存器是固件在内存划分出来的四块逻辑存储区Modbus协议就是读写这四块内存。