Modbus RTU 功能码示例
Modbus RTU是Modbus协议的一种实现,它通过串行通信(如RS-485、RS-422、RS-232)来进行设备间的通信。在Modbus RTU协议中,03、04、06和10分别代表不同的功能码:
- 功能码03(Read Holding Registers):读保持寄存器
- 功能码04(Read Input Registers):读输入寄存器
- 功能码06(Write Single Register):写单个寄存器
- 功能码10(Write Multiple Registers):写多个寄存器
以下是使用这些功能码的示例:
功能码03:读保持寄存器
请求:
设备地址 功能码 寄存器起始地址 寄存器数量 CRC校验
01 03 006B 0003 CRC
这是一个Modbus RTU请求,用来从设备地址为0x01的设备读取保持寄存器。起始地址是0x006B(十进制的107),寄存器数量是0x0003(十进制的3)。CRC是两个字节的循环冗余校验码,用于错误检测。
响应:
设备地址 功能码 字节计数 数据(寄存器值) CRC校验
01 03 06 02AE 0000 0056 CRC
这是一个响应,表示设备地址为0x01的设备返回了3个寄存器的值,字节计数为0x06(因为每个寄存器2字节,共3个寄存器,所以是6字节)。
功能码04:读输入寄存器
请求:
设备地址 功能码 寄存器起始地址 寄存器数量 CRC校验
01 04 0008 0001 CRC
这个请求用于从设备地址为0x01的设备读取输入寄存器,起始地址是0x0008(十进制的8),寄存器数量是0x0001(十进制的1)。
响应:
设备地址 功能码 字节计数 数据(寄存器值) CRC校验
01 04 02 00A1 CRC
这个响应表示设备地址为0x01的设备返回了1个输入寄存器的值,字节计数为0x02(2字节)。
功能码06:写单个寄存器
请求:
设备地址 功能码 寄存器地址 寄存器值 CRC校验
01 06 0001 0003 CRC
这个请求用于将设备地址为0x01的设备的寄存器0x0001(十进制的1)的值设置为0x0003(十进制的3)。
响应:
设备地址 功能码 寄存器地址 寄存器值 CRC校验
01 06 0001 0003 CRC
这个响应表示设备接收到命令并将寄存器0x0001的值设置为0x0003。
功能码10:写多个寄存器
请求:
设备地址 功能码 寄存器起始地址 寄存器数量 字节计数 数据 CRC校验
01 10 0001 0002 04 000A 0002 CRC
这个请求用于将设备地址为0x01的设备的起始寄存器0x0001(十进制的1)开始的2个寄存器的值分别设置为0x000A和0x0002。
响应:
设备地址 功能码 寄存器起始地址 寄存器数量 CRC校验
01 10 0001 0002 CRC
这个响应表示设备接收到命令并将起始寄存器0x0001开始的2个寄存器的值设置成功。
注意:在实际应用中,CRC校验码是根据整个消息计算得出的,这里没有给出具体的CRC值。在实际编程实现时,需要使用CRC算法来计算和校验消息的正确性。