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. 控制器状态梳理

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

AUTOSAR —— CAN网络管理(CanNm)相关推荐

  1. AutoSar CAN网络管理状态机理解

    AutoSar CAN网络管理状态机理解 前言 网络管理是整车控制很重要的功能.在CAN网络中通常有两种报文,应用数据帧和网络管理帧.应用数据帧只负责网络在正常工作模式下各节点的数据交互,网络管理帧控 ...

  2. AUTOSAR PN网络管理测试开发实践

    背景介绍 提起"匮电"二字,做测试的老司机定会虎躯一震,而根据过往经验,"网络管理"常是引起匮电的"钉子户",所以针对网络管理的验证是测试的 ...

  3. 一文了解AUTOSAR网络管理

    在本文中,我们将讨论 NM(网络管理)接口和 CAN 总线特定的 NM 模块,它们是 AUTOSAR 分层软件架构的服务层的一部分. 1 网络管理接口: Network Management Inte ...

  4. 车载网络 - Autosar网络管理 - 网络管理简介

    一.什么是CAN网络管理及它的作用 现在的车辆是由大量的ECU节点组成的,为了能使各ECU能够正确并及时地进行CAN通信,需要有一套机制来统一协调总线上各节点的休眠唤醒,这套机制就是CAN网络管理(N ...

  5. AUTOSAR从入门到精通100讲(二十八)-AutoSar之CAN网络管理

    AUTOSAR中网络管理主要使用了CAN接口(CanIf),并提供通用网络管理接口(NmIf).CAN网络管理在CAN架构中所处的位置如图1,与其他模块的交互如图2.                 ...

  6. FlexRay AUTOSAR网络管理(AUTOSARFRNM)简介

    本文带大家快速了解AUTOSAR FlexRay网络管理(FlexRay Network Management,FrNm)的概念,核心功能,可选功能,接口和配置问题. AUTOSAR FlexRay网 ...

  7. AUTOSAR从入门到精通100讲(三十八)-AUTOSAR 通信服务 - NM概念详解

    1.NM简介 NM是NetWork Management的简称,是对具体总线网络管理的抽象管理,统管所有总线网络管理.在AUTOSAR BSW 层中,其上层是通信管理模块(ComM),下层是具体总线网 ...

  8. Autosar NM : 网络是如何被唤醒的<一>

    目录 一.按照唤醒方式,可以将ECU网络节点类型划分为两类: 二.远程唤醒CAN网络是如何被唤醒的? 1.ECU唤醒 2.ECU唤醒检查 3.EcuM唤醒验证 4.关于CanSM 三.Autosar ...

  9. 关于Autosar中的NM模块的理解

    关于Autosar中的NM模块的理解 本篇文章主要介绍AutoSar中关于NM模块的理解. 阅读本篇文章希望达到的目的: 1. NM(网络管理)是用来做什么的: 2. AutoSar中网络管理的原理: ...

  10. AUTOSAR技术分析报告

    AUTOSAR简介 汽车电子领域的软件主要属于嵌入式软件.因此,其发展阶段类似于其他嵌入式系统的软件发展.由于受限于嵌入式硬件本身资源的匮乏,各种硬件产品的种类繁多和各自差异,以及整体嵌入式系统软件的 ...

最新文章

  1. Three20对图片进行缓存之后,利用缓存的图片来进行显示的方式
  2. 使用计算机来解决实际问题首先要完成,《操作系统》试题库-填空题
  3. 基于单片机步进电机ppt答辩_基于单片机的步进电机式汽车仪表的设计(含电路原理图,程序)...
  4. python语言程序设计编程题_Python语言程序设计(测试练习题)
  5. 动态规划——最长公共子序列问题(LCS)
  6. OGRE源代码resource分析
  7. 2012年中国40位40岁以下的商界精英榜单
  8. Unity 随机生成中文名字
  9. 智能开关如何实现双控
  10. 采用deepdive的上市公司关系抽取
  11. 微信小程序选项卡数组列表单项选择切换效果
  12. java时间戳与LocalDateTime常用转换方式
  13. nginx配置文件总结
  14. Android: 主动抛出异常调试
  15. 计算机配置介绍英语作文,需一篇用英文介绍笔记本电脑的小文章!~
  16. 编译原理 | 第一章课后习题答案
  17. 近期大热的实时直播答题系统的实现思路与技术难点分享
  18. 【深度强化学习】强化学习的基本概念
  19. 重新建立博客的一段话
  20. sqlsever 执行存储过程

热门文章

  1. 90后男屌丝如何让淘宝客日赚10万滴
  2. 文献检索与下载的几种方式
  3. 后缀–ize_动词后加ize的后缀有什么作用
  4. 寄存器以及偏移地址计算方法
  5. 在excel中如何筛选重复数据_如何将Excel重复数据筛选出来?简单技巧有三种!...
  6. 机器学习系列(13)_PCA对图像数据集的降维_02
  7. 【更改google chrome浏览器路径的方法】
  8. 关于数据迁移:解决kettle中mysql的数据是tinyint的kettle查出来后变成boolean问题
  9. java:找不到符号
  10. HTML 内容保存到word文档(angular4调用第三方js插件实现)