AutoSar CanNm笔记

news2024/12/26 22:50:17

文章目录

  • 网络管理目的
  • CanNM与其他模块之间关系
  • 主动唤醒和被动唤醒
  • 状态管理
    • 1. 总线睡眠模式(Bus-Sleep Mode)
    • 2. 准备总线睡眠模式(Prepare Bus-Sleep Mode)
    • 3. 网络模式(Network Mode)
      • 3.1 重复报文状态(RepeatMessageState)
      • 3.2 常规运行状态(NormalOperationState)
      • 3.3 准备睡眠状态(ReadySleepState)
  • 网络管理定时参数
  • 状态切换整体框图
  • 网络管理报文(NM PDU)
    • 源节点地址(SourceNodeIdentifier)
    • 控制比特向量(ControlBitVector)
    • 用户数据(Userdata)
  • 常用缩写

网络管理目的

网络管理的目的使车辆网络中的 ECU 节点有序的睡眠和唤醒。 在没有通信需求的时候睡眠,在需要通信的时候唤醒, 可以节约汽车电池的电量。

CAN Network Management(CanNm)是一种独立于硬件的协议实现的软件模块, 只能在 CAN 网络上使用, 主要功能是协调网络正常运行和总线睡眠模式之间的转换。 CanNm 提供了网络管理接口(NmIf) 和CAN 接口(CanIf) 模块间的适配。

CanNM与其他模块之间关系

在这里插入图片描述

主动唤醒和被动唤醒

网络管理唤醒分为主动唤醒和被动唤醒。(BMS的休眠唤醒包括CAN唤醒,CAN唤醒又叫网络管理唤醒)
主动唤醒和被动唤醒的区分: 简单来说,除了收到其他节点发送的网络唤醒报文是被动唤醒外,其他都是主动唤醒(如:KL15、菊花链、RTC定时唤醒等)。

主动唤醒请求: 来自模块内部对网络的请求,并通过发送NM PDU尝试唤醒其他ECU。主动唤醒又叫做本地唤醒,和硬线相关的唤醒方式一般称为本地唤醒源。如:KL15硬线,硬线传感器信号(如:脚踢门、后备箱打开)主动唤醒节点(BMS即是一个节点)的网络管理报文必须先于应用报文发送。

被动唤醒请求: 来自总线上其他节点对该节点(例:BMS)的网络请求。被动唤醒的节点,发送的网络管理 PDU 和应用报文没有顺序要求。被动唤醒又叫做远程唤醒,简单来时就是和总线信号相关的唤醒方式。比如收到网络管理报文或者指定诊断报文,或者包含KL15信号的应用报文(有些节点没有KL15硬线,而是网关转发包含KL15信号的应用报文唤醒)。

状态管理

AUTOSAR CanNm 包含三种模式,其中 Network Mode包括三种子状态:

  • 网络模式(Network Mode)
    • 重复报文状态(Repeat Message State)
    • 常规运行状态(Normal Operation State)
    • 准备睡眠状态(Ready Sleep State)
  • 准备总线睡眠模式(Prepare Bus-Sleep Mode)
  • 总线睡眠模式(Bus-Sleep Mode)

1. 总线睡眠模式(Bus-Sleep Mode)

总线睡眠模式(BusSleepMode)的作用,是当网络上没有通信需求的时候,减少节点对蓄电池电量的消耗。 节点进入总线睡眠模式(BusSleepMode)后,对蓄电池电量的消耗下降到适当的程度。节点保留唤醒机制,等待被唤醒。
原则上,处于总线睡眠模式(BusSleepMode)的节点不接收应用报文并且不应给出ACK应答。如果此时节点数据链路层被唤醒且给出了ACK应答,需要在最短时间内重新进入低功耗模式。

2. 准备总线睡眠模式(Prepare Bus-Sleep Mode)

