MODBUS TCP 功能码的作用与区别详解
MODBUS TCP 是一种基于 TCP/IP 的工业通信协议,功能码(Function Code)定义了客户端(Master)请求的操作类型。以下是其核心功能码的详细分类、作用与区别:
一、功能码分类
| 类别 |
功能码范围 |
操作类型 |
| 公共功能码 |
1~64, 73~99 |
标准操作(如读写寄存器) |
| 用户自定义码 |
65~72, 100~127 |
厂商或设备自定义扩展功能 |
二、核心功能码详解
1. 数据读取功能码
| 功能码 |
名称 |
作用 |
数据类型 |
权限 |
示例应用 |
| 01 |
Read Coils |
读取线圈状态(开关量输出) |
位(Bit) |
读 |
读取继电器开关状态 |
| 02 |
Read Discrete Inputs |
读取离散输入状态(开关量输入) |
位(Bit) |
读 |
读取传感器开关信号 |
| 03 |
Read Holding Registers |
读取保持寄存器(可读写的模拟量数据) |
字(Word) |
读 |
读取PLC温度设定值 |
| 04 |
Read Input Registers |
读取输入寄存器(只读的模拟量输入) |
字(Word) |
读 |
读取传感器实时值 |
区别:
- 01 vs 02:线圈(输出)与离散输入(输入)权限不同。
- 03 vs 04:保持寄存器可读写,输入寄存器只读。
2. 数据写入功能码
| 功能码 |
名称 |
作用 |
数据类型 |
权限 |
示例应用 |
| 05 |
Write Single Coil |
写入单个线圈状态 |
位(Bit) |
写 |
控制继电器通断 |
| 06 |
Write Single Register |
写入单个保持寄存器 |
字(Word) |
写 |
修改PLC设定参数 |
| 15 |
Write Multiple Coils |
批量写入多个线圈状态 |
位(Bit) |
写 |
同时控制多设备启停 |
| 16 |
Write Multiple Registers |
批量写入多个保持寄存器 |
字(Word) |
写 |
批量更新控制参数 |
区别:
- 05 vs 15:单线圈写入 vs 多线圈批量写入。
- 06 vs 16:单寄存器写入 vs 多寄存器批量写入。
3. 其他功能码
| 功能码 |
名称 |
作用 |
| 07 |
Read Exception Status |
读取设备异常状态(仅限串行链路) |
| 22 |
Mask Write Register |
按位掩码修改寄存器部分位 |
| 23 |
Read/Write Registers |
原子操作同时读写多个保持寄存器 |
三、关键区别
1. 数据类型
| 类型 |
功能码 |
典型用途 |
| 位操作 |
01, 02, 05, 15 |
开关量控制(如继电器) |
| 字操作 |
03, 04, 06, 16 |
模拟量数据(如温度) |
2. 读写权限
| 权限 |
功能码 |
典型数据 |
| 读 |
01, 02, 03, 04 |
传感器输入、设备状态 |
| 写 |
05, 06, 15, 16 |
控制命令、参数设定 |
3. 单次 vs 批量操作
| 操作类型 |
功能码 |
适用场景 |
| 单次操作 |
05, 06 |
少量数据更新 |
| 批量操作 |
15, 16 |
高效传输大量数据 |
四、异常响应