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.hqwc.cn/news/493377.html

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

相关文章

蓝桥杯-标题统计

知识点: 关键是考察getline的作用 #include <iostream> using namespace std; int main() { string a; int t0; getline(cin,a);//每次读取一整行并把Enter键生成的换行符抛弃 for(int i0;i<a.length();i){ if(a[i]! )t; } cout<<t; return …

搜维尔科技:第九届元宇宙数字人大赛,参赛小组报名确认公告

各位参赛选手大家好&#xff0c;近期已收到新增报名信息如下表&#xff0c;请各位参赛选手确认&#xff0c;如果信息有误或信息不完整请电话联系赛务组工作人员进行更正 随着元宇宙时代的来临&#xff0c;数字人设计成为了创新前沿领域之一。为了提高大学生元宇宙虚拟人角色策划…

一个Post请求入门NestJS的路由与控制器

​ NestJS的控制器 控制器负责处理传入请求并向客户端返回响应。 控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。 通常&#xff0c;每个控制器都有不止一条路由&#xff0c;不同的路由可以执行不同的操作。 在使用了脚手架的项目中&#xff0c;我…

牛客周赛 Round 34 解题报告 | 珂学家 | 构造思维 + 置换环

前言 整体评价 好绝望的牛客周赛&#xff0c;彻底暴露了CF菜菜的本质&#xff0c;F题没思路&#xff0c;G题用置换环骗了50%, 这大概是唯一的亮点了。 A. 小红的字符串生成 思路: 枚举 a,b两字符在相等情况下比较特殊 a, b input().split() if a b:print (2)print (a)pri…

峰值检测电路

常用的峰值检测电路&#xff0c;如下图所示。 该电路有两种工作状态&#xff1a; 1、充电状态&#xff1a;D2导通&#xff0c;D1截止。 当U1的端比-端大时&#xff0c;V1VIN&#xff0c;VCV1-VD2&#xff0c;VOUTVC。这时&#xff0c;给电容C1充电。由于D1截止没有环路&#…

代码随想录算法训练营第二十三天| 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

文章目录 [1.修剪二叉搜索树(https://leetcode.cn/problems/trim-a-binary-search-tree/description/)2.将有序数组转换为二叉搜索树3.把二叉搜索树转换为累加树 [1.修剪二叉搜索树(https://leetcode.cn/problems/trim-a-binary-search-tree/description/) 遇到超范围节点&…

【Java】线程池总结——干货满满!!!

目录 一 使用线程池的好处 二 Executor 框架 2.1 简介 2.2 Executor 框架结构(主要由三大部分组成) 1) 任务(Runnable /Callable) 2) 任务的执行(Executor) 3) 异步计算的结果(Future) 2.3 Executor 框架的使用示意图 三 (重要)ThreadPoolExecutor 类简单介绍 3.1 Thr…

ASLR 和 PIE

前言 ASLR&#xff08;Address Space Layout Randomization&#xff0c;地址空间随机化&#xff09;是一种内存攻击缓解技术&#xff0c;是一种操作系统用来抵御缓冲区溢出攻击的内存保护机制。这种技术使得系统上运行的进程的内存地址无法被预测&#xff0c;使得与这些进程有…

积分商城管理系统的设计与实现

积分商城管理系统的设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全

mysql和redis双写一致性策略分析

mysql和redis双写一致性策略分析 一.什么是双写一致性 当我们更新了mysql中的数据后也可以同时保证redis中的数据同步更新&#xff1b; 数据读取的流程&#xff1a; 1.读取redis,如果value!null,直接返回&#xff1b; 2.如果redis中valuenull&#xff0c;读取mysql中数据对应的…

YOLOv9中“CBLinear”的结构!

ADown结构出炉啦&#xff0c;收藏起来写论文用&#xff01; 1.代码&#xff1a; 代码路径&#xff1a;yolov9-main->models->common.py&#xff0c;代码如下&#xff1a; class CBLinear(nn.Module):def __init__(self, c1, c2s, k1, s1, pNone, g1): # ch_in, ch_outs…

【算法小讲堂】#1 贪心算法

引入——关于贪心算法 我们先来做一个小游戏——现在假设自己是一个小偷&#xff0c;桌上有一些物品&#xff0c;包括一台iPhone15、一个充电宝、一个眼罩和一个溜溜梅。此时&#xff0c;你听说警察即将到来&#xff0c;那么你会先带走哪个东西呢&#xff1f; 一般来讲&#xf…