准备总线睡眠模式(PrepareBusSleepMode)的作用,是保证在进入总线睡眠前,节点有足够的时间停止其网络活动。在准备总线睡眠模式(PrepareBusSleepMode)下,总线活动减少(如:存在于发送缓存中的报文被发送,以清空发送缓存),最终总线将不再有活动(即没有任何报文被发送)。

节点进入准备总线睡眠模式(PrepareBusSleepMode)后,将立即开启T_WAIT_BUS_SLEEP定时器。在该定时器溢出后,该节点将离开准备总线睡眠模式(PrepareBusSleepMode),进入总线睡眠模式(BusSleepMode)。

当处于准备总线睡眠模式(BusSleepMode) 的节点接收到网络管理报文时 , 将向网络模式(NetworkMode)转换;默认情况下,节点进入网络模式(NetworkMode)中的重复报文状态(RepeatMessageState)。

3. 网络模式(Network Mode)

当节点从总线睡眠模式(BusSleepMode)或准备总线睡眠模式(PrepareBusSleepMode)进入网络模式(NetworkMode)时,在默认情况下,需进入重复报文状态(RepeatMessageState)。

节点进入网络模式(NetworkMode)后,需开启T_NM_TIMEOUT定时器;

节点处于网络模式 (NetworkMode),成功接收或成功发送一帧网络管理报文(NM PDU)后,需重启T_NM_TIMEOUT定时器;

3.1 重复报文状态(RepeatMessageState)

无论其睡眠条件是否满足,重复报文状态(RepeatMessageState)都可以使节点保持一段时间的活跃状态。该状态可以被用来监测在线节点,并且告诉其它节点我上线了,可以正常通信了。

当节点进入重复报文状态(RepeatMessageState)后,需要开始(或重新开始)发送网络管理报文。

节点处于重复报文状态(RepeatMessageState),T_NM_TIMEOUT定时器超时溢出时,需要重启T_NM_TIMEOUT定时器。

节点接收到本地唤醒源后,进入快发重复报文状态(InnmediateTransmitState);

节点接收到被动唤醒源后,进入正常重复报文状态(NormalTransmitState)。

节点在进入重复报文状态 (RepeatMessageState)需要保持一段时间 ,这段时间由参数T_REPEAT_MESSAGE 决定;T_REPEAT_MESSAGE 超时后,节点状态需进入常规运行状态(NormalOperationState)或准备睡眠状态(ReadySleepState)。 T_REPEAT_MESSAGE需保证网络上其它的节点都可以被网络管理报文唤醒。

节点离开重复报文状态(RepeatMessageState)后,若对网络通信有需求,应进入常规运行状态(NormalOperationState)。

节点离开重复报文状态(RepeatMessageState)后,若对网络通信无需求,应进入准备睡眠状态(ReadySleepState)。

节点离开重复报文状态(RepeatMessageState)后,需将重复报文请求标志位(RepeatMessageRequestBit)清零。

3.2 常规运行状态(NormalOperationState)

常规运行状态(NormalOperationState)用于保证只要对网络通信有需求,任何一个网络管理节点都可以保持网络处于唤醒状态。

当节点由重复报文状态(RepeatMessageState)或准备睡眠状态(ReadySleepState)进入常规运行状态(NormalOperationState)时,需按照T_NM_MessageCycle的周期发送网络管理报文。

当节点处于常规运行状态(NormalOperationState),而定时器T_NM_TIMEOUT溢出时需要重启定时器。

当节点处于常规运行状态(NormalOperationState),而本地睡眠条件满足时,需进入准备睡眠状态(ReadySleepState)。

当节点处于常规运行状态(NormalOperationState),而接收到重复报文请求标志位(RepeatMessageRequestBit)置位的网络管理报文时,需进入重复报文状态(RepeatMessageState)。

当节点处于常规运行状态(NormalOperationState),而RepeatMessageRequest()函数被调用时,需进入重复报文状态(RepeatMessageState),并将报文中重复报文请求标志位(RepeatMessageRequestBit)置位,同时启用快速发送机制

