【嵌入式笔记】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 0100 0000 06010300 0000 02
  • 响应
事务ID协议ID长度单元ID功能码字节数数据
00 0100 0000 0701030400 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报文头。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《解锁React Native与Flutter:社交应用启动速度优化秘籍》

React Native和Flutter作为当下热门的跨平台开发框架,在优化应用启动性能方面各有千秋。今天,我们就深入剖析它们独特的策略与方法。 React Native应用的初始包大小对启动速度影响显著。在打包阶段,通过精准分析依赖,去除未使用的…

R语言学习--Day02--实战经验反馈

最近在做需要用R语言做数据清洗的项目,在网上看再多的技巧与语法,都不如在项目中实战学习的快,下面是我通过实战得来的经验。 判断Rstudio是否卡死 很多时候,我们在运行R语言代码时,即使只是运行框选的几行代码&#…

How Sam‘s Club nudge customers into buying more

Here’s how Sam’s Club (or similar warehouse memberships) nudge customers into buying more: It’s a classic psychological strategy rooted in sunk cost fallacy and loss aversion. 1. Prepaid Membership Creates a “Sunk Cost” Once you’ve paid the annual …

OpenHarmony系统HDF驱动开发介绍(补充)

一、HDF驱动简介 HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理、驱动消息机制和配置管理。 简单来说:HDF框架的驱动和Linux的驱动比较相似都是由配置文件和驱动…

自然语言处理 (NLP) 入门:NLTK 与 SpaCy 的初体验

自然语言处理入门:NLTK 与 SpaCy 的初体验 在当今数字化飞速发展的浪潮中,自然语言处理(NLP)已经成为了极具热度的技术领域。自然语言处理的核心目标是让计算机能够理解、分析并生成人类语言,其应用场景极为广泛&…

LLaVA:开源多模态大语言模型深度解析

一、基本介绍 1.1 项目背景与定位 LLaVA(Large Language and Vision Assistant)是由Haotian Liu等人开发的开源多模态大语言模型,旨在实现GPT-4级别的视觉-语言交互能力。该项目通过视觉指令微调技术,将预训练的视觉编码器与语言模型深度融合,在多个多模态基准测试中达到…

如何利用大模型对文章进行分段,提高向量搜索的准确性?

利用大模型对文章进行分段以提高向量搜索准确性,需结合文本语义理解、分块策略优化以及向量表示技术。以下是系统性的解决方案: 一、分块策略的核心原则 语义完整性优先 分块需确保每个文本单元在语义上独立且完整。研究表明,当分块内容保持单一主题时,向量嵌入的语义表征能…

Java高频面试之并发编程-17

volatile 和 synchronized 的区别 在 Java 并发编程中,volatile 和 synchronized 是两种常用的同步机制,但它们的适用场景和底层原理有显著差异。以下是两者的详细对比: 1. 核心功能对比 特性volatilesynchronized原子性不保证复合操作的原…

技术债务积累,如何进行有效管理

识别和评估技术债务、明确技术债务的优先级、制定系统的还债计划、持续监控与预防技术债务产生是有效管理技术债务积累的重要策略。其中尤其要注重识别和评估技术债务,只有准确识别技术债务的种类和严重程度,才能制定出高效且有针对性的解决方案&#xf…

安装windows版本的nacos

一、下载nacos安装包 浏览器搜索nacos,进入nacos官网 https://nacos.io/docs/latest/overview/ 选择下载windows版本的nacos 二、解压缩 三、进入bin目录,cmd命令行窗口 四、启动nacos 查看日志 五、打开可视化页面查看 以上,就是安装wind…

小结:Android系统架构

https://developer.android.com/topic/architecture?hlzh-cn Android系统的架构,分为四个主要层次:应用程序层、应用框架层、库和运行时层以及Linux内核层。: 1. 应用程序层(Applications) 功能:这一层包…

鸿蒙5.0项目开发——鸿蒙天气项目的实现(欢迎页)

【高心星出品】 文章目录 欢迎页面效果数据字典创建数据库表格Splash页面页面功能欢迎页代码亮点 项目按照从数据库连接层–视图层–业务逻辑层这种三层架构开发,所以先设计了数据库表格的结构,在EntryAbility中创建表格。 欢迎页面效果 数据字典 sear…

使用谱聚类将相似度矩阵分为2类

使用谱聚类将相似度矩阵分为2类的步骤如下: 构建相似度矩阵:提供的1717矩阵已满足对称性且对角线为1。 计算度矩阵:对每一行求和得到各节点的度,形成对角矩阵。 计算归一化拉普拉斯矩阵:采用对称归一化形式 LsymI−D…

MySQL 8.0 OCP 英文题库解析(三)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题16~25 试题16:…

【SQL】如何在 SQL 中统计结构化字符串的特征频率

在数据分析场景中,我们经常会遇到需要解析结构化字符串并统计特征出现次数的需求。本文将以常用数据库为例,探讨如何高效处理类似 [特征A][特征B][特征C] 格式的字符串数据,并实现特征频率统计。以下是完整的实现思路和解决方案。 一、问题场…

Docker Compose 的安装方法

以下是 Docker Compose 的安装方法整理,综合了多篇指南的推荐步骤和注意事项: 一、安装前准备 确保已安装 Docker Docker Compose 依赖 Docker 引擎运行,需先安装 Docker。若未安装,可通过以下命令一键安装(国内服…

配置Nginx解决http host头攻击漏洞【详细步骤】

前言 大概内容: 安全系统渗透测试出host头攻击漏洞,下面是解决步骤,本人已测过无问题。 server_name aaabbb.com; if ($http_Host !~* ^127.0.0.1|aaabbb.com|localhost$){return 403;}

自研时序大模型讲解(4月29日)直播回顾

4 月 29 日,清华团队揭秘:时序大模型如何让数据“活”起来线上直播圆满结束。清华大学软件学院博士生,IoTDB 原生机器学习引擎 AINode 研发同学刘雍在线上面向数千人次的时序数据分析人员与 AI 大模型行业关注者,就时序大模型的发…

attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作获取第二维度,第三维度

attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作获取第1 维度,第二维度 attention_weights = torch.ones_like(prompt_embedding[:, :, 0]) 这行代码的作用是创建一个与 prompt_embedding[:, :, 0] 形状相同且所有元素都为 1 的张量,它用于初始化…

鸿蒙Next API17新特性学习之如何使用新增鼠标轴事件

今天咱们接着学习鸿蒙开发文档API17版本的新特性——对鼠标轴事件的支持。这对于需要精细交互的应用来说是一个非常有用的特性,例如地图滚动、文档浏览等场景。本文将详细介绍在鸿蒙 Next 中如何使用新增的鼠标轴事件。 开发步骤 环境准备 在开始开发之前&#x…