코일和레지스터
前面介绍 Modbus 的콘텐츠中多次提到코일(coil)和레지스터(register)的概念,尤其是 Modbus 기능 코드 中,操作的对象基本上都是코일和레지스터。
在 Modbus 프로토콜中之所以仍然称为코일和레지스터,完全是历史原因。在 PLC 적용领域,一个코일就代表一个 PLC 출력点,也称为출력릴레이。通过控制코일导通与否来改变릴레이출력 상태,实现弱电控制强电。

但实际上,在如今的 Modbus 设备中,它们都只是对应一块内存区域而已。其中,코일代表位操作(bit),表示一个布尔변수;레지스터代表字操作(word),表示一个整型변수(当然也可以通过多个字的组合,表示浮点数以及其他复合데이터结构)。在 Modbus 프로토콜中,字(word)的길이是 16 位,即 2 个바이트。
레지스터种类설명
在 Modbus 프로토콜中,所有데이터均存放于레지스터中。根据存放的데이터유형以及各自读写特性,可以将레지스터分为四个部分,这四个部分可以连续也可以不连续,完全由개발者决定。
下表展示了四类레지스터的含义以及与 PLC 的类比。
| 레지스터种类 | 含义 | PLC | 예제 |
|---|---|---|---|
| 코일 상태 (Coil Status) | 출력포트(可读可写) | DO(数字量출력) | 电磁阀출력、LED 显示 |
| 이산 입력状态 (Input Status) | 입력포트(只读) | DI(数字量입력) | DIP 스위치、微动开关 |
| 유지 레지스터 (Holding 회원가입) | 출력매개변수(可读可写) | AO(模拟量출력) | PID 运行매개변수、阈值上下限 |
| 입력 레지스터 (Input 회원가입) | 입력매개변수(只读) | 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 주소一般采用10진수설명,共有 5 位,其中第一位数字代表레지스터유형。
- 레지스터 Modbus 프로토콜주소指的是통신时使用的레지스터寻址주소,例如 PLC 주소 40001 对应寻址주소 0x0000,40002 对应寻址주소 0x0001。레지스터寻址주소一般使用16진수설명。
细心的你会发现,PLC 레지스터주소 40003 对应的프로토콜주소是 0x0002,PLC 레지스터주소 30003 对应的프로토콜주소也是 0x0002,虽然통신时使用两个相同的 Modbus 프로토콜주소,但是因为不同레지스터的기능 코드是不相同的,因此并不存在访问冲突。
답글 작성