MBAP为报文头,长度为7字节
域 | 长度 | 描述 |
---|---|---|
事务处理标识符 | 2字节 | 可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文 |
协议标识符 | 2字节 | 00 00表示ModbusTCP协议 |
长度 | 2字节 | 表示接下来的数据长度,单位为字节 |
单元表示符 | 1字节 | 串行链路或其它总线上连接的远程从站地址 |
PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。
modbus的操作对象有四种:线圈、离散输入、输入寄存器、保持寄存器。
线圈:PLC的输出位,开关量,在MODBUS中可读可写
离散量:PLC的输入位,开关量,在MODBUS中只读
输入寄存器:PLC中只能从模拟量输入端改变的寄存器,在MODBUS中只读
保持寄存器:PLC中用于输出模拟量信号的寄存器,在MODBUS中可读可写
根据对象的不同,modbus的功能码有:
0x01:读线圈
0x05:写单个线圈
0x0F:写多个线圈
0x02:读离散量输入
0x04:读输入寄存器
0x03:读保持寄存器
0x06:写单个保持寄存器
0x10:写多个保持寄存器
读取从站保持寄存器40001-40024的值
查询命令:
0, 30, 0, 0, 0, 6, 6, 3, 0, 1, 0, 24
0, 30, 事务处理标识符 2字节
0, 0, 协议标识符 2字节
0, 6, 长度 2字节
6, 从站地址 1字节
3, 功能码 1字节 0x03:读保持寄存器
0, 1, 起始地址,高位在前 2字节
0, 24 读寄存器数量 高位在前 2字节
响应命令:
0, 30, 0, 0, 0, 51, 6, 3, 48, 144, 194, 252, 65, 89, 114, 59, 66, 187, 187, 121, 66, 123, 148, 153, 66, 205, 12, 177, 66, 7, 250, 192, 66, 205, 204, 199, 66, 79, 219, 196, 66, 20, 110, 184, 66, 113, 189, 163, 66, 92, 207, 136, 66, 167, 141, 84, 66