Modbus协议详解2:通信方式、地址规则、主从机通信状态

首先我们要清楚:Modbus是一种串行链路上的主从协议,在通信线路上只能有一个主机存在,不会有多主机存在的情况。虽然主机只有一个,但是从机是可以有多个的。

Modbus的通信过程都是由主机发起的,从机在接收到主机的请求后再进行响应,从机不会主动进行数据的发送。并且从机之间也不会互相发送数据。

1、Modbus的地址规则

Modbus中的每个从机为了能在通信时被主机识别,都会有一个地址,也称为从节点地址。

从节点地址对从设备而言必须是唯一的,在总线上也只能有唯一的一个设备地址,即从机设备的地址在总线上也不能冲突。

从机是有唯一的设备地址的,而主机本身是没有地址的。

Modbus支持的寻址空间为256个,如下:

从上图中可以看到,给子节点使用的地址范围是1 ~ 247,248 ~255是被保留着的。非常重要的一点,0是广播地址,所有的子节点都必须要能够识别广播地址。

2、Modbus的通信模式

Modbus的通信模式有两种:单播模式和广播模式。

(1)单播模式

单播模式:主机要访问某个子节点的时候,是通过子节点的地址进行的一对一的访问方式。子节点在收到主节点发过来的请求以后,根据请求的类型完成相应处理后,子节点会向主节点返回一个报文,也就是我们常说的“应答”。示意图如下:

从上图中是可以看到的:主节点通过发送请求命令到从节点,从节点会从总线上接收到来自主节点的请求,然后解析主节点的请求指令,根据指令完成相应的动作,然后再给主节点的请求作出一个回应,便完成了一次单播通信的过程。

其实大家应该也能看到:在单播模式下,一个Modbus的事务它包含了两个报文,一个是由主机主动发出的“请求”报文,另一个是由从机返回的“应答”报文。

并且主机能准备访问到某个从机是通过从机的唯一地址实现的,从机识别主机发出的指令是否是发送到自己这边的,也是通过从机的唯一地址进行甄别的。

(2)广播模式

广播模式是主机用于向总线上的所有的从机发送请求的指令。

主机的广播指令一般都是用于写命令的,对于来自于主机的广播指令,从机是不需要进行应答的。广播模式的示意图如下:

从图中可以看出,广播模式时单向的,主机发送出广播指令,而从机不再对广播指令进行应答,数据流只在一个方向上流动。

注意:总线上所有的从机都必须要能够识别主机的广播指令,并且地址0是用于广播的,不能作为从机的地址。

3、主从机的状态特征

既然Modbus是主从机的通信模式,那么在通信过程中就需要清楚主从机之间的状态,通过状态去理解Modbus的通信流程。

(1)主机的状态特征

如下图:

根据上图可以分析得到主机的通信过程的一些信息:

1"空闲" = 无等待的请求。 这一般是在初始上电之后所处的状态。 主机只有在"空闲"状态才能发送请求。发送一个请求后,主机会离开"空闲"状态, 进入“忙”的状态,此时不能再发送其他的请求。

2)当单播请求发送到一个从机上,主将进入"等待应答" 状态, 同时一个临界超时定时计数器会启动。这个超时称为 "响应超时"。 它避免主节点永远处于"等待应答" 状态。 响应超时的时间依赖于实际的应用场景

3)当收到一个应答时,主节点在处理数据之前检验应答。在某些情况下,检验的结果可能为错误。如收到来自非期望的子节点的应答,或接收的帧错误,响应超时继续计时;当检测到帧错时,可以执行一个重试。

4)响应超时但没有收到应答时,则产生一个错误。那么主节点会重新进入”空闲” 状态, 并发出一个重试请求。重试的最大次数取决于主节点 的设置。

5)当广播请求发送到串行总线上,没有响应从子节点返回。然而主节点需要进行延迟以便使子节点在发送新的请求处理完当前请求。该延迟被称作 "转换延迟"。因此,主节点会在返回能够发送另一个请求的“空闲”状态之前,到" 等待转换延迟"状态。

6)在单播方式,响应超时必须设置到足够的长度以使任何子节点都能处理完请求并返回响应。而广播转换延迟必须有足够的长度以使任何子节点都能只处理完请求而可以接收新的请求。 因此,转换延迟应该比响应超时要短。

