Autosar NM网络管理机制(三大三小模式切换、NM网络报文的帧格式解析、NM中用到的定时器配置)

news2025/1/12 2:54:11

网络管理机制

AUTOSAR网络管理机制其实十分简单,概括下来三句话:

需要通信就发网络报文,否则就停发网络报文,所有节点同睡同醒。

下图是网络管理的状态机:

在这里插入图片描述

网络管理包括三个模式:Network Mode、Prepare Bus-Sleep Mode和Bus-Sleep Mode

  • Network Mode

Network Mode是节点正常工作所处的模式,该模式包括三个子状态:Repeat Message State、Normal Operation State和Ready Sleep State

  • Repeat Message State

在Repeat Message状态下,节点会周期性发送NM报文,该状态的持续时长是可以配置的。Repeat Message State的进入路径有:

  • 1、在Bus-Sleep Mode或Prepare Bus-Sleep Mode下收到CanNm_NetworkRequest()本地唤醒请求;

  • 2、在Bus-Sleep Mode或Prepare Bus-Sleep Mode下收到CanNm_PassiveStartUp()被动唤醒请求;

  • 3、在Prepare Bus-Sleep Mode下收到NM报文;

  • 4、在Normal Operation State或Ready Sleep State下本地请求node detection或收到其它节点的node detection请求。

Repeat Message State的离开路径有:

  • 1、有本地唤醒请求时进入Normal Operation State;

  • 2、 否则进入Ready Sleep State。

Repeat Message State在整个状态机中处于交叉路口的位置,和其它几个状态间均有联系。

  • Normal Operation State

节点本地有通信需求时会一直处于Normal Operation状态,在该状态下会周期性的发送NM报文,Normal Operation State的进入路径有:

  • 1、Repeat Message State结束时仍有本地请求;
  • 2、Ready Sleep State下有通信需求(Network requested)。

Normal Operation State的离开路径有:

  • 1、不再有本地通信需求(Network released)时跳转到Ready Sleep State;
  • 2、本地请求node detection或收到其它节点的node detection请求时跳转到Repeat + Message State。
  • Ready Sleep State

在Ready Sleep状态下节点不再发送NM报文,此时如果其它节点一直发送NM报文的话,节点便会保持在Ready Sleep State。Ready Sleep State的进入路径有:

  • 1、Normal Operation State下不再有本地通信需求;
  • 2、Repeat Message State结束时没有本地通信需求。

Ready Sleep State的离开路径有:

  • 1、不再收到其它节点的NM报文时,等待NM Timeout Timer超时后跳转到Prepare Bus-Sleep Mode;
  • 2、本地又有通信需求时跳转到Normal Operation State;
  • 3、本地请求node detection或收到其它节点的node detection请求时跳转到Repeat Message State。
  • Prepare Bus-Sleep Mode

在Prepare Bus-Sleep模式下,会停发应用报文,但那些已经装填到底层寄存器/buffer等待发送的报文仍然会继续发完,因此,在该模式总线活动最终会恢复平静。

Prepare Bus-Sleep Mode的进入路径有:

  • 1、Ready Sleep State下不再收到NM报文,NM Timeout Timer超时。
    Prepare Bus-Sleep Mode的离开路径有:

  • 1、Wait Bus Sleep Timer超时,进入Bus-Sleep Mode;

  • 2、接收到NM报文,跳转到Repeat Message State;

  • 3、有本地唤醒请求,跳转到Repeat Message State;

  • 4、有被动唤醒请求,跳转到Repeat Message State。

  • Bus-Sleep Mode

当所有节点都不再发送NM报文,并且也没有节点有唤醒请求,最终这些节点会进入Bus-Sleep模式。Bus-Sleep Mode的进入路径有一个:

  • 1、在Prepare Bus-Sleep Mode下发生Wait Bus Sleep Timer超时。

Bus-Sleep Mode的离开路径有:

  • 1、有本地唤醒请求,跳转到Repeat Message State;
  • 2、有被动唤醒请求,跳转到Repeat Message State。
  • 网络报文格式

默认的网络报文格式定义如下:
在这里插入图片描述

需要注意的是规范并未限制Source Node Identifier和Control Bit Vector的位置,你可以变更两者的字节位置,如果要修改的话,记得所有节点需要同步修改,以保证相互间能够正常通信。

字节1放的是Control Bit Vector(CBV),具体每个Bit的定义如下:
在这里插入图片描述

Bit0:Repeat Message Request

