ModBus常用功能码

0x01: 读线圈

Request:

  • 地址 (1 byte)
  • 功能码 (1 byte): 读线圈
  • 起始地址 (2 bytes): 指定需要读取线圈的起始地址
  • 线圈数量 (2 bytes): 指定需要读取线圈的数量
  • CRC校验码 (2 bytes)

Response:

  • 地址 (1 byte)
  • 功能码 (1 byte)
  • 字节数 (1 byte): 返回的字节数
  • 线圈状态 (长度为字节数除以8向上取整)
  • CRC校验码 (2 bytes)

0x03: 读保持寄存器

Request:

  • 地址 (1 byte)
  • 功能码 (1 byte): 读线圈
  • 起始地址 (2 bytes): 指定需要读取寄存器的起始地址
  • 寄存器数量 (2 bytes): 指定需要读取寄存器的数量
  • CRC校验码 (2 bytes)

Response:

  • 地址 (1 byte)
  • 功能码 (1 byte)
  • 数据字节数 (1 byte): 返回的字节数
  • 数据 (长度为数据字节数中的值)
  • CRC校验码 (2 bytes)

0x05: 写单个线圈

Request:

  • 地址 (1 byte)
  • 功能码 (1 byte)
  • 起始地址 (2 bytes): 指定需要写入线圈的起始地址
  • 数据 (2 bytes): 需要写入的数据
  • CRC校验码 (2 bytes)

Response:

  • 地址 (1 byte)
  • 功能码 (1 byte): 读线圈
  • 起始地址 (2 bytes): 写入线圈的起始地址
  • 数据 (2 bytes): 写入的数据
  • CRC校验码 (2 bytes)

0x06: 写单个寄存器

Request:

  • 地址 (1 byte)
  • 功能码 (1 byte)
  • 起始地址 (2 bytes): 指定需要写入寄存器的起始地址
  • 数据 (2 bytes): 需要写入的数据
  • CRC校验码 (2 bytes)

Response:

  • 地址 (1 byte)
  • 功能码 (1 byte): 读线圈
  • 起始地址 (2 bytes): 写入寄存器的起始地址
  • 数据 (2 bytes): 写入的数据
  • CRC校验码 (2 bytes)

0x10: 写多个寄存器

Request:

  • 地址 (1 byte)
  • 功能码 (1 byte)
  • 起始地址 (2 bytes): 指定需要写入寄存器的起始地址
  • 寄存器数量 (2 bytes): 指定需要写入寄存器的数量
  • 数据长度 (1 byte): 需要写入的数据的字节数
  • 数据 (长度为数据长度中的值): 需要写入的数据
  • CRC校验码 (2 bytes)

Response:

  • 地址 (1 byte)
  • 功能码 (1 byte): 读线圈
  • 起始地址 (2 bytes): 写入寄存器的起始地址
  • 寄存器数量 (2 bytes): 写入寄存器的数量
  • CRC校验码 (2 bytes)