【嵌入式笔记】Modbus TCP

1.概述

定义:Modbus TCP 是 Modbus 协议的变体,基于 TCP/IP 协议栈,用于通过以太网实现工业设备间的通信。

背景:由施耐德电气(原 Modicon 公司)在 1999 年发布,将传统的 Modbus RTU/ASCII 适配到现代网络环境。

核心特点:

  1. 基于客户端/服务器模型,客户端(主站)发起请求,服务器(从站)响应。
  2. 默认使用 TCP 端口 502,支持高速、远距离通信。
  3. 二进制表现形式、紧凑的数据结构,通信效率高;
  4. 基于可靠连接的服务

2. 协议结构

Modbus TCP 报文由 MBAP 头(Modbus Application Header) 和 PDU(协议数据单元) 组成:

MBAP 头(7 字节)

  1. 事务标识符(2 字节):匹配请求与响应(如 0x0001)。
  2. 协议标识符(2 字节):固定为 0x0000,表示 Modbus 协议。
  3. 长度字段(2 字节):后续数据的字节数(包括单元标识符)。
  4. 单元标识符(1 字节):标识从站设备(类似 RTU 的从机地址)。

PDU(功能码 + 数据)

  1. 功能码(1 字节):定义操作类型(如 0x03 读保持寄存器)。
  2. 数据字段(N 字节):请求或响应的具体内容
  3. 示例
  • 请求(读取保持寄存器)
事务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.通信流程

  1. 建立连接
    客户端(主站)通过 TCP 端口 502 连接服务器(从站)。
  2. 构造请求
    MBAP 头:事务ID(唯一标识)、协议ID(0x0000)、长度(单元ID+PDU字节数)、单元ID(从站地址)。
    PDU:功能码(如 0x03 读寄存器) + 数据(地址、数量等)。
  3. 发送请求
    客户端通过 TCP 连接发送报文至服务器。
  4. 处理请求
    服务器验证报文,执行操作(读/写数据),生成响应(成功或异常)。
  5. 返回响应
    服务器返回响应报文,格式与请求类似:
    成功:功能码 + 数据(如寄存器值)。
    失败:功能码 + 0x80 + 异常码。
  6. 解析响应
    客户端匹配事务ID,提取数据或处理错误。
  7. 关闭连接(可选)
    短连接:单次通信后断开。
    长连接:复用连接多次通信。
  • 核心要点

    端口:502(TCP)。

    事务ID:唯一匹配请求与响应。

    功能码:定义操作类型(读/写)。

    长度字段 = 单元ID(1字节) + PDU字节数。

    字节序:大端(高位在前)。

  • 一句话总结:建连 → 组包 → 发请求 → 处理 → 回响应 → 解析 → 关连(可选)。

4. 与Modbus RTU的区别

  1. 从机地址不再重要,可通过IP地址区分;
  2. 取消CRC校验,因为TCP/IP数据中已存在校验;
  3. 多了MBAP报文头。
相关推荐
我们从未走散25 分钟前
设计模式学习笔记-----单例模式
java·笔记·学习·单例模式·设计模式
宇寒风暖5 小时前
@(AJAX)
前端·javascript·笔记·学习·ajax
ECC&SM97 小时前
Video_AVI_Packet(1)
笔记·音视频
壹Y.7 小时前
MATLAB 绘图速查笔记
笔记·matlab
菜菜子爱学习9 小时前
Nginx学习笔记(八)—— Nginx缓存集成
笔记·学习·nginx·缓存·运维开发
岑梓铭12 小时前
考研408《计算机组成原理》复习笔记,第四章(1)——指令系统概念(指令字长、N地址指令、定长和变长操作码)
笔记·考研·408·计算机组成原理·计组
岑梓铭12 小时前
考研408《计算机组成原理》复习笔记,第四章(3)——指令集、汇编语言
笔记·考研·408·计算机组成原理·计组
yuxb7312 小时前
Ansible 基础到实操笔记
linux·笔记·ansible
Qlittleboy13 小时前
tp5集成elasticsearch笔记
大数据·笔记·elasticsearch
檀越剑指大厂14 小时前
【Linux系列】服务器 IP 地址查询
linux·服务器·tcp/ip