【AutoSar_诊断协议栈】FiM模块详解

1 术语解释

1.1 缩略语

缩写描述解释
BSWBasic Software基础软件
DemDiagnostic Event Manager诊断事件管理
ECUElectronic Control Unit电子控制单元
FIDFunction Identifier功能标识符
NVRAMNon volatile Memory非易失性内存
EcuMECU State ManagerECU状态管理模块

2 相关模块

Moduledependencies
Dem将改变的Event或Component的状态告知给FiM,用计算并判断相应FID的状态(对应功能是否能执行)
SW-C通过FiM提供的FID和接口问询功能是否执行或者禁止
EcuM负责相关模块的初始化和去初始化的过程
BSWBSW内部的功能可以使用FiM的功能降级机制
RTE主要负责相关模块的调度函数执行顺序,优先级,但并负责SW-C和FiM之间的交互

3 功能简介

3.1 功能概述

FiM提供以下功能:

  • FiM模块提供一种用于功能抑制场景的功能降级策略,并且该功能抑制关系和条件能够配置;
  • 可通过特定的FID来实现相应的功能降级策略;
  • 功能降级可由Dem模块的Event或Component在FiM模块中根据降级需求完成映射(map FID);
  • FiM模块为BSW以及SW-C各模块提供了一种有效的降级手段(特定功能的降级或者抑制需要知道对应的FID)。

总而言之,当SW-C或者BSW层发生故障发生时,会将故障即Event上报给到Dem模块;通过Dem内部的计算,当Event或Component发生状态变化时,Dem会告知FiM(这个动作需要在Dem配置才会执行),当然FiM也会通过Dem的接口来获取Event或Component的状态;SW-C以及BSW层通过接口获取FID的permission做出相应的降级行为。

如下图所示,包含整体功能降级架构组成:
在这里插入图片描述

3.2 Dem和FiM的交互

3.2.1 Event或Component和FID的映射

在说Event或Component和FID的映射关系之前,先提一下Dem中Event和Component之间的映射关系:==一般地,多个同类的Event mapping一个Component, 且在Event进入FAILED状态后,其关联的Component也会进入FAILED状态。==更多的关系请参考Dem的规范文档。

