modbus报文格式详解
时间: 2024-08-26 21:00:44 浏览: 30
Modbus是一种工业标准通信协议,主要用于设备间的数据交换,特别是在自动化控制系统中。其报文格式主要包括以下几个部分:
1. **功能码 (Function Code)**:报文的第一字节,分为四种功能:0x01(读线圈状态)、0x02(读输入寄存器)、0x03(写单个 coils 或 inputs)、0x04(读多个 coils 或 inputs)、0x05(写多个 coils 或 inputs)、0x81(读离散输入)、0x82(读holding registers)、0x83(写single holding register)、0x84(write multiple holding registers)等。
2. **地址块标识符 (Data Address)**:用于指定从何处开始读取或写入数据,通常由第二个和第三个字节组成,范围从0到65535,每个字节大端序存储。
3. **数据区 (Data Points)**:根据功能码的不同,这个区域长度变化。例如,读输入/输出寄存器通常需要指定要读取的寄存器数量和每个寄存器的值;写操作则会包含新的值。
4. **校验和 (Checksum)**:通常作为最后两个字节,用于验证传输数据的完整性,通常是通过计算前几个字节的和得到。
举个例子,一个典型的Modbus RTU请求报文(ASCII模式)可能会是这样的:
```
0x03 0x00 0x01 0x00 0x04 0x00 0x00 0x00 0x0F 0x64 0x65 0x72 0x69 0x73 0x63 0x61 0x74 0x65 0x0A
```
这里,`0x03`是功能码(写单个coil),`0x00 0x01`是地址(第一个coil),`0x00 0x04`指定了要写的数据点(4个),然后跟随着4个待写入的数据值。最后一对是CRC校验和。