(4)、支持的功能码描述
01(0x01)读线圈
在一个远程设备中,使用该功能码读取线圈的1 至2000 连续状态。请求PDU详细说明了起始地址,即*的**个线圈地址和线圈编号。从零开始寻址线圈。因此寻址线圈1-16 为0-15。
根据数据域的每个位(bit)将响应报文中的线圈分成为一个线圈。指示状态为1= ON 和0= OFF。**个数据作为字节的LSB(较低有效位),后面的线圈数据依次向高位排列,来组成8位一个的字节。如果返回的输出数量不是八的倍数,将用零填充最后数据字节中的剩余位(bit)(一直到字节的高位端)。字节数量域说明了数据的完整字节数
功能码01举例,读8通道DI数据,寄存器地址00033~00040:
请求 | 响应 | ||||
字段名称 | 十六进制 | 字段名称 | 十六进制 | ||
MBAP报文头 | 传输标识 | 01 |
MBAP报文头 | 传输标识 | 01 |
00 | 00 | ||||
协议标志 | 00 | 协议标志 | 00 | ||
00 | 00 | ||||
长度 | 00 | 长度 | 00 | ||
06 | 04 | ||||
单元标识符 | 01 | 单元标识符 | 01 | ||
功能码 | 01 | 功能码 | 01 | ||
起始地址Hi | 00 | 字节数 | 01 | ||
起始地址Lo | 20 | 输出状态DI7-DI0 | 00 | ||
输出数量Hi | 00 | ||||
输出数量Lo | 08 |
03(0x03)读保持寄存器
在一个远程设备中,使用该功能码读取保持寄存器连续块的内容。请求PDU说明了起始寄存器地址和寄存器数量。从零开始寻址寄存器。因此,寻址寄存器1-16 为0-15。在响应报文中,每个寄存器有两字节,**个字节为数据高位,*二个字节为数据低位。
功能码03举例,读8通道DI数据,寄存器地址40033:
请求 | 响应 | ||||
字段名称 | 十六进制 | 字段名称 | 十六进制 | ||
MBAP报文头 | 传输标识 | 01 |
MBAP报文头 | 传输标识 | 01 |
00 | 00 | ||||
协议标志 | 00 | 协议标志 | 00 | ||
00 | 00 | ||||
长度 | 00 | 长度 | 00 | ||
06 | 05 | ||||
单元标识符 | 01 | 单元标识符 | 01 | ||
功能码 | 03 | 功能码 | 03 | ||
起始地址Hi | 00 | 字节数 | 02 | ||
起始地址Lo | 20 | 寄存器值Hi(0x00) | 00 | ||
寄存器编号Hi | 00 | 寄存器值Lo(DI7-DI0) | 00 | ||
寄存器编号Lo | 01 |