【嵌入式笔记】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报文头。
相关推荐
月阳羊3 小时前
【硬件-笔试面试题】硬件/电子工程师,笔试面试题-26,(知识点:硬件电路的调试方法:信号追踪,替换,分段调试)
笔记·嵌入式硬件·面试·职场和发展
Star在努力4 小时前
14-C语言:第14天笔记
c语言·笔记·算法
霜绛5 小时前
机器学习笔记(三)——决策树、随机森林
人工智能·笔记·学习·决策树·随机森林·机器学习
charlie1145141919 小时前
快速入门Socket编程——封装一套便捷的Socket编程——导论
linux·网络·笔记·面试·网络编程·socket
xiaoli232710 小时前
课题学习笔记2——中华心法问答系统
笔记·学习
就改了10 小时前
FastDFS如何提供HTTP访问电子影像文件
笔记
CarmenHu10 小时前
Word2Vec和Doc2Vec学习笔记
笔记·学习·word2vec
门前云梦11 小时前
ollama+open-webui本地部署自己的模型到d盘+两种open-webui部署方式(详细步骤+大量贴图)
前端·经验分享·笔记·语言模型·node.js·github·pip
骁的小小站11 小时前
The Missing Semester of Your CS Education 学习笔记以及一些拓展知识(六)
linux·经验分享·笔记·学习·bash
Fine姐11 小时前
口语01-don‘t judge a book by its cover
笔记