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算法来计算和校验消息的正确性。