该位用于”Node Detection“功能,何谓Node Detection,顾名思义就是检测有哪些节点正在参与总线活动。假设总线上有三个节点,经过一段时间后A、B仍然有通信请求,网络状态保持在Normal Opertion State,C由于不再需要通信,但是A、B又一直发送NM报文,因此处于Ready Sleep State。
Alt

如果此时A想要知道总线上有哪些节点活动,单纯看NM报文的话,只能知道有B,怎么办呢,这时就可以利用节点检测功能,首先,A自己切换到Repeat Message状态,并将CBV的Bit0设置为1,节点B和C收到NM报文后,由于Repeat Message Request位为1,各自会切换到Repeat Message状态开始发送NM报文,A节点收到NM报文后,便知道总线上还有B、C节点在。

Bit3:NM Coordinator Sleep Ready Bit

该位用于”Coordinator Synchronization Support“功能,可以实现不同总线间的协同关闭,具体的协同机制由AUTOSAR Network Management Interface模块实现,可以参考相关文档。

Bit4:Active Wake-up Bit

该位用于标识是否本地唤醒,如果节点是通过CanNm_NetworkRequest()唤醒的网络,那么Active Wake-up位为1。

Bit6:Partial Network Information Bit

该位用来指明是否使用Partial Network功能,如果为1的话,User data部分需要包括PNI信息。什么是Partial Network呢,举个例子:总线上有A、B、C、D、E五个节点,有一项功能需要A、C、D协同完成,B、E不需参与,就可以将A、C、D划分为一个Partial Network,同理也可以将B、D、E划分为一个Partial Network。

在这里插入图片描述

我们将A、C、D的Partial Network编号为1,B、D、E的编号为2,网络报文中需要增加相关字段用来放PN信息,比如,使用Byte2的最低两个Bit分别表示PN1、PN2:

在这里插入图片描述

每个节点会设置PN掩码,对A来说,PN掩码为0x01(因为它只参与PN1),当收到C或D的网络报文时,由于Byte2的Bit0是1,与自己的掩码运算结果是1(非0),说明自己需要参与此PN;如果是收到B或E发来的网络报文,Byte2的Bit1是1,Bit0是0,掩码运算结果是0,就不会参与。对D来讲由于要参与两个PN,因此掩码需要设置为0x03。有了这套滤波机制,就可以实现A、C、D通信的时候B、E通信关闭,从而降低ECU功耗。

关于PNI有两种处理方式,一种叫做EIRA(External Internal Requests Aggregated),这种方式会汇集外部接收到的PN和内部自主请求的PN信息,得到一个总的输出结果;另一种叫做ERA(External Requests Aggregated),这种方式会汇集外部接收到的PN信息,并且不同网络单独处理。

  • 网络发送行为

网络进入Repeat Message State时开始发送NM报文,标准的发送行为如下所示:

在这里插入图片描述

经过一个偏移时间Msg Cycle Offset后发送首条NM报文,后续报文的周期间隔为Msg Cycle Time。

如果使用了Immediate Restart Enabled功能,那么在Prepare Bus-Sleep Mode下发生主动唤醒跳转到Repeat Message State时会立刻发送NM报文:

在这里插入图片描述

与标准的发送行为相比,更多的还是使用Immediate Nm Transmissions发送方式,该方式有两个关键参数:次数和周期。

在这里插入图片描述

进入Repeat Message状态后会先以特定周期(Immediate Nm Cycle Time)发送特定次数(n)的NM报文,然后恢复至正常周期(Msg Cycle Time)继续发送NM报文。

- 降低总线负载

从上面可以看到,节点的NM报文都是固定周期发送的,总线上节点数量越多,负载率也就越高,为此可以使用如下两条策略:

  • 1、节点在收到NM报文后,设置Msg Cycle Timer = CanNmMsgReducedTime,CanNmMsgReducedTime > 1/2CanNmMsgCycleTime且CanNmMsgReducedTime < CanNmMsgCycleTime;

  • 2、节点在发送NM报文后,设置Msg Cycle Timer = CanNmMsgCycleTime。
    需要说明的是这个策略只适用于Normal Operation State。

看个例子,A、B、C三个节点的CanNmMsgCycleTime均为70ms,节点A的CanNmMsgReducedTime=40ms,节点B的CanNmMsgReducedTime=50ms,节点C的CanNmMsgReducedTime=60ms。假设某个时刻A发了NM报文,对A自身来讲按照规则2需将MsgCycleTimer设置为70ms,对B、C来讲,作为接收方按照规则1需将MsgCycleTimer分别设置为50ms和60ms,那么显然,由于B的定时最短,过了50ms后B会发NM报文,B再把自身的MsgCycleTimer设置为70ms,A、C作为接收方分别把自己的MsgCycleTimer设置为40ms和60ms,下次就会轮到定时最短的A发送…

