modbus-tcp协议详解

本文参考:Modbus协议中文版【完整版】.pdf,加上自己的理解的记录,该文章主要讲modbus-TCP协议。(文档下载链接:【免费】modbus协议中文详细解释文档资源-CSDN文库)

本系列文章分为三章:

1.modbus-tcp协议解释

2.modbus-tcp:功能码具体详细解释

3.modbus协议栈源码详细解读:libmodbus协议栈

后续会更新完.....

如有问题欢迎评论区或者私信交流

目录

1 引言  

2.modbus报文帧

2.1.报文格式

2.1.1.ADU报文长度

2.2.报文字段含义

2.3.MODBUS 数据模型

2.4.功能码

2.4.1.功能码分类

2.4.2.公共功能码

2.5.报文的数据流图 

2.5.1.正常响应

2.5.2.异常响应

 2.6.modbus协议栈报文处理流程


1 引言  

MODBUS OSI 模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备
之间提供客户机 / 服务器通信。
自从 1979 年出现工业串行链路的事实标准以来, MODBUS 使成千上万的自动化设备能够通信。
目前,继续增加对简单而雅观的 MODBUS 结构支持。互联网组织能够使 TCP/IP 栈上的保留系统端 口 502 访问 MODBUS
MODBUS 是一个请求 / 应答协议,并且提供功能码规定的服务。 MODBUS 功能码是 MODBUS
请求 / 应答 PDU 的元素。
通俗理解:modbus协议是基于tcp/ip的一个c/s模型的应用层协议 ,由Modicon公司开发,大众协助而成的一个应用层协议,其实和我们平时做的应用层通信很类似,没什么难度。

2.modbus报文帧

2.1.报文格式

