Modbus TCP协议说明

协议帧

事物处理标识|  协议标识|       长度|  从机地址| 功能码| 数据     
    0x00 00|  0x00 00|    0x00 08|     0x01|   0x0F|    0x00 14 0x00 01 0x01 0x01
  • 事物处理标识(占2字节)
    区分不同报文,请求和应答的一组报文有相同的事物处理标识。每次通信之后应当自增。
  • 协议标识(占2字节)
    0x0000 表示ModBus TCP
  • 长度(占1个字节)
    表示之后还有多少字节
  • 从机地址(占1个字节)
    表示设备地址(多个设备接一个总线)

  • 功能码(占1个字节)
    功能码部分定义如下:

功能码 描述 访问类型 PLC地址 数据类型 操作数量
0x01 线圈寄存器 00001-09999 单/多
0x02 离散输入寄存器 10001-19999 单/多
0x03 保持寄存器 40001-49999 单/多
0x04 输入寄存器 30001-39999 单/多
0x05 线圈寄存器 00001-09999
0x06 保持寄存器 40001-49999
0x0F 线圈寄存器 00001-09999
0x10 保持寄存器 40001-49999
  • 寄存器起始地址
    表示寄存器地址

  • 数据部分

写请求数据帧

寄存器首地址|写个数|长度|值  
     0x0014|0x0001| 0x01|0x01
  1. 寄存器首地址(占两个字节),表示此次操作从哪个寄存器开始
  2. 写个数占(两个字节),表示批量操作多少个寄存器。例如首地址为0x0014,写个数为0x0002,则表示同时写0x0014和0x0015两个寄存器。
  3. 长度(占一个字节),表示该字节后还有多少字节。
  4. 值表示要写入的值。如果功能码是位操作,则值需要被拆成位赋值。例如写首地址为0x0014,写个数为0x0002。写字节为0x01,值为0x02。由于0x02用位表示为00000010,赋值后寄存器的结果为0x0014为0,0x0015为1。

写响应数据帧:

寄存器首地址|写个数
     0x0014|0x0001
  1. 寄存器首地址(占两个字节),表示此次操作从哪个寄存器开始
  2. 写个数(占两个字节),表示此次操作了多少个寄存器。

读请求数据帧

寄存器首地址|读个数
     0x0014|0x0001
  1. 寄存器首地址(占两个字节),表示此次操作从哪个寄存器开始读
  2. 读个数(占两个字节),表示要求读多少个寄存器。

读响应数据帧

读状态|读取值
  0x01|0x01
  1. 读状态表示读操作是否成功。0x01表示成功,0x02表示失败。
  2. 读取值表示读操作获取的值。如果功能码是位操作,那么读取的值也需要按位解析。例如从0x0014开始读取两个寄存器值。假设读到的值为0x03,那么表示0x0014和0x0015的值均为1。

转载于:https://www.cnblogs.com/insaneXs/p/11167679.html

你可能感兴趣的:(Modbus TCP协议说明)