• 已删除用户
陈永强
陈永强
发布于 2026-07-22 / 1 阅读
0

Modbus RTU 协议

Modbus RTU 协议

Modbus RTU(远程终端单元)是工业自动化中最常用的串行通信协议之一,它的核心优势在于结构紧凑、传输效率高。通常用于和PLC进行通信。

这里将协议拆分为两个部分进行解读,其一是功能指令报文,其二是返回报文。

一、指令报文(向从站设备发送需要读取设备数据的指令)

指令报文报文帧由四个字段组成包括设备地址(从机地址,plc中有多个从机)、功能码、数据域、CRC校验码。

设备地址:目标从站的地址,用于设备寻址

功能码:指示要执行的操作类型,如读取或写入数据

功能码 (十六进制)

名称

操作对象

说明

0x01

读线圈

线圈 (Coils)

读取一个或多个可读写的开关量(ON/OFF)状态

0x02

读离散输入

离散输入 (Discrete Inputs)

读取一个或多个只读的开关量(ON/OFF)状态

0x03

读保持寄存器

保持寄存器 (Holding Registers)

读取一个或多个可读写的16位数据寄存器 (最常用)

0x04

读输入寄存器

输入寄存器 (Input Registers)

读取一个或多个只读的16位数据寄存器

0x05

写单个线圈

线圈 (Coils)

强制一个线圈为ON或OFF状态

0x06

写单个寄存器

保持寄存器 (Holding Registers)

写入一个值到一个保持寄存器中

0x0F (15)

写多个线圈

线圈 (Coils)

强制多个连续的线圈为ON或OFF状态

0x10 (16)

写多个寄存器

保持寄存器 (Holding Registers)

写入多个值到连续的保持寄存器中

数据域:包含具体的操作参数或数据,内容取决于功能码,通常包含操作的起始地址和数量。例如,对于功能码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