MODBUS 协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上
 的 MODBUS 协议映射能够在应用数据单元(ADU)上引入一些附加域。( 注意:个人认为文档里面这个ADU和PDU画反了,但不影响解读

2.1.1.ADU报文长度

RS232 / RS485 ADU = 253 字节 + 服务器地址 (1 byte) + CRC (2 字节 ) = 256 字节
TCP MODBUS ADU = 249 字节 + MBAP (7 字节 ) = 256 字节
注:如果只是了解报文,这个长度不需要关心,如果想阅读协议栈源码需要留意一下

2.2.报文字段含义

地址域:以太网里面的TCP/IP的头部数据,进行标识以太网里面的哪个设备
差错检验:以太网里面的校验
modbus-ADU(功能码 + 数据)
功能码:标识该modbus报文是干嘛的,对数据有标识作用
数据:用户的数据(在某种请求中, 数据域可以是不存在的(0 长度),在此情况下服务器不需要任何附加信息。功 能码仅说明操作)

2.3.MODBUS 数据模型

modbus数据存储主要是寄存器和线圈(为什么叫线圈,是因为电气开关的原因)

2.4.功能码

2.4.1.功能码分类

 

有三类 MODBUS 功能码。它们是: 公共功能码(公认的功能码,不可以去修改,不然会不兼容其他设备),用户定义功能码(由用户自定义的功能码,不同用户定义不同),保留功能码

2.4.2.公共功能码

注:这里只需要知道有这些功能码,大概是这些功能,每一个详细的功能码的作用,后面会单独出一章,篇幅会很多,具体也可以去看看源码,会有不一样的收获。

2.5.报文的数据流图 

前面介绍过,modbus是一个c/s模型的协议,客户端给服务器发送请求,服务器进行响应回复客户端。根据服务器的响应分为:正常响应和异常响应

2.5.1.正常响应

modbus协议栈校验通过可以正常处理该功能码的功能,将正常处理的结果回复给客户端(modbus协议栈的处理流程可以看2.5小节

2.5.2.异常响应

modbus协议栈校验没有通过,将错误码通回复给客户端,用户根据该错误码可以进行异常处理或者进行告警告知用户(modbus协议栈的处理流程可以看2.5小节

 2.6.modbus协议栈报文处理流程

modbus协议栈,根据收到的报文先进行一系列的检查,才会进行数据的处理(其实和我们写代码一样,先进行边界检查,再处理

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

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

相关文章

Stable Diffusion 绘画入门教程(webui)-ControlNet(深度Depth)

上篇文章介绍了线稿约束,这篇文章介绍下深度Depth 文章目录 一、选大模型二、写提示词三、基础参数设置四、启用ControlNet 顾名思义,就是把原图预处理为深度图,而深度图可以区分出图像中各元素的远近关系,那么啥事深度图&#xf…

【README 小技巧】在项目README.md 中展示发布到使用的JDK 版本

在项目README.md 中展示发布到使用的JDK 版本 <a target"_blank" href"https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html"><img src"https://img-home.csdnimg.cn/images/20230724024159.png?origin_urlhtt…

分布式知识整理

分布式锁 以商场系统超卖现象举例 超卖现象一 现象&#xff1a; 商品卖出数量超出了库存数量。 产生原因&#xff1a; 扣减库存的动作在程序中进行&#xff0c;在程序中计算剩余库存&#xff0c;在并发场景下&#xff0c;导致库存计算错误。 代码复现 es.shutdown(); cycl…

智慧应急与物联网相结合:物联网技术如何提升智慧应急响应能力

目录 一、引言 二、智慧应急与物联网技术的结合 三、物联网技术提升智慧应急响应能力的途径 四、物联网技术在智慧应急中的应用案例 五、物联网技术在智慧应急中面临的挑战与解决方案 挑战一&#xff1a;技术标准与规范不统一 解决方案&#xff1a; 挑战二&#xff1a;…

Linux之JAVA环境配置jdkTomcatMySQL

目录 一. 安装jdk 1.1 查询是否有jdk 1.2 解压 1.3 配置环境变量 二. 安装Tomcat&#xff08;开机自启动&#xff09; 2.1 解压 2.2 启动tomcat 2.3 防火墙设置 2.4 创建启动脚本&#xff08;设置自启动&#xff0c;服务器开启即启动&#xff09; 三. MySQL安装&#xff08;…

国漫年番成趋势?但只有这5部最值得看

自从《斗罗大陆》动画爆火之后&#xff0c;越来越多国漫都开始以年番形式播出&#xff0c;每周都能追自己喜欢的动画也是观众们所期待的。但其实年番对制作公司的要求很高&#xff0c;如果技术跟不上难免出现质量下滑的问题。今天就带大家盘点一下目前在播的最值得看的5部国漫年…

查看navicat保存的数据库连接密码

背景 经常使用navicat的朋友可能会碰到忘记数据库连接密码的情况&#xff0c;自然会想到navicat连接配置中就保存了密码。 个人经验&#xff0c;按以下步骤可查看密码明文 本人在mac上使用的navicat版本 1&#xff0c;导出connection_local.ncx 点击OK导出保存为connection_l…

基于频率增强的数据增广的视觉语言导航方法(VLN论文阅读)

基于频率增强的数据增广的视觉语言导航方法&#xff08;VLN论文阅读&#xff09; 摘要 视觉和语言导航&#xff08;VLN&#xff09;是一项具有挑战性的任务&#xff0c;它需要代理基于自然语言指令在复杂的环境中导航。 在视觉语言导航任务中&#xff0c;之前的研究主要是在空间…

Android RecyclerView 如何展示自定义列表 Kotlin

Android RecyclerView 如何展示自定义列表 Kotlin 一、前提 有这么一个对象 class DeviceDemo (val name: String, val type: String, val address: String)要展示一个包含这个对象的列表 bluetoothDevices.add(DeviceDemo("bb 9800", "LE", "32:…

Linux 内存管理概述(偏实战,略理论,附链接)

基础理论 1. 内存映射 可以参考&#xff1a; Linux内存映射 - 知乎 写的很详细&#xff0c;而且也有代码分析 2. 虚拟内存的空间分布 通过这张图你可以看到&#xff0c;用户空间内存&#xff0c;从低到高分别是五种不同的内存段。只读段&#xff0c;包括代码和常量等。数据段…

Unity学习之Unity中的MVC思想

文章目录 1 前言2 MVC的基本概念3 不使用MVC思想制作UI逻辑3.1 拼面板3.2 面板脚本3.3 角色面板逻辑3.4 角色升级 4 使用MVC思想制作UI逻辑4.1 Model数据脚本4.2 View界面脚本4.2.1 MainView主界面4.2.2 RoleView 角色面板界面 4.3 Controller业务逻辑脚本4.3.1 MainController…

使用openai-whisper实现语音转文字

使用openai-whisper实现语音转文字 1 安装依赖 1.1 Windows下安装ffmpeg FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。 # ffmpeg官网 https://ffm…

2024年2月20日v1.0.5更新·优雅草便民工具youyacao-tools

2024年2月20日v1.0.5更新优雅草便民工具youyacao-tools apk下载 https://fenfacun.youyacao.com/tools105.apk 介绍 优雅草便民工具是一款由成都市一颗优雅草科技有限公司打造的便民查询公益工具&#xff0c;2024年1月17日正式发布v1.0.0版本&#xff0c;本工具为了方便大众免…

互联网加竞赛 机器视觉opencv答题卡识别系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 答题卡识别系统 - opencv python 图像识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分…

力扣● 343. 整数拆分 ● 96.不同的二叉搜索树

● 343. 整数拆分 想不到&#xff0c;要勇于看题解。 关键在于理解递推公式。 1、DP数组及其下标的含义&#xff1a;dp[i]是分解i这个数得到的最大的乘积。 2、DP数组如何初始化&#xff1a;dp[0]和dp[1]都没意义&#xff0c;所以直接不赋值&#xff0c;初始化dp[2]1即可。…

golang通过http访问外部网址

不同项目之前,通过http访问,进行数据沟通 先设定一个接口,确认外部能访问到 PHP写一个接口 public function ceshi_return() {$data $this->request->param();$id $data[id];$res Db::name(user)->field(id,status,price,name)->where([id>$id])->find…

【大数据】Flink SQL 语法篇(四):Group 聚合

Flink SQL 语法篇&#xff08;四&#xff09;&#xff1a;Group 聚合 1.基础概念2.窗口聚合和 Group 聚合3.SQL 语义4.Group 聚合支持 Grouping sets、Rollup、Cube 1.基础概念 Group 聚合定义&#xff08;支持 Batch / Streaming 任务&#xff09;&#xff1a;Flink 也支持 G…

深度神经网络中的计算和内存带宽

深度神经网络中的计算和内存带宽 文章目录 深度神经网络中的计算和内存带宽来源原理介绍分析1&#xff1a;线性层分析2&#xff1a;卷积层分析3&#xff1a;循环层总结 来源 相关知识来源于这里。 原理介绍 Memory bandwidth and data re-use in deep neural network computat…

S32 Design Studio PE工具配置UART

配置操作 先得配置下GPIO用的是哪个引脚 跟之前的外设一样&#xff0c;它这里有两个UART可以用。 这里只能用UART0和2的原因是UART1被LIN使用了。 配置的内容为 生成代码对应 首先会根据components名称创建个驱动状态结构体 /*! Driver state structure */ lpuart_state_t …

程序媛的mac修炼手册-- 2024如何彻底卸载Python

啊&#xff0c;前段时间因为想尝试chatgpt的API&#xff0c;需要先创建一个python虚拟环境来安装OpenAI Python library. 结果&#xff0c;不出意外的出意外了&#xff0c;安装好OpenAI Python library后&#xff0c;因为身份认证问题&#xff0c;根本就没有获取API key的权限…