问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

聚焦AUTOSAR FiM,揭秘汽车诊断新利器!

创作时间:
作者:
@小白创作中心

聚焦AUTOSAR FiM,揭秘汽车诊断新利器!

引用
CSDN
1.
https://blog.csdn.net/Dotrust2013/article/details/137961639

在汽车电子系统中,故障诊断和功能管理是确保车辆安全运行的关键环节。本文将深入探讨AUTOSAR架构中的功能禁止管理器(FiM)模块,介绍其基本功能、工作原理、配置方法及其在汽车诊断系统中的具体应用。

1. FiM模块的基本功能

FiM即功能禁止管理器(Function Inhibition Manager),它负责为软件组件及其功能提供控制机制。在这种情况下,功能组(Functionality)可以是由具有相同允许/禁止条件集的一个、几个或部分可运行实体(runnable entities)的内容构成。通过FiM可以配置禁止这些功能组,甚至在运行时修改这些功能组使能或禁止。FiM旨在满足当ECU检测到故障时对系统响应的集中处理的设计要求。


图1 FiM软件架构

图1(引用《AUTOSAR_SWS_DiagnosticEventManager》文档)为FiM模块的软件架构图,FiM依赖的其他模块有诊断事件管理器(Dem)、具有FID接口的软件组件 (SW-C)、ECU状态管理器(EcuM)、RTE和支持被FiM抑制功能的BSW模块。

2. FiM对软件组件及其功能控制

FiM的服务专注于软件组件SW-C中的功能组,但是它们不仅限于这些功能组。BSW的功能组也可以使用FiM服务。功能组可以被分配给一个标识符FID(Function Identifier),以及包含此特定标识符的禁止条件(Dem的事件及其状态信息作为禁止条件的输入)。FiM应使用软件组件提供的FID - EventIDs - Inhibition Mask关系来确定所有已配置FID的权限状态。相关功能组在执行前会通过FID来轮询相关的权限状态。如果此标识符的禁止条件适用时,则相应的功能组就会被禁止。

例如图2(引用《AUTOSAR_SRS_FunctionInhibitionManager》文档)的FiM应用实例:用特定标识符FID来标识的前左防夹传感器SW-C,当它检测防夹的Event为Failed(故障),并将此故障事件(Event)报告给Dem,Dem会通过某种关系通知到FiM模块,则FiM会设置此FID状态为抑制,前左车窗升降的SWC通过此FID状态得知防夹传感器异常,从而禁止车窗关闭。


图2 FiM应用实例

3. FiM与Dem和SW-C的交互

那么知道了FiM模块的主要功能,FiM又是如何与其他模块进行交互来完成其上述功能的呢?


图3 FiM与Dem和SW-C的交互图

如图3(引用《AUTOSAR_SRS_FunctionInhibitionManager》文档)所示,与FiM交互的模块分别是Dem和SW-C。其交互流程如下:

  1. 当Event Status发生变化时,Dem通过API函数FiM_DemTriggerOnMonitorStatus()通知到FiM模块;
  2. 在被告知Event Status发生变化时,FiM使用API函数Dem_GetMonitorStatus()重新计算功能抑制。
  3. SW-C模块则会调用FiM模块功能可用性接口FiM_GetFunctionPermission()来轮询FID的抑制状态来控制相应功能是否禁止。

4. FiM初始化过程


图4 FiM的初始化序列

如图4(引用《AUTOSAR_SRS_FunctionInhibitionManager》文档)所示,FiM模块的初始化流程如下:

  1. EcuM模块首先调用函数Dem_Preinit()完成Dem预初始化;
  2. EcuM模块通过函数NVM_ReadAll()来获取最新存储的所有Event的状态;
  3. EcuM模块调用函数FiM_Init()来完成内部变量的初始化,但是调用完不能立即被使用;
  4. EcuM模块调用函数Dem_Init()完成Dem内部变量的初始化,然后Dem调用FiM_DemInit()来最终完成FiM模块的初始化。
  5. 只有当Dem模块与FiM模块都最终完成初始化后其相关其他函数接口才能够被正常使用。

5. FiM配置

5.1 FiM数据结构

FiM的配置过程应该在FiM模块中创建数据结构来存储抑制关系(EventID - FID -Inhibition Mask)。

FID全称Function Identifier,取值就是Bool类型 TRUE or FALSE,举例说明如下:

  • FID_1 == TRUE:即抑制场景不激活,功能不禁止;
  • FID_1== FALSE:即抑制场景激活,功能禁止。

Inhibition Mask:用于决定什么样的Event Status会触发上述FID置位,有以下三种取值:

  • if Failed:当Event Status Bit0 = 1时,该值就为1,否则为0;
  • if Tested:当Event Status Bit6 =0时,该值为1,否则为0;
  • if Not Tested:当Event Status Bit6 =1时,该值为1,否则为0;

FiM数据结构的实现不能被规定。图5.1(引用《AUTOSAR_SRS_FunctionInhibitionManager》文档)为一种可能的配置示例,为一个FID分配可配置数量的EventId和抑制掩码。每个FID的EventIds和抑制掩码的数量必须匹配,以便每个配置的事件都有相应的抑制掩码。


图5.1Event与FID之间的mapping示例

FiM的配置实际上建立在事件Id(EventId)和分配的功能Id(FunctionId)的关系之上。每个FID都有一个抑制掩码,每个FID都有一个特定的EventId。如果该事件具有一定的状态,则如果事件状态与配置的掩码匹配,则FID的抑制将激活。

配置时需要考虑:对于每个FunctionId,FunctionId的状态如何依赖于一个/几个EventIds的状态?

  • 掩码决定了EventId的状态和FunctionId的禁止状态之间的关系。
  • 如果一个FunctionId依赖于几个EventId,通过“OR”运算以得出一个FunctionId的总体结果。

在配置过程中,建立数据结构。根据实现的不同,这可能是一个事件到所有受影响FID的映射,或者相反,一个FID到所有影响它的事件的映射。

5.2 FiM配置实例

图5.2(引用《AUTOSAR_SRS_FunctionInhibitionManager》文档)为FiM模块基于达芬奇开发工具的配置实例:FID与Event以及Component之间的映射关系,还有Event statsus对应的Inhibition Mask。


图5.2 FiM的配置

受监控组件(Monitored Component)作为一种标识符,是Dem模块提供标识特定受监控的组件,包括:硬件组件或者信号。受监控组件的FAILED状态代表所有被分配的监控功能和从其他Dem模块继承的故障信息的结果。

诊断事件(Diagnostic Event)作为一种标识符,是为了Dem模块所提供的特定诊断监控功能用来报告错误的。

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

FiM配置可以支持汇总事件。汇总事件(Summarized Event)由多个单个诊断事件组成。配置可以将一类Event合成一个summary event。

当与汇总事件相关联的某一个Dem事件被报告给FiM时,则FiM需要能够一并处理与该汇总事件相关联的所有FID的禁止条件。因此特定的汇总事件只是作为多个诊断事件的代表。

通过使用汇总事件配置(FiMSummaryEvent),可以将一组事件选择为FiMInhSumRef,并将其重用于多个抑制配置,最终以达到简化配置的目的。

以上内容是基于AUTOSAR标准文档《AUTOSAR_SWS_FunctionInhibitionManager》的分析和总结,希望对各位工程师有所帮助。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号