3.3 准备睡眠状态(ReadySleepState)

当节点从重复报文状态(RepeatMessageState)或常规运行状态(NormalOperationState)进入准备睡眠状态(ReadySleepState)后,需停止发送网络管理报文。

当节点处于准备睡眠状态(ReadySleepState),定时器T_NM_TIMEOUT溢出后,需进入准备总线睡眠模式(PrepareBusSleepMode)。

当节点处于准备睡眠状态(ReadySleepState),但因发生本地唤醒事件,睡眠条件不再满足时,需进入常规运行状态(NormalOperationState)。

当节点处于准备睡眠状态(ReadySleepState),接收到重复报文请求标志位(RepeatMessageRequestBit)置位的网络管理报文后,需进入重复报文状态(RepeatMessageState)。

当节点处于准备睡眠状态(ReadySleepState),RepeatMessageRequest()函数被调用时,需进入重复报文状态(RepeatMessageState),并将网络管理报文中的重复报文请求标志位(RepeatMessageRequest)置位,同时启用快速发送机制。

网络管理定时参数

参数描述
T_REPEAT_MESSAGE节点在重复报文状态(RepeatMessageState)中持续的时间
T_NM_TIMEOUT节点进入网络模式(NetworkMode)后,即开启该定时器;
在准备睡眠状态(ReadySleepState)中,该定时器溢出后,节点进入准备总线睡眠模式(PrepareBusSleepMode)
T_WAIT_BUS_SLEEP该定时器的作用是确保所有的节点都有时间停止其网络活动
T_START_NM_TX该参数定义了节点从准备总线睡眠模式(PrepareBusSleepMode)、常规运行状态(NormalOperationState)或准备睡眠状态(ReadySleepState)进入重复报文状态(RepeatMessageState),到发出第一帧网络管理报文的最大允许时间间隔。
T_START_App_TX在成功发送出第一帧网络管理报文后,节点应发送出应用报文的最大时间间隔
T_NM_ImmediateCycleTime节点启动快速发送机制时,需以此参数作为网络管理报文的发送周期
T_NM_MessageCycle在网络模式(NetworkMode) (除去准备睡眠状态)中,节点应以此参数作为网络管理报文的发送周期
T_WakeUp节点从唤醒事件发生,到发出第一帧网络管理报文的最大允许时间间隔
N_ImmediateNM_TIMES当节点处于重复报文状态并启用快速发送机制时,节点使用 T_NM_ImmediateCycleTime为周期发送网络管理报文的数量

状态切换整体框图

下图显示了与API规范相关的UML状态图。模式更改相关转换用绿色表示,错误处理相关转换用红色表示,可选节点检测相关转换用蓝色表示。此外,还假定启用了总线负载减少功能。
在这里插入图片描述
状态切换详述:
请添加图片描述