在FiM的配置中往往需要实现一下的映射关系,可以参考下图:

  • FID - Event - Inhibition Mask(每个Event都有其对应的Mask
  • FID - ComponentId - inhibition configuration

下图是Event和FID的映射关系图:
在这里插入图片描述

注:这里一个Event可以mapping多个不同的FID(一般不推荐),一个FID也可以mapping多个Event(同一类的);但是FID只能mapping一个component,且Event和Component对于FID的映射是可以同时存在的。

3.2.2 Dem和FiM之间的交互接口

在运行时,Dem内部有Event状态发生变化时,会调用FiM_DemTriggerOnMonitorStatus通知FiM,之后FiM会调用Dem_GetMonitorStatus去查询Event最新的状态,并计算FID的permission,permission由SW-C轮询;具体流程如下图:
在这里插入图片描述
在Dem Component状态发生变化时,Dem会调用接口FiM_DemTriggerOnComponentStatus告知FIM;这种情况该动作需要在Dem的配置中使能。不仅如此,FiM也可以通过Dem_GetComponentFailed轮询Component的状态并由此计算FID的permission。

3.2.3 FiM的初始化

除了在运行时Dem会和FiM有交互,FiM在初始化期间也会获取Dem存储在NvM中的Event Status,故在EcuM中调用初始化函数的时序很重要:
在这里插入图片描述

3.3 FID Permission的计算

下图是通过Event status计算FID的图示:
在这里插入图片描述
这里面有几个重要的参数:

参数解释
Event Monitor StatusDem计算的Event Status与DTC status一致
Inhibition Mask抑制FID的判断条件
Event Status和对应Inhibition Mask按位与的结果不为0,即Inhibit Counter +1
Inhibition Counter导致FID抑制的Event和Component的个数
该Counter会随着导致FID置位的Event数目增加而增加,减少而减少
Function Inhibition即FID的permission,在Inhibition Counter > 0时FID = FALSE则功能降级
在Inhibit Counter == 0时FID = TRUE则功能不降级

以下图为例,当三个Event和一个Component(一般Event都依赖于该component)映射到FID_0时,以上参数之间运算关系:
在这里插入图片描述
如上图6所示,假设Event A,EventB、EventC均Map了FID_0,也就意味着当这三个Event status中任意一个或多个发生变化时且与响应MASK按位与结果为TRUE(此时Component状态也为FAILED),FID_0就会置位,即FID_0 = FALSE。

系统降级算法规则:当 Inh Counter >0, FID就会置位,即为FALSE,相应的系统降级行为就会发生。

当下列情况时,FID_0 的permission如何变化呢?

  • 当Event A Status & Ihibition Mask_a = TRUE, Inh Counter + 1, 即Inh Counter= 1,FID_0 = FALSE;
  • component Status变为FAILED,Inh Counter + 1,即Inh Counter = 2,FID_0 = FALSE;
  • 当Event B Status & Ihibition Mask_b = TRUE, Inh Counter + 1, 即Inh Counter = 3, FID_0 = FALSE;
  • 当Event C Status & Ihibition Mask_c = TRUE, Inh Counter + 1, 即Inh Counter = 4, FID_0 = FALSE;
  • 过一段时间Event A Status & Ihibition Mask_a = FALSE, Inh Counter – 1, 即FID_A Counter = 3, FID_A = FALSE;
  • 同上,EventB Status & Ihibition Mask_b = FALSE,Inh Counter – 1, 即FID_A Counter = 2, FID_A = FALSE;
  • 同上,EventB Status & Ihibition Mask_c = FALSE,Inh Counter – 1, 即FID_A Counter = 1, FID_A = FALSE;
  • component Status变为PASSED,Inh Counter - 1,即Inh Counter = 0,FID_0 = TRUE;

通过上述场景分析得知,只要Inh Counter不等于0,FID_0 就会等于FALSE,系统就会降级。不过在此需要特别提醒的是虽然此时你知道系统降级了,但是从FID你无法知道到底是哪个Event导致的降级,此时就需要通过相关的诊断服务0x19读取内部的Event并且该Event也确实Map了该FID,那么你就可以锁定该Event就是原因所在。

注:特殊地,当FID被FiM_SetFunctionAvailable设置为不可用,那么 FiM_GetFunctionPermission即返回FALSE,即功能被降级不可用。

3.4 FiM与SW-C之间的交互

一般地,SW-C组件会调用 FiM_GetFunctionPermission轮询FID状态,由此判断对功能进行降级与否。前提是SW-C知道FID和功能的映射关系。

4 配置参数

Dem :

  • 存在需求中Events;
  • 是否使能Event monitor status改变时告知FiM;
  • 是否使能Component status改变时告知FiM;

FiM:

  • FID与Event以及Component之间的映射关系,还有Event statsus对应的Inh mask;
  • 配置可以将一类Event合成一个summary event,其处理过程并无差异;

注:一般Event和Component不会都配置在FID的引用中,状态的计算上有重复之处。

5 参考资料

1. AutoSAR基础篇之FiM
2. Specification of Function Inhibition Manager(AUTOSAR CP R20-11)
3. Specification of Diagnostic Event Manager(AUTOSAR CP R20-11)

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AUTOSAR中,CAN协议栈COM模块主要负责CAN通信的上层协议处理。COM模块实现了自动识别和配置CAN网络中的所有ECU,并且支持多种CAN通信模式,如周期性发送、事件触发发送、远程请求和诊断等。 下面是CAN协议栈COM模块的详细介绍: 1. 总体架构 CAN协议栈COM模块的总体架构如下图所示: ![image-20211014165955845](https://gitee.com/wu_xiaoshi/blog_img/raw/master/img/20211014170001.png) 2. 模块功能 - 支持CAN通信的上层协议处理,如UDS、J1939等。 - 自动识别和配置CAN网络中的所有ECU。 - 支持多种CAN通信模式,如周期性发送、事件触发发送、远程请求和诊断等。 - 支持CAN网络的故障诊断和错误处理。 - 支持对CAN消息的过滤和控制。 - 提供API接口,方便应用层进行CAN通信的控制和管理。 3. 模块组成部分 CAN协议栈COM模块由以下几个部分组成: - PDU Router:用于将不同的PDU映射到不同的CAN ID上,并进行CAN帧的发送和接收。 - Routing Table:用于存储PDU与CAN ID之间的映射关系。 - Transmission Handler:用于处理发送PDU的请求,包括周期性发送、事件触发发送等。 - Reception Handler:用于处理接收到的CAN帧,并将其转化为对应的PDU。 - Diagnostic Handler:用于处理CAN网络的诊断和错误处理。 4. 模块接口 CAN协议栈COM模块提供了以下几个API接口: - Com_Init():初始化COM模块。 - Com_DeInit():关闭COM模块。 - Com_SendSignal():发送信号到CAN总线上。 - Com_ReceiveSignal():接收CAN总线上的信号。 - Com_SendPdu():发送PDU到CAN总线上。 - Com_ReceivePdu():接收CAN总线上的PDU。 - Com_MainFunction():主函数,用于处理COM模块的各种任务。 5. 应用场景 CAN协议栈COM模块通常应用于车辆电子控制系统中,用于实现车内各个ECU之间的CAN通信。在汽车电子控制系统中,CAN网络通常用于传输各种控制、监测和诊断信息,如发动机控制、车身控制、仪表盘显示、车载娱乐系统等。CAN协议栈COM模块可以方便地处理这些信息,并且支持多种CAN通信模式,保证了CAN网络的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值