在这里插入图片描述

依此类推,最终结果就是总线上只有CanNmMsgReducedTime最小的两个节点在轮流发NM报文,一旦有节点满足休眠不再发网络报文,剩下节点中CanNmMsgReducedTime最小的两个节点会继续轮流发送。当最后只有一个节点时,便会按照正常的CanNmMsgCycleTime来发送。

通过这种策略机制保证了无论总线上有多少个节点,在CanNmMsgCycleTime时间内最多只会有两条NM报文。

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

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

相关文章

【指针初阶 2023516】

#include <stdio.h>int main() {int a 100;int * pa &a;//pa是专门用来存放地址&#xff08;指针&#xff09;的&#xff0c;这里的pa就被称为指针变量char* pc &a;//指针变量在32为平台下是4个字节//指针变量在64为平台下是8个字节//int arr[10];//printf(&q…

计算机图形学-GAMES101-3

一、transformation-变换 &#xff08;1&#xff09;Scale 缩放变换示意图 图形每个像素对应坐标的计算公式 写成缩放矩阵的形式 非均匀缩放 &#xff08;2&#xff09;Reflection Matrix 镜面变换示意图 图形每个像素对应坐标的计算公式 写成镜像矩阵的形式 …

阿里HR:年轻人你把握不住.....

前言 去阿里面试测试工程师&#xff0c;这里面水太深&#xff0c;什么未来规划&#xff0c;职业发展的东西都是虚拟的&#xff0c;作者还太年轻&#xff0c;没有那个经历&#xff0c;把握不住。项目只有几个&#xff0c;开心快乐就行&#xff0c;不PK&#xff0c;文明PK。 很…

文心一言 VS chatgpt (17)-- 算法导论4.1 3~4题

三、在你的计算机上实现最大子数组问题的暴力算法和递归算法。请指出多大的问题规模n0是性能交叉点一一从此之后递归算法将击败暴力算法?然后&#xff0c;修改递归算法的基本情况一一当问题规模小于 n0 时采用暴力算法。修改后&#xff0c;性能交叉点会改变吗? 文心一言&…

进程间通信(匿名管道、命名管道、共享内存)

目录 匿名管道 创建管道---pipe() 命名管道 创建FIFO FIFO 操作 用命名管道实现server&client通信 共享内存 1.创建共享内存函数shmget() 2.获得共享内存地址函数shmat() 3.删除共享内存函数shmdt() 4.共享内存控制函数shmctl() 在Linux下的多个进程间的通信机制…

Unittest单元测试框架之unittest的第三方库paramunittest参数化基础及应用

一、unittest参数化介绍 参数化测试用于当需要使用多组不同的测试数据测试同一个方法的时候 paramunittest是unittest实现参数化的一个专门的模块&#xff0c;可以传入多组参数&#xff0c;自动生成多个用例 实现unittest参数化的方式有多种&#xff0c;如ddt、paramunittest等…

Linux-进程信号

Linux-进程信号 一&#xff0c;信号入门信号的概念生活中的信号技术应用角度的信号使用kill -l 查看信号列表信号的处理方式 二&#xff0c;信号产生通过终端按键产生信号Core Dumpcode dump标志位 通过系统调用向进程发信号killraiseabort 由软件条件产生信号SIGPIPESIGALRM 硬…

三届跻身世界级,长沙国际工程机械展的突破之路

文 | 智能相对论 作者 | 易不二 长沙正在成为全球工程机械企业争相奔赴的产业“盛宴”。 近日完美落幕的第三届长沙国际工程机械展&#xff0c;留下了全球30多个国家、1500余家企业“同台竞技”的精彩亮相&#xff0c;并达成了536亿元的现场交易额。 卡特彼勒、日立、沃尔沃…

2022年蓝桥杯:第十三届蓝桥杯大赛软件赛省赛C/C++大学B组真题(考后回顾,文末附真题链接)

目录 第十三届蓝桥杯大赛软件赛省赛C/C大学B组真题&#xff08;考后回顾&#xff09;试题 A: 九进制转十进制试题 B: 顺子日期试题 C: 刷题统计试题 D: 修剪灌木试题 E: X 进制减法试题 F: 统计子矩阵试题 G: 积木画试题 H: 扫雷试题 I: 李白打酒加强版试题 J: 砍竹子 第十三届…