网络管理切换状态描述
NM_1CAN 网络管理模块的初始化
NM_2节点在睡眠模式下检测到主动唤醒请求,发送网络管理报文来主动唤醒网络,必须首先进入 NM PDU 快速发送状态。
NM_3处于睡眠模式时,收到有效的网络管理报文后,进入重复报文状态中的 NM PDU 正常发送状态。
NM_4处于 NM PDU 快速发送状态的节点,在计数器 N_ImmediateNM_TIMES 为零时,节点将进入 NM PDU 正常发送状态,以正常周期发送网络管理报文。
NM_5处于重复报文状态下的主动请求网络节点,如果 T_REPEAT_MESSAGE 发生超时,但节点的主动网络请求仍持续存在,节点必须进入常规操作状态。节点继续保持以正常周期T_NM_MessageCycle 发送网络管理报文和应用报文 PDU。
NM_6如果节点的主动网络请求取消, 并收到有效的网络管理报文后, 节点应进入重复报文状态中。
NM_7处于常规操作状态的节点,如果释放所有的网络请求,不再需要主动请求网络,那么它必须立即将网络管理状态切换到准备睡眠状态,同时该节点必须立即停止发送网络管理报文。
NM_8处于准备睡眠状态的节点, 如果检测到主动网络请求,节点必须立刻进入常规操作状态,同时必须开始以正常周期 T_NM_MessageCycle 发送网络管理报文和应用报文 PDU。
NM_9处于重复报文状态的 NM PDU 正常发送状态的节点,如果没有检测到主动网络请求,一旦T_REPEAT_MESSAGE 超时,节点将进入准备睡眠状态。
NM_10如果节点的主动网络请求取消, 并收到有效的网络管理报文后, 节点应进入重复报文状态中。同NM_6。
NM_11处于准备睡眠状态的节点如果没有检测到主动网络请求,一旦T_NM_TIMEOUT 超时, 节点将进入预睡眠模式。
NM_12处于预睡眠模式的节点,如果检测到主动唤醒请求,节点将进入重复报文状态的 NM PDU 快速发送状态。
NM_13处于预睡眠模式的节点,如果收到被动唤醒请求,节点将进入重复报文状态的 NM PDU 正常发送状态。
NM_14处于预睡眠模式的节点如果不再收到主动或被动唤醒请求,一旦 T_WAIT_BUS_SLEEP 超时, 节点将进入睡眠模式。
NM_15在任何状态下发生 Battery Power Off,节点都将进入关闭模式,不再拥有任何通信和网络管理的功能。

当ECU处于不同的运行模式时,可以发送和接收的CAN报文的类型。

网络模式网络管理报文应用报文[1]
TxRxTxRx
总线睡眠模式NYNN[2]
准备总线睡眠模式NYN[3]N
网络模式重复报文状态YYYY
常规运行状态YYYY
准备睡眠状态NYYY
除特殊说明外, Tx/Rx 是对应用层而不是对数据链路层的需求;
“N”表示不允许报文的发送或接收;
“Y”表示允许报文的发送或接收;
[1]:应用报文包括常规应用报文、诊断报文、标定用报文;
[2]:是对数据链路层的需求(不应给出 ACK 应答);
[3]:已经存在于发送缓存中的报文允许被发送出来。

网络管理报文(NM PDU)

每一个AUTOASAR网络管理节点都会被分配一个唯一的网络管理报文ID。

NM PDU数据结构如下:
在这里插入图片描述

源节点地址(SourceNodeIdentifier)

每一个参与网络管理的节点都会被分配一个唯一的标识符(NODE_ID),存放于网络管理报文的Byte0(SourceNodeIdentifier)中。

控制比特向量(ControlBitVector)

在这里插入图片描述

  • Bit0:重复报文请求标志位(RepeatMessageRequestBit),信号值描述为:
    • 0x0:该报文发送节点未请求其他节点进入重复报文状态
    • 0x1:该报文发送节点请求其他节点进入重复报文状态
  • Bit3:NM协调器休眠位
    • 主协调器未请求启动同步关机
    • 主协调器请求启动同步关机
  • Bit4:主动唤醒网络标志位(ActiveWakeupBit),信号值描述为:
    • 0x0:该报文发送节点未主动唤醒网络(被其它节点唤醒)
    • 0x1:该报文发送节点主动唤醒网络
  • Bit6:PN功能位
    • 0x0:网络管理不使用PN功能。
    • 0x1:网络管理报文中包含PNC信息。如果项目中,网络管理要求使用PN功能,发送的网络管理报文中,有PNC请求时,需要先置位PNI。接收节点会根据PNI情况决定网络管理的处理流程。

用户数据(Userdata)

在网络管理报文中有6个字节的用户数据(Userdata0~5),可以被应用层读取和写入,用于传输用户定义信息。

常用缩写

