ModbusTCP报文格式说明:功能码0X03

Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP

Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。

标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。

ModbusTCP的数据帧可分为两部分:MBAP+PDU

报文头MBAP

MBAP为报文头,长度为7字节,组成如下:

事务处理标识(2byte)+协议标识(2byte)+长度(2byte)+单元标识符(1byte)

帧结构PDU

PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定

PDU详细结构

0x03:读保持寄存器

  • 请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)
  • 响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2)
  • 如:请求:00 00 00 00 00 06 01 03 00 00 00 01
  • 响应:    00 00 00 00 00 05 01 03 02 12 34

    请求:
  • 00 00为此次通信事务处理标识符
  • 00 00表示协议标识符,00 00为modbus协议;
  • 00 06为数据长度,用来指示接下来数据的长度,单位字节;
  • 01为设备地址,用以标识连接在串行线或者网络上的远程服务端的地址。以上七个字节也被称为modbus报文头;
  • 03为功能码,此时代码03为读取保持寄存器数据;
  • 00 00为起始地址;
  • 00 01为寄存器数量,(word数量);

    响应:
  • 00 00为此次通信事务处理标识符,应答报文要求与先前对应的请求保持一致;

    00 00为协议标识符,与先前对应的请求保持一致;

    00 05为数据长度,用来指示接下来数据的长度,单位字节;

    01为设备地址,应答报文要求与先前对应的请求保持一致;

    03为功能码,正常情况下应答报文要求与先前对应的请求保持一致,如果出错则返回80h+先前的功能码;

    02指示接下来数据的字节长度;

    12 34为被读取的保持寄存器中的数据值,即要求被读取的地址为00 00的保持寄存器中的数值为1234h。

上一篇:空指针+nginx配置导致的502


下一篇:lvs-nat和dr模式