第四章 MODBUS协议的相关知识
4.1 功能码概要
4.2 01(0x01读线圈/离散量输出状态)
4.2.1 功能说明
0x01: 读线圈寄存器
0x02: 读离散输入寄存器
0x03: 读保持寄存器
0x04: 读输入寄存器
0x05: 写单个线圈寄存器
0x06: 写单个保持寄存器
0x0f: 写多个线圈寄存器
0x10: 写多个保持寄存器
如上所示一共8种功能码。这其中有涉及到线圈、离散输入、保持、输入四种寄存器。
线圈寄存器:线圈寄存器:实际上就可以类比为开关量(继电器状态),每一个bit对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。 线圈寄存器支持读也支持写,写在功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。对应上面的功能码也就是:0x01 0x05 0x0f
4.2.2 查询报文
4.2.3 响应报文
4.2.4 借助工具软件观察和理解
针对上图,我们拿下来做分析一下大小端:首先收到的信息是53,6B,01…而在线圈寄存器中存储的类似开关量的东西如下图:
我们画一个图分析一下:
你会发现几个规律并验证了前文:
1.按字节读取,从字节的角度来看,按字节从小到大的存储顺序来读。
2.一个字节内部存在大小端,其中53,3是低位,5是高位。地位存在低地址,所以是小端传输。
4.3 02 (0x02)读取离散量输入值
4.3.1 功能说明
4.3.2 查询报文
4.3.3 响应报文
0x01: 读线圈寄存器
0x02: 读离散输入寄存器
0x03: 读保持寄存器
0x04: 读输入寄存器
0x05: 写单个线圈寄存器
0x06: 写单个保持寄存器
0x0f: 写多个线圈寄存器
0x10: 写多个保持寄存器
如上所示一共8种功能码。这其中有涉及到线圈、离散输入、保持、输入四种寄存器。
离散输入寄存器:如果线圈寄存器理解了这个自然也明白了。离散输入寄存器就相当于线圈寄存器的只读模式,他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,是不能够写的。比如我读取外部按键的按下还是松开。所以功 能码也简单就一个读的0x02