【JavaStript】

目录 &#x1f437;1. JavaScript 的书写形式 &#x1f6e9;1.1 行内式 &#x1f49b; 1.2 内嵌式 &#x1f357;1.3 外部式 &#x1f37f;2. JavaScricpt 的一些常用语句 &#x1f6f4;2.1 输入&#xff1a;prompt &#x1f47d;2.2 输出&#xff1a;alert &#x1f…

Linux线程间的同步和互斥 进程间传统通信方式 5.16

Linux线程间的同步和互斥 同步&#xff1a;有顺序的考虑 按照约定的顺序相互配合完成一件事情&#xff08;红绿灯&#xff09; {释放 产生 资源1&#xff08;V操作&#xff09;&#xff1b;&#xff1b;申请 资源-1&#xff08;p操作&#xff09;} 信号量代表某一类资源&am…

RocketMQ整理

RocketMQ在阿里云上的商业版本,集成了阿里内部一些更深层次的功能及运维定制。开源版本,功能上略有缺失,但大体上是一样的。 使用Java开发,便于深度定制。最早叫MetaQ。消息吞吐量虽然依然不如Kafka,但是却比RabbitMQ高很多。在阿里内部,RocketMQ集群每天处理的请求数超过…

监控需求来源及主流方案对比

我们从开始了解监控系统来说&#xff0c;首先我们要先了解监控的需求来源&#xff0c;即监控系统都可以用于做什么? 监控需求来源 其实最初的需求很简单&#xff0c;即"系统出问题了我们要能及时感知"。后面随着技术的不断发展&#xff0c;我们对监控系统提出了更…

Linux的超级用户及权限

目录 一:Linux下的两个用户 二&#xff1a;权限 1&#xff1a;目录文件 文件创建的默认权限 2&#xff1a;普通文件 一:Linux下的两个用户 在使用Linux的时候会有两个身份,第一个是普通用户,普通用户在很多方面是受阻的,原因就是权限不够,在这种情况下就有一个超级用户,也…

iOS图片系列一 图片的基本属性

图片在项目的开发中使用频率很高&#xff0c;但是绝大部分都是作为普通的展示或者偶尔需要裁剪&#xff0c;并不需要对图片做什么特别的处理&#xff0c;最近做了一个项目对于图片的需求功能比较多&#xff0c;踩了很多坑的同时也对图片的使用有了更深的理解&#xff0c;整理下…

C++面经:初始化全局变量和未初始化全局变量有什么区别

全局变量初始化而且初始值不为0&#xff0c;那么这样的全局变量是放在内存的.data段的&#xff0c;如果全局变量初始值为0或者未初始化&#xff0c;那么这样的全局变量是放在.bss段的。 考点&#xff1a; 考察C/C语言内存模型&#xff0c;.data&#xff0c;.bss段存放的内容。 …

Windows shell环境: 从git bash切换到msys2

文章目录 1. 目的2. msys2 环境 (Environment)3. 升级 MSYS2: 使用 pacman 滚动式升级整个系统4. 在 Windows Terminal 中增加显示 MSYS25. 使用 zsh6. VSCode 中的配置增加 MSYS2 终端配置 git 路径 7. 安装 C/C 依赖库安装 ag查询 bison 和 flex 的安装目录 8. References 1.…

ES6模块化规范

在没有ES6模块化规范前&#xff0c;有像AMD、CMD这样的浏览器模块化规范&#xff0c;还有像CommonJS这样的服务端模块化规范。 2015年&#xff0c;JS终于推出了官方的模块化规范&#xff0c;为了统一各种规范&#xff0c;我们简称ES6 模块化。 ES6目前作为JS的内置模块化系统&a…

Spring的创建和使用,存储和读取Bean总结

目录 Spring项目创建和使用流程 1.创建一个 Spring 项目 2.存储 Bean 3.读取 Bean ApplicationContext和BeanFactory的区别 通过注解存储 Bean对象 五大类注解的关系 Java程序标准分层 方法注解Bean 注入Bean对象的三种方式 1.属性注入 2.Setter注入 3.构造方法注入…

【Java数据结构】Map和Set

Map和Set 搜索树概念操作 - 查找操作 - 插入操作 - 删除cur没有左树&#xff08;cur.left null&#xff09;cur没有右树&#xff08;cur.right null&#xff09;cur既有左树也有右树&#xff08;最困难的情况&#xff09;替罪羊删除法 操作代码性能分析和 java 类集的关系 搜…