Modbus RTU 协议
Modbus RTU(远程终端单元)是工业自动化中最常用的串行通信协议之一,它的核心优势在于结构紧凑、传输效率高。通常用于和PLC进行通信。
这里将协议拆分为两个部分进行解读,其一是功能指令报文,其二是返回报文。
一、指令报文(向从站设备发送需要读取设备数据的指令)
指令报文报文帧由四个字段组成包括设备地址(从机地址,plc中有多个从机)、功能码、数据域、CRC校验码。
设备地址:目标从站的地址,用于设备寻址
功能码:指示要执行的操作类型,如读取或写入数据
数据域:包含具体的操作参数或数据,内容取决于功能码,通常包含操作的起始地址和数量。例如,对于功能码0x03(读保持寄存器),数据域为4个字节:前两个字节是寄存器起始地址,后两个字节是寄存器数量
CRC校验码:循环冗余校验值,用于检查数据传输是否出错
完整的指令报文示例
01 03 00 00 00 02 C4 0B
01:设备地址,目标是从站1。
03:功能码,执行“读保持寄存器”操作。
00 00:数据域(请求参数),指定起始寄存器地址为0x0000。
00 02:数据域(请求参数),指定读取寄存器的数量为2个。
C4 0B:CRC校验,低字节C4在前,高字节0B在后。
指令含义:读取从站设备为1的寄存器数据,起始寄存器为0,从0开始读取两个寄存器的数据,(数据格式要分为大端模式和小端模式,大端模式直接读取数据,小端模式需要将两位字节颠倒后在读取数据)
二、返回报文示例
01 03 04 12 34 AB CD 00 20
01:设备地址,响应的从站地址。
03:功能码,与请求一致。
04:数据域(响应数据),表示后续有4个字节的数据。
12 34 AB CD:数据域(响应数据),读取到的两个寄存器的值(0x1234和0xABCD,均为高字节在前)。
00 20:CRC校验,低字节00在前,高字节20在后。
报文含义,读取到两个寄存器的数据,响应数据为12 34 AB CD,寄存器1的数据为 12 34 ,寄存器2的数据为 AB CD