Modbus 协议定义了四种核心数据类型(常被称为 “寄存器”,但严格来说 “线圈” 和 “离散输入” 是单比特数据,“寄存器” 是 16 位数据),每种类型有明确的用途、读写权限和应用场景,以下是它们的具体作用:
1. 线圈(Coils)
本质:单比特(1 bit)数据,取值为
0
(关)或1
(开),对应 “离散输出”。读写权限:可读写(支持读和写操作)。
功能码对应:
读线圈:功能码
1
(Read Coils);写单个线圈:功能码
5
(Write Single Coil);写多个线圈:功能码
15
(Write Multiple Coils)。
作用:用于控制设备的开关状态,是外部系统(客户端)向设备(服务器)发送控制指令的主要途径。
典型场景:
控制继电器的吸合 / 断开(如电机启停、阀门开关);
控制指示灯的亮 / 灭;
触发设备的单次动作(如复位信号)。
2. 离散输入(Discrete Inputs)
本质:单比特(1 bit)数据,取值为
0
或1
,对应 “离散输入”。读写权限:只读(只能被设备自身更新,外部系统只能读取,不能写入)。
功能码对应:读离散输入:功能码
2
(Read Discrete Inputs)。作用:用于反馈设备的外部开关状态,是设备向外部系统传递 “被动检测信号” 的途径。
典型场景:
读取限位开关的通断状态(如机械臂是否到达指定位置);
读取按钮的按下 / 弹起状态;
读取传感器的报警触点(如烟雾报警器的触发信号)。
3. 保持寄存器(Holding Registers)
本质:16 位(2 字节)数据,可存储整数、浮点数(需按协议解析)等,对应 “可读写寄存器”。
读写权限:可读写(外部系统可读取和写入,设备会 “保持” 这些值直到被更新)。
功能码对应:
读保持寄存器:功能码
3
(Read Holding Registers);写单个保持寄存器:功能码
6
(Write Single Register);写多个保持寄存器:功能码
16
(Write Multiple Registers)。
作用:用于存储设备的配置参数、设定值或中间状态,是外部系统配置设备的核心途径。
典型场景:
设定温度控制器的目标温度(如写入
50
表示 50℃);存储设备的运行模式(如 “自动模式”=1,“手动模式”=0);
记录设备的累计运行时间(可被外部系统读取,也可被重置写入)。
4. 输入寄存器(Input Registers)
本质:16 位(2 字节)数据,可存储整数、浮点数等,对应 “只读寄存器”。
读写权限:只读(只能由设备自身更新,外部系统只能读取,不能写入)。
功能码对应:读输入寄存器:功能码
4
(Read Input Registers)。作用:用于存储设备主动采集的测量数据或状态信息,是设备向外部系统传递 “主动监测数据” 的主要途径。
典型场景:
传递温度传感器的实时测量值(如
256
表示 25.6℃,需按比例解析);反馈设备的运行电流、电压等模拟量数据;
存储设备的内部状态码(如故障代码、运行进度)。
总结:核心区别与选择依据
实际开发中,需根据设备手册确认每种数据类型的地址范围(如线圈地址 00001-09999
,保持寄存器 40001-49999
等,不同设备可能有差异),再通过对应功能码进行通信。