线圈和register
前面介绍 Modbus 的内容中多次提到线圈(coil)和register(register)的概念,尤其是 Modbus function code 中,Operation的对象基本上都是线圈和register。
在 Modbus protocol中之所以仍然称为线圈和register,完全是历史原因。在 PLC 应用领域,一个线圈就代表一个 PLC 输出点,也称为输出继电器。通过控制线圈导通与否来改变继电器输出状态,实现弱电控制强电。

但实际上,在如今的 Modbus 设备中,它们都只是对应一块内存区域而已。其中,线圈代表位Operation(bit),表示一个布尔变量;register代表字Operation(word),表示一个整型变量(当然也可以通过多个字的组合,表示浮点数以及其他复合data结构)。在 Modbus protocol中,字(word)的Length是 16 位,即 2 个byte。
register种类说明
在 Modbus protocol中,所有data均存放于register中。根据存放的data type以及各自读写特性,可以将register分为四个部分,这四个部分可以连续也可以不连续,完全由developer决定。
下表展示了四类register的含义以及与 PLC 的类比。
| register种类 | 含义 | PLC | 示例 |
|---|---|---|---|
| Coil status (Coil Status) | 输出端口(可读可写) | DO(数字量输出) | 电磁阀输出、LED 显示 |
| 离散input state (Input Status) | 输入端口(只读) | DI(数字量输入) | 拨码switch、微动switch |
| 保持register (Holding Register) | 输出参数(可读可写) | AO(模拟量输出) | PID 运行参数、阈值上下限 |
| 输入register (Input Register) | 输入参数(只读) | AI(模拟量输入) | 传感器data输入 |
register address分配
Modbus register address分配如下表所示,同样参照了 PLC register address的分配方法。
| register种类 | registerPLCaddress | registerModbus协议address | 简称 |
|---|---|---|---|
| Coil status | 00001~09999 | 0000H~FFFFH | 0x |
| 离散input state | 10001~19999 | 0000H~FFFFH | 1x |
| 保持register | 40001~49999 | 0000H~FFFFH | 4x |
| 输入register | 30001~39999 | 0000H~FFFFH | 3x |
该表中的 PLC address可以理解为 Modbus protocoladdress的变种,在触摸屏和 PLC 编程中应用较为广泛。
- register PLC address指存放于控制器中的address,这些控制器可以是 PLC,也可以是触摸屏,或者Text显示器。PLC address一般采用decimal描述,共有 5 位,其中第一位数字代表registerType。
- register Modbus protocoladdress指的是通信时使用的register寻址address,例如 PLC address 40001 对应寻址address 0x0000,40002 对应寻址address 0x0001。register寻址address一般使用hexadecimal描述。
细心的你会发现,PLC register address 40003 对应的协议address是 0x0002,PLC register address 30003 对应的协议address也是 0x0002,虽然通信时使用两个相同的 Modbus protocoladdress,但是因为不同register的function code是不相同的,因此并does not exist访问冲突。
发表回复