往期小怿向各位小伙伴介绍了,文章内容过多分为了两期,本期为大家介绍《AUTOSAR模块之诊断篇(下)》。
目录
1.概述
2.DCM
3.DEM
4.FIM
5.结语
点击查看前文:AUTOSAR系列专题--诊断模块(上)
DEM(诊断事件管理器)负责处理和存储诊断事件(错误)和相关数据。此外,DEM向DCM提供故障信息(例如,从事件存储器中读取所有存储的DTC)。DEM提供到应用程序层和其他BSW模块的接口。
DEM与BSW和SWC的接口和依赖关系如下图:
DTC(诊断故障码,长度3字节),用来记录ECU发生故障时的故障信息,比如故障触发条件、故障解除条件、系统功能表现等。
ISO15031-6标准中规定了DTC的数据组成,DTC命名方式等信息。
DEM支持的DTC类型如下:
DTC的故障类型如下:
● 硬件故障:如RAM、Flash、CPU时钟等硬件本身失效的问题
● 软件故障:如配置字故障,标定故障或客户定义的软件功能性故障
● 外部环境故障:电压过高或者欠压、环境温度过高或过低等
● 通讯相关故障:如报文丢失、信号无效Checksum/AliveCounter故障等
DTC产生时,并不会直接存储在NVM中,而是间接通过Event-DTC的mapping关系来存储DTC,而DTC的状态位则是由其mapping的所有event的状态位的或集。只有DTC以及状态位信息往往不能一步到位定位故障的root cause,需要引入环境信息才能够进一步确定问题所在,包含:
● Snapshot Data:快照信息即为故障发生时刻存下来的瞬态的环境数据,一般是指电源模式、温度、时间戳、车速等信息
● Extended Data:即为在故障发生时其他的辅助故障信息,如aging counter、aged counter 、Fault Counter以及event id等
Event是故障监控的基本单元,能够定位某个模块中的某个具体故障。
Event和DTC的区别
● 多个Event可以mapping 同一个DTC
● 而同一个Event不能mapping多个DTC
● DTC代表某类Event集中表现,而Event则是某个DTC的具体实例
● Event的优先级决定了DTC的优先级;Event之间的依赖关系决定了DTC的依赖关系
Event生命周期
一个事件从发现到老化需要经历多个阶段,例如Event使能条件满足后才能上报,DEM内部去抖且满足存储条件后才能存储,存储后需要进行老化处理。
Event Report
故障上报,SWC或者BSW向DEM报告诊断事件的状态。它由两个部分组成,一个是诊断事件(diagnostic event),一个是滤波(debounce)。DEM会给每个诊断事件分配一个独一无二的识别码(EventId),用来区分不同的事件。
Event上报流程
● 判断是否开启了Operation Cycle
● Event使能条件是否满足
● 是否使能了85服务(ControlDTCSetting)
● 去抖处理
● 判断存储条件是否满足
Event使能条件
Event开启监控绝大部分情况下都需要满足一定条件,若不加以相关的限制条件,那么会导致增加诸多的信息干扰,无法快速排查Root Cause,通过Event过滤器,可以达到所允许或者抑制的Event上报的效果。
Event上报方式
● 循环上报:不会被14服务清除,可实时监控故障状态,但上报的Event数量过多,增加RTE负载
● 触发上报型:能降低RTE负载,但也容易被14服务清除
诊断监视器是确定组件正确功能的例行实体(routine entity)。诊断监视器能在监控路径识别特定的故障类型(如对地短路),监控路径表示被监控的物理系统或者电路 (例如传感器输入)。每个监视路径都与一个诊断事件相关联。
DEM Debounce为了实现防止故障误报,只有经历去抖动算法之后,Event的最终状态才能够被确定,即PASS、FAIL,、No Result这三类。一般而地抖动策略也分为两种包括TimeBase与Counterbase:
● TimeBase是通过计时来完成对Event的去抖动的过程,适用于超时类故障
● CounterBase则是通过计数来完成对Event的去抖动,适用于触发型的故障
事件内存管理定义为在DEM模块中添加、更新和删除事件内存条目的过程。DEM模块确定事件内存条目是新的还是当前存在于事件内存中。
Event retention
Event retention定义了DEM模块记录和处理事件(DTC)、UDS状态信息和事件相关数据(例如,冻结帧、扩展数据)的能力。
DEM规范共规定了6种Event存储的条件,更多内容请参看DEM规范手册。
Event Displacement
事件替换意味着,最不重要的、已经存在的事件内存条目被需要存储的新事件内存条目替换。在替换过程中,重要程度最低事件内存条目会丢失。如果新事件内存大小超过所有可能的事件,则不会发生置换。如果事件置换策略被禁止,即DemEventDisplacementStrategy设置为DEM_DISPLACEMENT_NONE,则DEM禁止事件置换功能。
如果事件置换策列被启用,即DemEventDisplacementStrategy设置为DEM_DISPLACEMENT_FULL或DEM_DISPLACEMENT_PRIO_OCC,则DEM根据以下原则置换事件:
● Event Priority(最重要的评判原则,数字越小存储优先级越高,适用于FULL或者PRIO_OCC策略)
● Event Active或者Passive状态(Active存储优先级高于Passive优先级,适用于FULL策略)
● Event Occurence Time(按时间顺序替换较旧的存储事件,按时间顺序替换较旧的存储事件)
Aging of Event
DEM模块提供了从事件内存中删除特定事件的能力,如果其故障条件在某一段时间(操作周期)内未满足失效条件,这个过程被称为“Aging 老化”或“Unlearning 遗忘”。事件老化后,DEM将删除相关事件快照数据(冻结帧)和扩展数据记录。
DemAgingCycleCounterThreshold或DemAgingCyclecounterthresholdforfslc定义了完成的老化周期计数值,在此之后,事件内存条目将从事件内存中删除(老化)。当Aging Counter达到DemAgingCycleCounterThreshold 时, DTC状态位bit3:confirmedDTC设置为0。每个Event memory entry至少有一个Aging Counter。
功能抑制管理器(Function Inhibition Manager)负责为软件组件(software component)及其功能(functionality)提供控制机制,通过FIM可以抑制(取消应用程序功能的激活)这些功能,甚至可以在运行时(构建后配置)期间进行配置和修改。
functionality:一个功能可以由具有相同权限/抑制条件集的一个、几个或部分可运行实体( runnable entity)的内容构建。
FID:功能被分配到一个标识符(FID -功能标识符),以及该特定标识符的抑制条件。这些功能在执行之前轮询各自FID的权限状态。如果特定标识符的抑制条件成立,则相应的功能将不再执行。
● Diagnostic Event:“诊断事件”是DEM向特定诊断监视器功能提供的标识符,用于报告错误
● Monitor Status:“监测状态”是DEM根据监测功能的报告值计算出的状态。可能的值由Dem_MonitorStatusType定义
● Monitored Component:“被监控组件”是由DEM提供给特定被监控组件(硬件组件或信号)的标识符。“被监控组件”的FAILED状态表示所有分配的监控功能的结果和从其他DEMComponent继承的故障信息
● Summarized Event:FIM配置应该支持汇总事件。汇总事件由多个单个诊断事件组成;因此,特定的总结事件只是多个诊断事件的代表。Summarized Event可以用作SWC的抑制条件
● Function Identifier:
a. 应保证FIM中的每个functionid是唯一的
b. FIM模块应使用FunctionId直接指向相关的功能信息(权限状态等)
FIM实现了功能权限的计算。这些被计算的对象是SWC或Logic Unit,每个FID的权限状态是根据分配给特定FID的EventIds计算的。计算出每个EventIds的权限状态,并进行“与”以确定最终的权限状态
● Function Identifier permission state:FID权限状态包含由其FID表示的功能是否可以执行的信息(True执行/False禁止)。SWC组件通过FIM_GetFunctionPermission访问状态
FIM Data Structure
FIM的配置过程应该在FIM模块中创建数据结构来存储抑制关系(EventID - FID -applicable mask)。
可配置的EventIds数量和抑制掩码被分配给一个FID。每个FID的EventIds和抑制掩码数量必须匹配,以便对于每个配置的事件,都存在相应的抑制掩码。抑制掩码包含FID的抑制条件,前提是相关的EventIds具有特定的状态(Dem_EventStatusExtendedType)。这些掩码定义了FID对事件的哪些状态敏感。
每个FID都有一个抑制掩码,两者都分配给一个特定的FID EventId。如果该事件具有一定的状态,并且如果事件状态与配置的掩码匹配,则对FID的抑制将激活。
Interaction with DEM
FIM模块的功能是基于DEM事件为控制SWC(允许/抑制)提供服务功能当所报告事件的监控状态发生变化时,如果DemTriggerFiMReports是启用的,DEM通过API函数FIM_DemTriggerOnMonitorStatus通知FIM监控状态的变化。在收到监视器状态变化的通知时,FIM使用Dem_GetMonitorStatus来重新计算函数抑制。
每个FID都有一个Inhibition Counter抑制计数器。抑制计数器包含当前抑制的EventIds的数量。如果状态与掩码匹配,则抑制计数器增加;否则,抑制计数器不会更新。这适用于FIM_GetFunctionPermission(如果权限状态必须在查询时计算)和FIM_MainFunction。
若FIM_DemTriggerOnMonitorStatus报告了监视器状态变化,则执行以下操作:
● 如果EventId的状态改变导致释放状态(掩码与监视器状态不匹配),则抑制计数器必须减小
● 如果EventId的状态变化导致抑制状态(掩码与监视器状态匹配),则抑制计数器必须增加
● 如果抑制计数器为> 0,则FID权限状态设置为FALSE,否则FID权限状态设置为TRUE
Interaction with SWC:
对于每个FID,SWC应提供导致FID抑制的events列表和mask掩码FIM模块应同步响应传入的查询来确保对功能的即时控制。FIM模块通过将权限状态存储为状态变量或在权限查询时计算事件状态来实现这一行为如果使用接口FIM_SetFunctionAvailable将一个函数(FID)设置为不可用,它的权限状态FIM_GetFunctionPermission总是返回FALSE。
FIM的配置实际上建立了EventId和被分配的FunctionId之间的映射关系
下图展示了FIM的实现过程:
Step1:Front-Left Window-lifter SW-C 上报故障给到Error Management模块
Step2:DEM模块识别出为Event anti_Pinch故障
Step3:DEM模块会调用FiM模块相应的函数接口来通知FIM该Event Status对相应FID的影响
Step4:SWC模块轮询相应的FID,然后做出相应的功能抑制响应
今天小怿在本文中为大家做了AUTOSAR诊断模块的详细介绍,总结来说诊断相关的三个模块分别负责实现诊断过程中的不同功能,DCM主要负责诊断通信管理,DEM实现诊断事件的处理,而FIM模块则是针对故障发生后对相关功能的抑制。今天关于AUTOSAR诊断模块就到这里,感谢大家的阅读!