【嵌入式笔记】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报文头。
相关推荐
qq_336313931 小时前
java基础-网络编程-TCP
java·网络·tcp/ip
生擒小朵拉1 小时前
ROS1学习笔记(二)
笔记·学习
Root_Hacker2 小时前
include文件包含个人笔记及c底层调试
android·linux·服务器·c语言·笔记·安全·php
不凉帅2 小时前
NO.2计算机基础
网络·嵌入式·硬件·软件·计算机基础
GeekyGuru5 小时前
TCP/IP协议栈深度解析:从分层原理到内核实现与调优
网络·网络协议·tcp/ip
burning_maple6 小时前
redis笔记
数据库·redis·笔记
魔芋红茶6 小时前
Spring Security 学习笔记 4:用户/密码认证
笔记·学习·spring
googleccsdn6 小时前
ENSP Pro Lab笔记:配置BGP VXLAN双栈(3)
网络·笔记
爱宁~6 小时前
UnityShader学习笔记[二百九十九]UGUI中的Mask遮罩半透明Shader
笔记·学习
科技块儿7 小时前
【场景:识别C2通信】评估出站IP是否为已知恶意地址,方法:IP离线库+威胁情报融合
网络·网络协议·tcp/ip