AUTOSAR —— CAN网络管理(CanNm)

article/2025/9/28 7:35:28

1. 网络状态

AUTOSAR网络管理节点内部有两个状态,一个是Requested - 被请求状态,另一个是Released - 被释放状态,当节点的应用层需要使用总线进行通讯的时候,会调用接口使得节点进入请求状态,当应用层没有通信需求的时候,调用接口使得节点进入释放状态。

需要注意的是,即使节点当前处于释放状态,节点的通讯依然有可能是处于开启状态,因为网络上的其它节点有可能正在请求总线。所以这个状态代表的是节点应用层是否有通信需求,并不代表总线开启或关闭。有通讯需求的时候处于请求状态,无通讯需求的时候处于释放,但总线是否在通讯不仅仅取决于当前节点自己,而是取决于网络上的所有节点。

节点上电初始化后默认进入释放状态

2. CAN 网络节点运行模式

一个CAN网络通信节点包含以下运行模式:
在这里插入图片描述

(1)Network Mode(网络模式)

处于网络模式中的节点,网络通信是处于开启或工作模式(包含了开始工作时和结束工作时的准备阶段)。网络模式又细分为以下三个阶段:

① Repeat Message State(报文重复阶段-RMS)

当节点从其他模式进入Network Mode时,默认进入Repeat Message State,该阶段是网络正式开始工作前的准备阶段,用来等待网络中所有相关节点进行网络准备,开启通信。

② Normal Operation State(常规运行阶段-NOS)

节点由Repeat Message State进入Normal Operation State,该状态为节点通信正常工作状态。

③ Ready Sleep State(准备睡眠阶段-RSS)

节点工作完成后,由Normal Operation State状态进入Ready Sleep State,准备进入睡眠状态。该阶段用来等待网络中所有节点工作完成,之后统一进入睡眠状态。

(2)Prepare Bus-Sleep Mode(预睡眠模式-PBM)

节点从网络模式的准备睡眠阶段进入预睡眠模式,该模式与Ready Sleep State的作用类似,但它已经不再属于网络模式了,是正式进入睡眠阶段前更进一步的准备阶段。

(3)Bus-Sleep Mode(睡眠模式-BSM)

睡眠模式就是节点停止工作的模式,可以节省能量消耗,是整个网络管理的最终目的。网络管理工作就是管理各个节点如何有序进入睡眠模式和恢复工作状态。节点上电或复位后应默认进入睡眠模式

3. 网络管理报文的格式

在AUTOSAR中,网络管理报文以NM PDU的形式存在,典型的结构如下图所示:

在这里插入图片描述
其中有用的两个字节就是Byte0-Source Node Identifier(节点源地址)Byte1-Control Bit Vector(控制字节)。这两个字节在NM PDU中的位置是可以配置的。

(1)节点源地址 - Source Node Identifier

节点源地址是节点的标识符,网络中所有节点的源地址是唯一的,通常位于0x400-0x4FF范围内。

(2)控制位向量 - Control Bit Vector

Control Bit Vector的定义如下,在节点初始化的时候被置为0x00:
在这里插入图片描述

Bit 0: Repeat Message Request

  • 0: Repeat Message State not requested
  • 1: Repeat Message State requested
    该位置1的时候表示当前节点请求所有节点进入报文重复阶段。

Bit 3: NM Coordinator Sleep Bit

  • 0: Start of synchronized shutdown is not requested by main coordinator
  • 1: Start of synchronized shutdown is requested by main coordinator
    该位置1时表示主协调节点请求开始进入同步休眠。

Bit 4 Active Wakeup Bit

  • 0: Node has not woken up the network (passive wakeup),即当前节点收到网络管理报文,被其它节点唤醒。
  • 1: Node has woken up the network (active Wakeup),即当前节点主动唤醒网络(通过Request),亦称本地唤醒。

Bit 6 Partial Network Information Bit (PNI)

  • 0: NM PDU contains no Partial Network request information
  • 1: NM PDU contains Partial Network request information
    该位表示该条网络管理报文中是否包含部分网络激活信息。