缩写英文名称中文名称
AutosarAutomotive Open System Architecture汽车开发系统架构
ECUElectric Control Unit电控单元
NMNetword Management网络管理
PMPower Mode电源模式
PDUProtocol Data Unit协议数据单元
KL15Terminal 15 of the vehicle网络唤醒硬线电压
KL30Terminal 30 of the vehicle12V电源电压
Power OnKL30 is connected12V电源上电
Power OffKL30 is disconnected12V电源下电
CANController Area Network控制器局域网络
CANFDCAN with Flexible Data Rate灵活速率CAN网络
RMRRepeat Message Request重复报文状态请求
BSMBus Sleep Mode总线休眠状态
PBSMPrepare Bus Sleep Mode总线预休眠状态
RMSRepeat Message State重复报文状态
NOSNormal Operation State正常运行状态
RSSReady Sleep State就绪睡眠状态

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

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

相关文章

SD-如何训练自己的Lora模型

官方地址:GitHub - bmaltais/kohya_ss 尝试过mac和Ubuntu,装上后都会有问题 Windows按照官方步骤安装即可 第一步 git clone https://github.com/bmaltais/kohya_ss.git cd kohya_sspython -m venv venv .\venv\Scripts\activatepip install torch1.…

1710_开源pdf阅读器SumatraPDF使用体验

全部学习汇总: GreyZhang/g_GNU: After some years I found that I do need some free air, so dive into GNU again! (github.com) 被很多国产免费软件折腾的电脑有点扛不住了,从昨天起打算在Windows上开始开源之路。先用LibreOffice换掉了之前一直觉得…

ansible roles常用用法

目录 一、说明 二、创建 ansible 环境 三、实验操作 四、install_ansible.sh 脚本内容 一、说明 该文档是日常经常使用的模板,通过该例子让更多的初学者了解ansible 剧本的写法,很多情况,可以按照该模版来套用即可。 读者不需要下载…

GPT前2代版本简介

承接上文ChatGPT进化的过程简介 2018年,Google的Bert和OpenAI的GPT绝代双骄,两者非常像,都是语言模型,都基本上是无监督的方式去训练的,你给我一个文本,我给你一个语言模型出来。 GPT前两代没有什么特别的…

好看的皮囊千篇一律,有趣的书籍万里挑一,学习Java必读的两款书籍推荐

今天给各位学习Java的小伙伴儿们推荐两本Java路线上必不可少的书籍,核心卷1和卷2,大家可根据自己的情况种草。正所谓,书多不压身。 Java核心技术卷1 Java 诞生 27 年来,这本享誉全球的 Java 经典著作《Core Java》一路伴随着 J…

2023年了,快去给你的博客加上一个主题吧~

最近闲逛github,发现了一个不错的博客主题,分享给大家。 这个主题主要是用于博客园的个人主页美化用的。 主题地址:Silence - 专注于阅读的博客园主题 目录 一、获取文件 (1)样式文件 (2)脚本…

【机器学习】第二节:线性回归和线性分类

作者🕵️‍♂️:让机器理解语言か 专栏🎇:机器学习sklearn 描述🎨:本专栏主要分享博主学习机器学习的笔记和一些心得体会。 寄语💓:🐾没有白走的路,每一步都算…

Linux文件描述符和重定向

介绍 文件描述符是与文件输入、输出相关联的整数&#xff0c;在编写脚本时会经常使用标准的文件描述符来将内容重定向输出&#xff0c;0、1、2是文件描述符&#xff08;分别对应stdin、stdout、stderr&#xff09;&#xff0c;< 、>, >>叫做操作符。 概念 stdin(…

《走进对象村7》之内部类基地

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f341;内部类匿名内部类匿名内部类的定义匿名内部类访问内部类的特点 &#x1f341;实例内部类实例内部类的定义实例内部类的如何实例化对象实例内部类访问情况 &#x1f341;静态内部类&#x1f341;局部内部类内部…

