"Modbus+RTU协议格式是工业自动化领域广泛应用的一种通信协议,常用于485接口。RTU(Remote Terminal Unit)模式下,数据以连续的二进制形式传输。本文档主要描述了Modbus RTU协议帧结构,包括下行命令帧和上行响应帧的构成,涉及读线圈状态和读保持寄存器两个功能码的使用方法。"
在Modbus RTU协议中,每个通信帧由以下几个部分组成:
1. **地址域(Address)**:8位的设备地址,用于指定接收命令的设备。地址范围是1到247,其中1表示广播地址,所有设备都能接收到。
2. **功能码(Function)**:8位的命令码,定义了通信请求的类型。例如:
- `01`:读线圈状态,用于读取设备的离散输入(线圈)状态。
- `03`:读保持寄存器,用于读取设备的保持寄存器中的数值。
3. **数据域(Data)**:根据功能码的不同,数据域包含不同的信息,如读取或写入的寄存器地址、数量等。
4. **CRC校验(CRC check)**:16位的循环冗余校验码,用于检测数据在传输过程中是否发生错误。
读线圈状态的命令帧格式如下:
```
ADDRESS 01 ADDRH ADDRL NUMH NUML CRC
```
其中:
- `ADDR`:线圈地址减1,转换成16进制表示。
- `NUM`:要读取的线圈状态值的二进制位数,转换成16进制表示。
响应帧格式可能为正确响应或错误响应:
- 正确响应:`ADDRESS 01 BYTECOUNT DATA1 DATA2 DATA3 DATAN CRC`
- `BYTECOUNT`:读取的字数。
- `DATA`:返回的线圈状态数据。
- 错误响应:`ADDRESS 0X81 Errornum CRC`
- `Errornum`:错误类型代码。
读保持寄存器的命令帧格式类似:
```
ADDRESS 03 ADDRH ADDRL NUMH NUML CRC
```
- `ADDR`:寄存器地址,转换成16进制表示,乘以10再减1,对应参数编号。
- `NUM`:要读取的寄存器数量,转换成16进制表示。
响应格式同样分为正确和错误响应:
- 正确响应:`ADDRESS 03 BYTECOUNT DATA1 DATA2 DATA3 DATAN CRC`
- `BYTECOUNT`:读取的字节数。
- `DATA`:返回的寄存器值。
- 错误响应:`ADDRESS 0X83 Errornum CRC`
举例来说,如果要检测变频器的输出频率,可以发送`0101003000103DC9`的16进制数据,变频器将返回`0101020020B824`。若要读取参数303的设定值,则发送`01030BD5000295B`。
注意,数据在返回时可能会有高低位的转换,例如`0020`转换为2000,对应50%的频率值。具体的值与百分比关系可能需要参考设备手册或特定的配置参数(如Par.300和Par.303)。
总结起来,Modbus RTU协议通过定义明确的帧结构,确保了设备间的可靠通信,允许上位机读取和设置远程设备的状态和参数,是实现工业自动化系统集成的关键技术之一。