4. 节点状态转换

我们对着标准中的这幅状态转换图,来详细说一下各个状态之间是如何转换的,以及节点处于每个状态时要做哪些工作。

在这里插入图片描述

① 初始化

节点上电或复位后,经初始化函数CanNm_Init()默认进入总线睡眠状态,在总线睡眠状态下应停发所有应用报文和网络管理报文,但要可以接收网络管理报文,以使得其它节点能够唤醒当前节点。

② 进入网络模式

当节点收到了网络管理报文时,不是直接进入网络模式,而是上报应用层,应用层判断当前状态,允许的话会调用CanNm_PassiveStartup()函数,使节点进入网络模式。当节点自身想要进行网络通讯时,调用CanNm_NetworkRequest()使节点进入网络模式。前者是被动,后者是主动。后者发送的网络管理报文中CBV的Active Wakeup Bit位为1.

节点在网络模式中要一直发送应用报文。

节点进入网络模式后,默认进入重复报文阶段,启动定时器NM-Timeout,NM-Timeout用来记录网络管理报文是否超时,其超时时间为CanNmTimeoutTime,每收到或成功发送一帧网络管理报文,都应重启NM-Timeout。节点要开始周期发送网络管理报文。常规情况下,节点要先等待一个时间偏移量(CanNmMsgCycleOffset)后再发送第一帧网络管理报文,发送周期为CanNmMsgCycleTime,发送次数为CanNmRepeatMessageTime。

网络中所有节点的报文发送周期CanNmMsgCycleTime和CanNmTimeoutTime都是相同的,且CanNmTimeoutTime必须大于CanNmMsgCycleTime;所有节点的CanNmMsgCycleOffset都是不同的,以防止网络中所有节点同时发送网络管理报文造成网络拥塞。

③ 进入常规运行阶段

当节点在重复报文阶段发送了CanNmRepeatMessageTime次网络管理报文后,需要退出重复报文阶段,退出时判断网络当前处于释放状态还是请求状态,如果处于请求状态,则进入常规运行阶段,如果处于释放状态,则进入准备睡眠阶段。

在常规运行阶段中,节点要周期发送网络管理报文,发送周期为CanNmMsgCycleTime。节点网络此时处于正常工作状态。

在常规运行阶段中,定时器NM-Timeout如果超时了要被重启。

④ 由常规运行阶段返回重复报文阶段

当节点处于常规运行阶段时,如果收到了Repeat Message Request置为1的网络管理报文,则会强制重新进入重复报文阶段。进入重复报文阶段后的逻辑同上。

⑤ 进入准备睡眠阶段

当节点不再需要进行网络通讯时,应用层会调用**CanNm_NetworkRelease()**函数,释放网络,节点进入准备睡眠阶段,停发网络管理报文,但要保持应用报文的发送

⑥ 重新返回常规运行阶段

节点处于准备睡眠阶段时,如果应用层重新需要使用网络,可以调用CanNm_NetworkRequest()函数使节点重新回到常规运行阶段。

⑦ 准备睡眠阶段返回重复报文阶段

当节点处于准备睡眠阶段时,如果收到了Repeat Message Request置为1的网络管理报文,也会强制重新进入重复报文阶段。进入重复报文阶段后的逻辑同上。

⑧ 由重复报文阶段进入准备睡眠阶段

如上文所述,当重复报文阶段退出时如果节点网络处于释放状态,则节点直接进入准备睡眠阶段。

⑨ 进入预睡眠模式

当节点在准备睡眠阶段NM-Timeout超时,即网络中所有节点都已进入准备睡眠阶段(或不处于网络模式),网络中没有网络管理报文,节点将会进入预睡眠模式,同时启动定时器Wait Bus-Sleep Timer,其超时时间为CanNmWaitBusSleepTime,所有节点的CanNmWaitBusSleepTime都应配置为相同的,以保证所有节点同时进入睡眠模式。

节点在预睡眠模式中同样不发送网络管理报文,同时还要停止应用报文的发送。

⑩⑫ 由预睡眠模式进入网络模式

