Modbus 地址与功能码(Function Code)关系表.md 3.2 KB

地址类型与范围

类型 地址范围 (1-based) 数据类型 说明
Coil (线圈输出) 00001 – 09999 BIT 可读可写的单个位,通常用于开关量输出
Discrete Input (离散输入) 10001 – 19999 BIT 只读的单个位,通常用于开关量输入
Input Register (输入寄存器) 30001 – 39999 16-bit 或 32-bit 只读寄存器,通常用于传感器输入或模拟量
Holding Register (保持寄存器) 40001 – 49999 16-bit 或 32-bit 可读可写寄存器,通常用于控制命令或模拟量输出

常用功能码(Function Code)

功能码 功能描述 适用地址类型
01 Read Coils Coil (00001–09999)
02 Read Discrete Inputs Discrete Input (10001–19999)
03 Read Holding Registers Holding Register (40001–49999)
04 Read Input Registers Input Register (30001–39999)
05 Write Single Coil Coil (00001–09999)
06 Write Single Register Holding Register (40001–49999)
15 (0x0F) Write Multiple Coils Coil (00001–09999)
16 (0x10) Write Multiple Registers Holding Register (40001–49999)

扩展说明

1、BIT 类型地址
    Coil、Discrete Input 都是 1 位 (0/1)
    Input Register 和 Holding Register 内部也可按 bit 位访问(x.y 格式,例如 40001.0 表示寄存器 40001 的第 0 位)

2、寄存器数据类型映射
| Modbus 寄存器              | BaseLocator 数据类型示例                                | 说明                       |
| ----------------------- | ------------------------------------------------- | ------------------------ |
| Holding Register 16-bit | TWO\_BYTE\_INT\_SIGNED / TWO\_BYTE\_INT\_UNSIGNED | 标准 16 位整数                |
| Input Register 16-bit   | 同上                                                | 只读                       |
| Holding/Input 32-bit    | FOUR\_BYTE\_INT\_SIGNED / FOUR\_BYTE\_FLOAT       | 两个连续寄存器组成一个 32-bit 整数或浮点 |
| Holding/Input 64-bit    | EIGHT\_BYTE\_INT\_SIGNED / EIGHT\_BYTE\_FLOAT     | 四个连续寄存器组成 64-bit         |
| Holding/Input bit       | holdingRegisterBit / inputRegisterBit             | 对寄存器内部的某个位操作             |


3、偏移量计算(0-based)
| 地址类型             | 1-based 地址  | 偏移量公式                    |
| ---------------- | ----------- | ------------------------ |
| Coil             | 00001–09999 | offset = address - 1     |
| Discrete Input   | 10001–19999 | offset = address - 10001 |
| Input Register   | 30001–39999 | offset = address - 30001 |
| Holding Register | 40001–49999 | offset = address - 40001 |