通信方式、addressRules、主从机通信状态-Modbus通讯协议要点第3部分

freefree技术Resources

这篇内容可直接阅读,适合用于基础学习和Search引流。

通信方式、addressRules、主从机通信状态-Modbus通讯协议要点第3部分缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.

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

Modbus的通信过程都是由主机发起的,从机在receive到主机的Request后再进行Response,从机不会主动进行data的send。并且从机之间也不会互相senddata。

1、Modbus的addressRules

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

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

从机是有唯一的Device address的,而主机本身是没有address的。

Modbus支持的寻址空间为256个,如下:通信方式、addressRules、主从机通信状态-Modbus通讯协议要点第3部分插图

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

2、Modbus的通信模式

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

(1)单播模式

单播模式:主机要访问某个子节点的时候,是通过子节点的address进行的一对一的访问方式。子节点在收到主节点发过来的Request以后,根据Request的TypeComplete相应处理后,子节点会向主节点返回一个message,也就是我们常说的“应答”。示意图如下:通信方式、addressRules、主从机通信状态-Modbus通讯协议要点第3部分插图1

从上图中是可以看到的:主节点通过sendRequest命令到从节点,从节点会从总线上receive到来自主节点的Request,然后Parse主节点的Request指令,根据指令Complete相应的动作,然后再给主节点的Request作出一个回应,便Complete了一次单播通信的过程。

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

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

(2)广播模式

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

主机的广播指令一般都是用于写命令的,对于来自于主机的广播指令,从机是不需要进行应答的。广播模式的示意图如下:通信方式、addressRules、主从机通信状态-Modbus通讯协议要点第3部分插图2

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

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

3、主从机的状态特征

既然Modbus是主从机的通信模式,那么在通信过程中就需要清楚主从机之间的状态,通过状态去理解Modbus的通信流程。(1)主机的状态特征如下图:通信方式、addressRules、主从机通信状态-Modbus通讯协议要点第3部分插图3

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

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

2)当单播Requestsend到一个从机上,主机将进入”等待应答” 状态, 同时一个临界超时定时计数器会启动。这个超时称为 “Response超时”。 它避免主节点永远处于”等待应答” 状态。 Response超时的time依赖于实际的应用Scene。

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

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

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

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

帧Error常见的有:对每个字符的奇even parity、 对整个帧的冗余校验。

(2)从机的状态特征如下图:通信方式、addressRules、主从机通信状态-Modbus通讯协议要点第3部分插图4

从上图中可以知道:

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

2)当收到一个Request时,子节点在处理Request中要求的动作前要先检验message包。当检测到Error时,必须向主节点send应答告知Error。(Error包含:Request的formatError、非法动作、非法的访问address……)。

3)当要求的动作Complete后,单播message要求必须按format应答主节点。

4)如果子节点在receive到的帧中检测到Error, 则没有Response返回到主节点。

5)任何子节点均应该定义并管理 Modbus 诊断计数器以提供诊断信息。通过使用 Modbus 诊断function code,可以得到这些计numerical value。最后再补充一个主从机的通信时序图:通信方式、addressRules、主从机通信状态-Modbus通讯协议要点第3部分插图5

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

技术术语(共 1 个)—— 点击展开
function codeModbusfunction code指定读/写OperationType,如01读线圈、03读保持register
来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbus通信协议技术社区 Category Modbus protocol标准 字数 2010 字 · 阅读约 6 分钟 更新 2023-10-02 永久链接 https://www.modbus.cn/25192.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时通信debug、register读写、线圈控制、data监控和message分析。 无需安装,微信Search「Modbus DebuggingAssistant」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇Resources用于真实项目?

进入Tools中心进行messageParse、CRC verification和设备debug,或Submit requirements获取选型与接入建议。

工程师member

把这篇文章变成可执行的debugResources

开通后可使用高级messageParse、Resources包Download、Code Example、工程案例和优先Technical Support,适合真实项目交付。

高级Tools不限次
Resources包与代码包
Complete Engineering Case Library
优先Technical Support入口

发表回复

您的邮箱address不会被公开。 必填项已用 * 标注