Modbus 寄存器

线圈和寄存器

前面介绍 Modbus 的内容中多次提到线圈(coil)和寄存器(register)的概念,尤其是 Modbus 功能码 中,操作的对象基本上都是线圈和寄存器。

在 Modbus 协议中之所以仍然称为线圈和寄存器,完全是历史原因。在 PLC 应用领域,一个线圈就代表一个 PLC 输出点,也称为输出继电器。通过控制线圈导通与否来改变继电器输出状态,实现弱电控制强电。

但实际上,在如今的 Modbus 设备中,它们都只是对应一块内存区域而已。其中,线圈代表位操作(bit),表示一个布尔变量;寄存器代表字操作(word),表示一个整型变量(当然也可以通过多个字的组合,表示浮点数以及其他复合数据结构)。在 Modbus 协议中,字(word)的长度是 16 位,即 2 个字节。

寄存器种类说明

在 Modbus 协议中,所有数据均存放于寄存器中。根据存放的数据类型以及各自读写特性,可以将寄存器分为四个部分,这四个部分可以连续也可以不连续,完全由开发者决定。

下表展示了四类寄存器的含义以及与 PLC 的类比。

寄存器种类 含义 PLC 示例
线圈状态
(Coil Status)
输出端口(可读可写) DO(数字量输出) 电磁阀输出、LED 显示
离散输入状态
(Input Status)
输入端口(只读) DI(数字量输入) 拨码开关、微动开关
保持寄存器
(Holding Register)
输出参数(可读可写) AO(模拟量输出) PID 运行参数、阈值上下限
输入寄存器
(Input Register)
输入参数(只读) AI(模拟量输入) 传感器数据输入

寄存器地址分配

Modbus 寄存器地址分配如下表所示,同样参照了 PLC 寄存器地址的分配方法。

寄存器种类 寄存器PLC地址 寄存器Modbus协议地址 简称
线圈状态 00001~09999 0000H~FFFFH 0x
离散输入状态 10001~19999 0000H~FFFFH 1x
保持寄存器 40001~49999 0000H~FFFFH 4x
输入寄存器 30001~39999 0000H~FFFFH 3x

该表中的 PLC 地址可以理解为 Modbus 协议地址的变种,在触摸屏和 PLC 编程中应用较为广泛。

  • 寄存器 PLC 地址指存放于控制器中的地址,这些控制器可以是 PLC,也可以是触摸屏,或者文本显示器。PLC 地址一般采用十进制描述,共有 5 位,其中第一位数字代表寄存器类型。
  • 寄存器 Modbus 协议地址指的是通信时使用的寄存器寻址地址,例如 PLC 地址 40001 对应寻址地址 0x0000,40002 对应寻址地址 0x0001。寄存器寻址地址一般使用十六进制描述。

细心的你会发现,PLC 寄存器地址 40003 对应的协议地址是 0x0002,PLC 寄存器地址 30003 对应的协议地址也是 0x0002,虽然通信时使用两个相同的 Modbus 协议地址,但是因为不同寄存器的功能码是不相同的,因此并不存在访问冲突。

Leave a Reply