帧错误常见的有:对每个字符的奇偶校验、 对整个帧的冗余校验。

(2)从机的状态特征

如下图:

从上图中可以知道:

1)“空闲” = 没有等待的请求。 这一般是初始上电后的状态。

2)当收到一个请求时,子节点在处理请求中要求的动作前要先检验报文包。当检测到错误时,必须向主节点发送应答告知错误。(错误包含:请求的格式错误、非法动作、非法的访问地址......)。

3)当要求的动作完成后,单播报文要求必须按格式应答主节点。

4)如果子节点在接收到的帧中检测到错误, 则没有响应返回到主节点。

5)任何子节点均应该定义并管理 Modbus 诊断计数器以提供诊断信息。通过使用 Modbus 诊断功能码,可以得到这些计数值。

最后再补充一个主从机的通信时序图:

上面的时序图中描述的就是上面所说的主从机状态特征,对比来看就能看明白是什么意思了。

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

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

相关文章

渗透测试漏洞原理之---【任意文件读取漏洞】

文章目录 1、概述1.1、漏洞成因1.2、漏洞危害1.3、漏洞分类1.4、任意文件读取1.4.1、文件读取函数1.4.2、任意文件读取 1.5、任意文件下载1.5.1、一般情况1.5.2、PHP实现1.5.3、任意文件下载 2、任意文件读取攻防2.1、路径过滤2.1.1、过滤../ 2.2、简单绕过2.2.1、双写绕过2.2.…

音视频 ffmpeg命令直播拉流推流

直播拉流 ffplay rtmp://server/live/streamName ffmpeg -i rtmp://server/live/streamName -c copy dump.flv对于不是rtmp的协议 -c copy要谨慎使用 直播推流 ffmpeg -re -i out.mp4 -c copy flvrtmp://server/live/streamName参数:-re,表示按时间戳读取文件 参…

docker笔记8:Docker网络

