modbus帧格式
整理出 modbus-rtu (基于RS485) 和 modbus-tcp(基于tcpip) 的帧格式便于日后查找。
modbus-rtu
frame format
Start Time Slave Addr Func Code Data CRC16 End Time >= 3.5 * 8bit 8 bit 8 bit N * 8 bit 16 bit >= 3.5 * 8bit
function code
Reg Type Start Addr Data type func code® func code(W) 线圈值 10001~1FFFF 1 bit 0x01 0x05, 0x15 离散量 00001~0FFFF 1 bit 0x02 保持寄存器 40001~4FFFF 16 bit 0x03 0x06, 0x16 输入寄存器 30001~3FFFF 16 bit 0x04
master write format
Slave Addr Func Code Reg Addr(W) Data(W) CRC16 0x01 0x06 0x0001 0x1234 0xXXYY
master read format
Slave Addr Func Code Reg Addr® Reg Count® CRC16 0x01 0x03 0x0002 0x0001 0xXXYY
slave response format
Slave Addr Func Code Data Bytes® data® CRC16 0x01 0x03 0x0002 0x5678 0xXXYY
modbus-tcp
frame format
和 modbus-rtu 相比:
使用 MBAP head 代替 slave addr 并且没有 crc 校验
Type MBAP Head slave Addr Func Code … CRC16 modbus-rtu - 0x?? same same same modbus-tcp 1234 0000 000? 0x?? same same -
MBAP Head
MBAP Head seq protocol length slave addr MBAP Head 12 34 00 00 00 09 FF
参数解释
Variable notes seq 通信事务处理标识符 protocol 0=modbus tcp 协议 length 后面数据的长度 slave addr 设备地址(不关心的情况下可以填0)