谈谈中台建设

大家好&#xff0c;我是易安&#xff01; 中台是数字化转型中备受关注的话题。今天&#xff0c;我们将重点探讨业务中台和数据中台。同时&#xff0c;作为企业数字化中台转型的整体&#xff0c;我们也会探讨前台和后台的设计思路。 平台与中台 中台这一概念源于阿里巴巴&#…

命题逻辑与推理

推理理论(假设前提条件为真推出的结论) 真值表法 直接证明法 常用推理规则—倒着看&#xff0c;推理整理过程 P规则(前提引入) T规则(结论引入) ** 常用推理公式 ** 名称内容附加率 A ⇒ ( A ∨ B ) A ⇒ A → B B ⇒ A → B A\Rightarrow(A\lor B)\qquad\\\neg A\Rightarro…

软件工程开发文档写作教程(10)—需求分析书的适用范围

本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;电子工业出版社《软件文档写作教程》 马平&#xff0c;黄冬梅编著 需求分析书的适用范围 软件项目一旦被确定要实施之后&#xff0c;撇开项目的立项投标不谈&a…

Java每日一练(20230515) 阶乘后的零、矩阵置零、两数相除

目录 1. 阶乘后的零 &#x1f31f; 2. 矩阵置零 &#x1f31f;&#x1f31f; 3. 两数相除 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 阶乘后的零 …

基于PyQt5的图形化界面开发——PyQt示例_计算器

基于PyQt5的图形化界面开发——PyQt示例_计算器 前言1. caculator.py2. MainWindow.py3. 运行你的项目4. 其他 PyQt 文章 前言 本节学习 PyQt5示例 &#xff0c;制作一个图形化界面 计算器 操作系统&#xff1a;Windows10 专业版 开发环境&#xff1a;Pycahrm Comunity 2022…

2023 年 Pycharm 常用插件推荐

1. Key Promoter X 如果让我给新手推荐一个 PyCharm 必装插件&#xff0c;那一定是 Key Promoter X 。 它就相当于一个快捷键管理大师&#xff0c;它时刻地在&#xff1a; 教导你&#xff0c;当下你的这个操作&#xff0c;应该使用哪个快捷操作来提高效率&#xff1f;提醒你…

Nginx之正向代理与反向代理进阶(支持https)

在【Nginx之正向代理与反向代理】一文中我们实现了将Nginx服务器作为正向代理服务器和反向代理服务器&#xff0c;但美中不足的是仅支持http协议&#xff0c;不支持https协议。 我们先看看看http和https的区别&#xff1a; http协议&#xff1a;协议以明文方式发送数据&#…

django ORM框架(操作数据库)【正在更新中...】

一、ORM框架介绍 ORM框架&#xff0c;把类和数据进行映射&#xff0c;通过类和对象操作它对应表格中的数据&#xff0c;进行增删改查&#xff08;CRUD) ORM框架中 数据库&#xff1a;需要提前手动创建数据库 数据表&#xff1a;与OMR框架中的模型类对应 字段&#xff1a;模…

C++基础STL-deque容器

双端数组&#xff0c;可以对头端进行插入删除操作 deque 容器和 vecotr 容器有很多相似之处&#xff0c;比如&#xff1a; deque 容器也擅长在序列尾部添加或删除元素&#xff08;时间复杂度为O(1)&#xff09;&#xff0c;而不擅长在序列中间添加或删除元素。deque 容器也可…

图解LeetCode——240. 搜索二维矩阵 II

一、题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 二、示例 2.1> 示例 1&#xff1a; 【输入】matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,1…

软件工程开发文档写作教程(08)—需求分析书的编制目标

本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;电子工业出版社《软件文档写作教程》 马平&#xff0c;黄冬梅编著 需求分析定义 需求分析的基本任务是要准确地定义新系统的目标&#xff0c;为了满足用户需求…