步骤⑩和⑫我理解是一回事,就是当节点处于预睡眠模式的时候,应用层想要使用网络进行通讯,或收到了其他节点的网络管理报文,就会重新进入网络模式,也是默认进入重复报文阶段。

⑪ 进入睡眠模式

当节点在预睡眠模式中定时器Wait Bus-Sleep Timer超时后,就会进入睡眠模式,睡眠模式中网络管理报文和应用报文同样都不发送,节点正式进入休眠状态,应尽可能地关闭功能,降低能量消耗。

5. 附加策略

(1)网络管理报文立即发送模式

我们前文说过,当节点进入重复报文阶段时,会重复发送几次网络管理报文。常规情况下,因为网络管理报文通常周期比较长,且第一帧报文还有偏移量,所以激活网络的实时性不是很好,标准中为解决这个问题制定了一个能够立即发送网络管理报文的策略。

当CanNmImmediateNmTransmissions > 0时,要启动网络管理报文立即发送模式,此时CanNmMsgCycleOffset不再起作用,节点尽可能快地发送第一帧网络管理报文,发送周期不再为CanNmMsgCycleTime,而是用更短的CanNmImmediateNmCycleTime,共发送CanNmImmediateNmTransmissions次,然后进入常规运行阶段,之后网络管理报文的发送周期恢复CanNmMsgCycleTime。

注意:网络管理报文立即发送模式只有当节点主动唤醒网络的时候才启用,被动唤醒时不启用。是当前节点用来快速唤醒网络中其它节点的一个策略。

(2)总线负载降低策略(Bus Load Reduction Mechanism)

由上文可知,当节点处于重复报文阶段和常规运行阶段的时候,都会周期性发送网络管理报文,这对总线负载是一种消耗,且网络中节点越多,总线负载占用越大。标准中制定了一种策略来降低总线负载。

通常情况下,在常规运行阶段,所有节点都要发送网络管理报文,节点中有一个定时器CanNm Message Cycle Timer,每发送一帧网络管理报文,该定时器就重新装载CanNmMsgCycleTime的值,即网络管理报文的发送周期为CanNmMsgCycleTime。但其实只要有一个节点在发送报文,网络中所有节点就都可以保持在网络模式,多发的网络管理报文是对总线负载的浪费。

总线负载降低策略具体为:

当配置参数与CanNmBusLoadReductionEnabled为有效,且节点处于常规运行阶段时,进入总线负载降低模式,此时:

  • 节点如果接收到了一帧网络管理报文,则应将定时器CanNm Message Cycle Timer重置为CanNmMsgReducedTime,而不是CanNmMsgCycleTime,CanNmMsgReducedTime 参数是一个小于 CanNmMsgCycleTime 且大于CanNmMsgCycleTime的一半( ½ CanNmMsgCycleTime)的时间值,且每个节点的CanNmMsgReducedTime 值不同
  • 节点如果发送了一帧网络管理报文,则还是将定时器CanNm Message Cycle Timer重置为CanNmMsgCycleTime。

这种策略的结果是:网络中只有CanNmMsgReducedTime 值最小的两个节点交替发送网络管理报文

我们假设节点A的CanNmMsgReducedTime 最小,B次之,在某一时刻,网络上所有节点都进入了总线负载降低模式,此时某个节点发送了一帧网络管理报文,之后该节点因为是发送节点,所以定时器CanNm Message Cycle Timer重置为CanNmMsgCycleTime ,其余节点是接收节点,CanNm Message Cycle Timer重置为各自的CanNmMsgReducedTime,节点A的CanNmMsgReducedTime值最小,所以一段时间后率先发了一条网络管理报文,之后将CanNm Message Cycle Timer重置为CanNmMsgCycleTime,其余节点CanNm Message Cycle Timer再次重置为各自的CanNmMsgReducedTime,此时网络中节点B变成了CanNm Message Cycle Timer值最小的节点,一段时间后会发出一条网络管理报文,这又会使得节点A的CanNm Message Cycle Timer值变成最小,所以实现了网络中CanNmMsgReducedTime 值最小的两个节点交替发送网络管理报文,其余节点不发送网络管理报文。