1.是什么 1.1 docker不启动,默认网络情况 ens33 lo virbr0 在CentOS7的安装过程中如果有选择相关虚拟化的的服务安装系统后,启动网卡时会发现有一个以网桥连接的私网地址的virbr0网卡(virbr0网卡:它还有一个固定的默认IP地址192.168.122…

vr智慧党建主题展厅赋予企业数字化内涵

现如今,VR全景技术的发展让我们动动手指就能在线上参观博物馆、纪念馆,不仅不用受时间和空间的限制,还能拥有身临其境般的体验,使得我们足不出户就能随时随地学习、传承红色文化。 很多党建展厅都是比较传统的,没有运用…

Protocol Buffers教程

Protocol Buffers教程 Protocol Buffers简介下载安装Protocol Buffers编译器编写第一个protobuf文件,并编译成go文件Protocol Buffers定义消息类型Protocol Buffers基本数据类型Protocol Buffers枚举类型Protobuf生成的go源码分析Protobuf序列化和反序列化protobuf…

【实用 Python 库】使用 XPath 与 lxml 模块在 Python 中高效解析 XML 与 HTML

在今天的信息时代,数据无处不在,从网络爬虫到数据挖掘,从文本处理到数据分析,我们时常需要从结构化文档中提取有用的信息。XPath 是一门强大的查询语言,它可以在 XML 与 HTML 等文档中定位特定的元素与数据。而在 Pyth…

C++中的##、#符号含义

在C中,## 和 # 是两个不同的预处理符号。这些符号都是在C的预处理阶段使用的,用于在代码编译之前对文本进行操作。 #(字符串化操作符): 用于将宏参数转换为字符串常量。 #define STRINGIZE(x) #x const char* str S…

C++(QT)画图行车

通过鼠标在窗口上点击形成多个点的连线,绘制一辆汽车沿着绘制的连线轨迹前进。要求连线点数大于20.可以通过清除按钮清除已经绘制的连线,并可以重新绘制一条轨迹连线。当车辆行驶到轨迹终点时,自动停止。(汽车实在可用方块代替&am…

go锁--读写锁

每个锁分为读锁和写锁,写锁互斥 没有加写锁时,多个协程都可以加读锁 加了写锁时,无法加读锁,读协程排队等待 加了读锁,写锁排队等待 Mutex用来写协程之间互斥等待 读协程使用readerSem等待写锁的释放 写协程使用writer…

文末送书!谈谈原型模式在JAVA实战开发中的应用(附源码+面试题)

作者主页:Designer 小郑 作者简介:3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN博客专家,蓝桥云课认证讲师。 本文讲解了 Java 设计模式中的原型模式,并给…

2024年美团校招后端面试题汇总及其详解

1. 问进程和线程 解答: 进程和线程都是操作系统为了使多任务处理成为可能而定义的两种实体。 进程:进程是操作系统进行资源分配和调度的基本单位,是系统中的并发执行的单位。每个进程都有自己的独立的地址空间,一个进程无法直接访问另一个进程的变量和数据结构。如果一个…

Vue + Element UI 前端篇(六):更换皮肤主题

自定义主题 命令行主题工具 1.安装主题工具 首先安装「主题生成工具」,可以全局安装或者安装在当前项目下,推荐安装在项目里,方便别人 clone 项目时能直接安装依赖并启动。 yarn add element-theme --dev 2.安装chalk主题 安装白垩主题…

用对工具,你的全渠道电子商务业务就成功了一半

希望将全渠道电子商务纳入您的业务战略,但不确定从哪里开始?我们为您提供保障。这篇文章将指导您了解全渠道商务的基础知识,以及它与多渠道方法的区别,还将探讨利用全渠道方法的众多好处,并讨论企业如何通过全渠道客户…

C#,《小白学程序》第十三课:阶乘(Factorial)的计算方法与代码

1 文本格式 /// <summary> /// 阶乘的非递归算法 /// </summary> /// <param name"a"></param> /// <returns></returns> private int Factorial_Original(int a) { int r 1; for (int i a; i > 1; i--) { …

Anaconda虚拟环境下导入opencv

文章目录 解决方法测试 解决方法 1、根据自己虚拟环境对于的python版本与电脑对应的位长选择具体的版本&#xff0c;例如python3.9选择cp39&#xff0c;64位电脑选择64 下载地址&#xff1a;资源地址 若是不确定自己虚拟环境对应的python版本&#xff0c;可以输入下列命令&…

【100天精通Python】Day56:Python 数据分析_Pandas数据清洗和处理

目录 数据清洗和处理 1.处理缺失值 1.1 删除缺失值&#xff1a; 1.2 填充缺失值&#xff1a; 1.3 插值&#xff1a; 2 数据类型转换 2.1 数据类型转换 2.2 日期和时间的转换&#xff1a; 2.3 分类数据的转换&#xff1a; 2.4 自定义数据类型的转换&#xff1a; 3 数…

Activiti基础入门

文章目录 Activiti项目搭建引用依赖项Activiti服务初始化数据库配置配置文件测试demo Activiti功能服务RepositoryService&#xff1a;RuntimeService&#xff1a;TaskService&#xff1a;HistoryService&#xff1a;ManagementService&#xff1a;DynamicBpmnService&#xff…

基于Hugo 搭建个人博客网站

目录 1.环境搭建 2.生成博客 3.设置主题 4.将博客部署到github上 1.环境搭建 1&#xff09;安装Homebrew brew是一个在 macOS 操作系统上用于管理软件包的包管理器。类似于centos下的yum或者ubuntu下的apt&#xff0c;它允许用户通过命令行安装、更新和管理各种软件工具、…

医学案例|线性回归

一、案例介绍 某医师预研究糖尿病患者的总胆固醇和甘油三酯对空腹血糖的影响&#xff0c;某研究者调查40名糖尿病患者的总胆固醇、甘油三酯和空腹血糖的测量值如下&#xff0c;试根据上述研究问题作统计分析。 二、问题分析 本案例想要研究一些变量&#xff08;总胆固醇和甘油…

PostgreSQL问题记录:column “...“ does not exist

在PostgreSQL中&#xff0c;不论是在pgAdmin中&#xff0c;还是在命令行控制台里面&#xff0c;在SQL语句中表示属性值的总会遇到ERROR: column “…” does not exist这样的错误&#xff0c;比如下面的语句&#xff1a; 解决方案&#xff1a;将 “txt2txt” 的双引号改成单引…