ModBus TCP 分布式远程IO数据采集模块系统耦合器BL200 Modbus功能码0x01读线圈
ModBus TCP 分布式远程IO数据采集模块系统耦合器BL200 Modbus功能码
功能码0x01读线圈
此功能码用于读取远程设备中单个或多个线圈的连续状态。
请求
该请求指定了起始地址,即指定第一个线圈的地址,以及线圈的数量。
表 1:功能码0x01-请求报文
字段名称 | 字节数 | 示例 | 说明 |
事务标识符 | 2 Byte | 0x00 01 | Modbus请求/响应事务处理的识别 |
协议标识符 | 2 Byte | 0x00 00 | 0x00 00 :Modbus协议 |
报文长度 | 2 Byte | 0x00 06 | 后面数据的字节数 |
设备地址 | 1 Byte | 0x01 | 从站的地址识别 |
功能码 | 1 Byte | 0x01 | 读线圈,用功能码0x01 |
起始地址 | 2 Byte | 0x03 E8 | 地址详见“Modbus 寄存器映射”章节 |
线圈数量 | 2 Byte | 0x00 08 | 读 8 个线圈状态 |
响应
数据字段表明了输入状态的值。二进制1对应开启状态,0对应关闭状态。第一个数据字节的最低有效位(LSB)包含请求的第一位,其他的则按升序排列。如果响应数据不是8的倍数,则最后一个数据字节的其余位将填充零(朝向字节的高位)。
表 2:功能码0x01-响应报文
字段名称 | 字节(Byte) | 示例 | 说明 |
事务标识符 | 2 Byte | Modbus请求/响应事务处理的识别 | |
协议标识符 | 2 Byte | 0x00 00 | 0x00 00 :Modbus协议 |
报文长度 | 2 Byte | 0x00 04 | 后面数据的字节数 |
设备地址 | 1 Byte | 0x01 | 从站的地址识别 |
功能码 | 1 Byte | 0x01 | 读线圈,用功能码0x01 |
数据字节数 | 1 Byte | 0x01 | 数据的字节数 |
数据 | 1 Byte | 0x89 | 响应的数据 |
异常
表 3:功能码0x01-异常
字段名称 | 字节(Byte) | 示例 | 说明 |
… | |||
功能码 | 1 Byte | 0x81 | Modbus功能码 + 0x80 |
异常编码 | 1 Byte | 0x01 | 0x01 或 0x02 |
示例
从地址1000到1007读8个线圈的状态值。
请求
0x00 01 00 00 00 06 01 01 03 E8 00 08
表 4:功能码0x01-请求报文-示例
Byte | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
Data | 00 01 | 00 00 | 00 06 | 01 | 01 | 03 E8 | 00 08 | |||||
说明 | 事务标识符 | 协议标识符 | 报文长度 | 设备地址 | 功能码 | 起始地址 | 线圈数量 |
响应
0x00 01 00 00 00 04 01 01 01 89
表 5:功能码0x01-响应报文
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
Data | 00 01 | 00 00 | 00 04 | 01 | 01 | 01 | 89 | |||
说明 | 事务标识符 | 协议标识符 | 报文长度 | 设备地址 | 功能码 | 数据字节数 | 数据 |
从1007到1000的状态显示为字节值0x89或二进制1000 1001。地址1007是该字节最高有效位MSB,1000是最低有效位LSB,从高位到低位的分布如下:
表 6:线圈数据
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
地址 | 1007 | 1006 | 1005 | 1004 | 1003 | 1002 | 1001 | 1000 |
状态 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
说明 | 闭合 | 断开 | 断开 | 断开 | 闭合 | 断开 | 断开 | 闭合 |