【嵌入式笔记】Modbus TCP
1.概述
定义:Modbus TCP 是 Modbus 协议的变体,基于 TCP/IP 协议栈,用于通过以太网实现工业设备间的通信。
背景:由施耐德电气(原 Modicon 公司)在 1999 年发布,将传统的 Modbus RTU/ASCII 适配到现代网络环境。
核心特点:
- 基于客户端/服务器模型,客户端(主站)发起请求,服务器(从站)响应。
- 默认使用 TCP 端口 502,支持高速、远距离通信。
- 二进制表现形式、紧凑的数据结构,通信效率高;
- 基于可靠连接的服务
2. 协议结构
Modbus TCP 报文由 MBAP 头(Modbus Application Header) 和 PDU(协议数据单元) 组成:
MBAP 头(7 字节)
- 事务标识符(2 字节):匹配请求与响应(如 0x0001)。
- 协议标识符(2 字节):固定为 0x0000,表示 Modbus 协议。
- 长度字段(2 字节):后续数据的字节数(包括单元标识符)。
- 单元标识符(1 字节):标识从站设备(类似 RTU 的从机地址)。
PDU(功能码 + 数据)
- 功能码(1 字节):定义操作类型(如 0x03 读保持寄存器)。
- 数据字段(N 字节):请求或响应的具体内容
- 示例
- 请求(读取保持寄存器)
事务ID | 协议ID | 长度 | 单元ID | 功能码 | 起始地址 | 寄存器数量 |
---|---|---|---|---|---|---|
00 01 | 00 00 | 00 06 | 01 | 03 | 00 00 | 00 02 |
- 响应
事务ID | 协议ID | 长度 | 单元ID | 功能码 | 字节数 | 数据 |
---|---|---|---|---|---|---|
00 01 | 00 00 | 00 07 | 01 | 03 | 04 | 00 0A 00 0B |
3.通信流程
- 建立连接
客户端(主站)通过 TCP 端口 502 连接服务器(从站)。 - 构造请求
MBAP 头:事务ID(唯一标识)、协议ID(0x0000)、长度(单元ID+PDU字节数)、单元ID(从站地址)。
PDU:功能码(如 0x03 读寄存器) + 数据(地址、数量等)。 - 发送请求
客户端通过 TCP 连接发送报文至服务器。 - 处理请求
服务器验证报文,执行操作(读/写数据),生成响应(成功或异常)。 - 返回响应
服务器返回响应报文,格式与请求类似:
成功:功能码 + 数据(如寄存器值)。
失败:功能码 + 0x80 + 异常码。 - 解析响应
客户端匹配事务ID,提取数据或处理错误。 - 关闭连接(可选)
短连接:单次通信后断开。
长连接:复用连接多次通信。
-
核心要点
端口:502(TCP)。
事务ID:唯一匹配请求与响应。
功能码:定义操作类型(读/写)。
长度字段 = 单元ID(1字节) + PDU字节数。
字节序:大端(高位在前)。 -
一句话总结:建连 → 组包 → 发请求 → 处理 → 回响应 → 解析 → 关连(可选)。
4. 与Modbus RTU的区别
- 从机地址不再重要,可通过IP地址区分;
- 取消CRC校验,因为TCP/IP数据中已存在校验;
- 多了MBAP报文头。
本文地址:https://www.vps345.com/10680.html