当最小的两个节点中某个节点进入准备睡眠阶段,不再发送网络管理报文了,那么CanNmMsgReducedTime 值略大的下一个节点会开始发送网络管理报文。

当网络中只有一个节点处于常规运行阶段时,网络管理报文的周期为CanNmMsgCycleTime。

(3)远程睡眠指示

当配置参数CanNmRemoteSleepIndEnabled为有效的时候,如果节点在CanNmRemoteSleepIndTime时间后仍没有收到其他节点发送的网络管理报文,说明其它节点都已经进入休眠或准备休眠,此时应调用Nm_RemoteSleepIndication()函数通知应用层网络中所有节点都进入了休眠。如果此时节点又收到了其他节点发送的网络管理报文,应该再调用Nm_RemoteSleepCancellation()函数通知应用层取消之前的指示。该策略称为远程睡眠指示。

6. 时间参数汇总

下表展示了所有网络管理相关的时间参数,最左栏是配置参数,通常通过配置工具进行配置,中间栏是节点中网络管理程序需要用到的定时器:
在这里插入图片描述

7. 控制器状态梳理

下图为所有网络管理相关内容的一个梳理,通常情况下控制器的状态转换如下图蓝色箭头所示:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/L7BSt02v.shtml

相关文章

AUTOSAR通信篇 - CAN网络通信(二:CanIf)

目录 初始化 数据发送 请求发送 发送数据流 发送缓存 发送确认 数据接收 数据接收提醒 读取接收数据 CAN控制器模式 控制器模式转换 唤醒 PDU通道模式控制 PDU通道组 PDU通道模式 总结 在上一篇,我们介绍了CAN模块,接下来我们介绍在CAN模…

整车CAN网络介绍

整车CAN网络介绍 CAN(Controller Area Network)控制器局域网络,CAN网络在早期的整车应用中以BCM(车身控制器)为控制中心,主要是车身零部件(雨刮/大灯/车窗…),智能硬件较少,所以早期的正常CAN网络把所有其他的ECU全部放在Other EC…

CAN网络基础知识_20220727

目录 通信协议 汽车网络如何进行数据的传输以及节点的通信? 高速CAN差分电压示意图 低速CAN差分电压示意图 通信协议的基本规则 通讯帧格式 数据帧结构/帧起始​编辑/仲裁场​编辑/控制场/数据场/CRC校验场 应答场/帧结束/拓展帧​/远程帧/错误帧结构/过载帧…

【CAN总线学习01】CAN网络概述

一、车载网络概述 1.1 车载网络起源及CAN诞生条件 二十世纪九十年代前,传统汽车的电器系统中各个模块之间采用点对点的通信方式,造成了庞大的布线系统,加之汽车近年来电子化、智能化趋势,独立运行的ECU足以实现电子功能。但工程…

CAN网络总线_20220720

本文提纲: 一、CAN 网络概念 二、新、老车型CAN网络对比 三、CAN网络ID规范 四、CAN网络规范 本文主要介绍了: 通过对CAN网络及其架构的学习,来对比熟悉新、老车型CAN网络架构; 学习CAN网络ID命名规范、CAN网络规范&#xf…

浅谈数据仓库维度建模

浅谈数据仓库维度建模流程 谈到Big Data就离不开数据仓库、数据集市等概念,而谈到数据仓库、数据集市,就又离不开数据仓库设计的方法,维度建模则是其中的典型。与维度建模相对立的则是范式建模,范式建模常用于传统的DB关系型数据库…

维度建模+实例

https://www.cnblogs.com/suheng01/p/13522677.html 第一步:选择业务过程 1、通过对业务需求以及可用数据源的综合考虑,确定对哪种业务过程开展建模工作 2、建立的第一个维度模型应该是一个最有影响的模型——它应该对最紧迫的业务问题作出回答&#…

数据仓库-维度建模

