ModbusTCP报文协议解析

一. 目录

ModbusTCP协议报文解析

  • 报文格式说明
  • modbus 常用功能代码简述
  • 功能码详述
二. 报文格式说明
  • 交互(通信)标识:
    2个字节 为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文。
  • 协议标识:
    2个字节 表示该条指令遵循ModbusTCP协议,一般都为00 00
  • 报文长度:
    2个字节 表示后面数据的长度,有几个字节,高字节在前(前六位Modbus/TCP协议不同功能码通用)
  • 设备标识 :
    1个字节 设备地址,这个可以用于局域网里面的具体的地址,如果目标机器有固定ip,这个就不起作用,直接上写成 00
  • 功能码:
    1个字节 功能码在modbus协议用于表示信息帧的功能
  • 数据:
    N个字节 后面数据根据不同功能码不同。
三. modbus 常用功能代码简述
常用功能代码.png
四. 功能码详述
1. '01' 读取多个线圈

请求示例报文:

Rx:00 01 00 00 00 06 FF 01 00 01 00 10

第1,2位 00 01 交互标识
第3,4位 00 00 协议标识
第5,6位 00 06 后面报文长度 有6位
第7位 FF 设备地址,发送什么,响应什么
第8位 01 功能码
第9,10位00 01 起始地址
第11,12位 00 10查询线圈长度,查询16位线圈

响应示例报文:

Tx:00 01 00 00 00 05 FF 01 02 0A 02

第1,2位 00 01 交互标识
第3,4位 00 00 协议标识
第5,6位 00 05 后面报文长度 有5位
第7位 FF 设备地址,发送什么,响应什么
第8位 01 功能码
第9位是后面数据位的长度,
第10位开始是数据位。

  • 01查询线圈,每一个16进制数据表示8位线圈
  • 第10位0A --> 0000 1010 第二位是1,第四位是1
2. '02' 读取多个离散量输入

与功能码 '01' 一样

3. ‘03’ 读取 多个保持寄存器

寄存器读取与线圈的区别,响应数据,寄存器数据每两个字节表示1位,一次请求不能超过127个地址

请求示例报文:

Rx:00 01 00 00 00 06 01 03 00 05 00 02

第1,2位 00 01 交互标识
第3,4位 00 00 协议标识
第5,6位 00 06 后面报文长度 有6位
第7位 01 设备地址,发送什么,响应什么
第8位 03 功能码
第9,10位00 05起始地址
第11,12位 00 02查询寄存器长度,查询2个寄存器

响应示例报文:

Tx:00 01 00 00 00 07 01 03 04 00 22 00 00

前四位(00 01 00 00)和7,8位(01 03)同请求发送的报文
第5,6位 00 07 是后面报文长度
第9位 04 是后面数据位的长度
第10-13位 数据位(00 22 00 00)

3. 04 读取 多个输入寄存器

与功能码 '03' 一样

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容