目录 1. 数据仓库定义 2. 数据仓库和数据库 3. 数仓分层 4. 维度建模 4.1 维度建模 VS 第三范式 4.2 维度建模设计过程 5. 粒度概念 6. 事实概念 6.1 事实表技术 7. 维度概念 7.1 维度表技术 8. 数据关系模型 8.1 星型模型 8.2 星座模型 8.3 雪花模型 9. 写在最…

维度建模详解

文章目录 1 维度设计1.1 代理键(太复杂,不推荐)1.2 稳定维度1.3 缓慢渐变维 > 拉链表1.4 维度表的拆分、合并 2 事实表设计2.1 明细事实表(dwd)2.1.2 案例:2.1.3 存储方案2.1.4 事实拉链表示例: 2.2 聚合事实表(dws)2.2.1 分类2.2.2 案例 …

老司机带带我:数仓建模架构|维度建模剖析与案例演示

作者基于多年的大数据处理经验,当前管理着100PB数据仓库和2000节点的集群。持续系统化给大家分享一下关于数据仓库建设的经验总结。本系列既有数据仓库的形而上学理论体系,也有结合公司业务的实践,既有大厂如阿里巴巴,京东&#x…

维度建模入门

1 概念 维度建模(dimensional modeling)是专门用于分析型数据库、数据仓库、数据集市建模的方法。数据集市可以理解为是一种"小型数据仓库"。 1.1 维度表(dimension) 维度表示你要对数据进行分析时所用的一个量,比如你要分析产品销售情况, 你可以选择按类别来进行分…

数据仓库——维度建模

数据仓库——维度建模 在维度建模中,将度量称为“事实”,将环境描述为“维度” 维度表 维度表概念 维度是维度建模的基础和灵魂。在维度建模中,将度量称为“事实”,将环境描述为“维度”,维度是用于分析事实所需要…

维度建模基本流程总结

一、维度建模基本流程图 数据RD进行业务调研和数据现状调研,产出符合相关模版规范的业务知识文档和数据现状文档。数据PM也会调研相关业务产出需求设计文档,三方参与需求评审,评审通过后基建数据RD进行需求拆解,产出技术方案&…

维度建模的基本理论

维度建模 围绕三个问题来展开 1、怎么组织数据仓库中的数据? 2、怎么组织才能使得数据的使用最为方便和便捷? 3、怎么组织才能使得数据仓库具有良好的可扩展性和可维护性? 维度建模两大派系 Bill Inmon(数据仓库之父) 的企业…

Kimball 维度建模理论

一、维度建模分为两种表 事实表 存在这样一些数据,如行为记录,操作记录,订单,日志等,都可以作为事实表 特点:每条数据都有一个唯一键,数据通常来说不会更新,随着时间的增加而增加维…

维度建模示例

以库存模块和零售模块这两个模块来谈一谈维度建模的相关事项梳理库存业务中的表的构造与设计思想梳理一下缓慢变化维的处理方法与优缺这篇博客计划用周末来完成,只能简单的讨论一下建模概况,从维度建模这本书中摘录出一些重要的知识点,对于维度建模这本书的报告计划在5.1之前完…

浅谈维度建模

前言:本人作为BI方向相关的数据系统后端开发,虽然不是从事具体的数仓方面的工作,但是对维度建模过程有个大致了解,可加深对于系统现有的架构设计的理解(比如数据模型构建,指标库的作用)&#xf…

关系建模与维度建模

一、OLTP与OLAP 当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-linetransaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。 OLTP是传统的关系型数据库的主要应用,主要是…

数仓维度建模实例

简介 本文将介绍维度建模理论和基于自己经验的实施步骤 数据模型就是数据组织和存储方法,它强调从业务、数据存取和使用角度合理存储数据....只有数据模型将数据有序的组织和存储起来之后,大数据才能得到高性能、低成本、高效率、高质量的使用。一般业务…

数据仓库-基础知识(维度建模)

一、数据仓库概述 1.1 数据仓库定义 数据仓库:Data Warehouse,是为企业所决策制定过程,提供所有支持类型的数据集合。用于分析性报告和决策支持。数仓是一个面向主题、集成的、相对稳定、反应历史变化的数据集合,随着大数据技术的…