缩略词说明
abbreviation | description |
---|---|
DEM | Diagnostic event manager |
DTC | Diagnostic Trouble Code |
BSW | Basic software |
SWC | Software componen |
ECUM | ECU state manager |
DCM | Diagnostic communication manager |
FIM | Function inhibition manager |
NVM | NVRAM manager |
RTE | Run-Time Environment |
故障事件管理(Diagnostic Event Manager, DEM)是autosar 诊断模块的重要组成部分,主要负责监控车辆的各种诊断事件,并提供相应的诊断信息和服务。它负责收集、存储和处理来自各个车辆电子控制单元(ECU)的诊断事件,以便进行车辆健康状态的监控和故障诊断。
DEM模块相关的标准主要包括两部分:ISO 14229(UDS,车身域诊断遵循的主要标准)和ISO 15031(OBD,该标准制定较早,主要针对排放相关的诊断)。
主要作用:
1、汽车检修提供数据:汽车售后会通过诊断仪去读取诊断仪读取诊断数据,主要包括诊断故障码(DTC)、扩展数据及冻结帧等。根据故障码能够判断出现故障的汽车部件,根据具体的关联数据可以读到出现故障的时间以及当时的ECU的一些状态数据(记录易于判断故障原因的数据)
2、汽车错误状态处理提供依据:故障信息是ECU的运行重要依据,出现影响功能的故障时,应对功能禁止或功能降级以保护ECU或者负载。
1)、功能禁止:当电机出现短机这种情况时,处于保护负载及ECU的目的应该关断输出
2)、功能降级:如车窗反复操作时,车窗电机出现温度升高的情况,处于保护会将温度分为几个保护level,在这几个level中分别禁止相应的功能(如自动上升、自动下降等)
3、汽车重要故障显示:某些重要组件出现出现问题,需要警示用户(仪表盘上显示或者中控屏显示等)避免出现安全事故,主要看OEM如何定义这些故障等级。
故障监控基本单元为event, 上报的event来自于BSW/SWC。上报时机和监控策略由上报event的模块自行决定。
故障事件触发原则
事件触发条件:DEM根据特定的条件来触发故障事件,这些条件可以是硬件故障、软件故障、传感器数据等。例如,当某个传感器的数据超过预定的范围时,DEM可以触发相应的故障事件。
事件触发优先级:DEM可以根据故障的严重程度来确定事件的优先级,以便在处理多个故障事件时进行优先级排序。这样可以确保高优先级的故障事件先被处理。
事件触发时机:DEM可以根据特定的时机来触发故障事件,例如,在系统启动时、周期性检查时或根据特定的输入触发时。
事件定义原则
事件类型定义:DEM可以定义不同类型的故障事件,例如,故障事件、警告事件、信息事件等。每种类型的事件都有不同的严重程度和处理方式。
事件参数定义:DEM可以定义故障事件的参数,以提供更多的信息来描述故障。例如,事件参数可以包括故障类型、故障代码、故障位置等。
事件状态定义:DEM可以定义故障事件的状态,以跟踪事件的处理过程。例如,事件状态可以包括未处理、已确认、已修复等。
AUTOSAR 事件定义原则
事件依赖清晰
事件触发方式合理
事件本身定义明确合理
事件定义不宜过多或者过少
经由BSW模块或者SWC模块上报的故障事件,有多种上报方式,如通过RTE接口、DEM模块标准接口来上报,一般是同属于BSW的模块直接调用RTE或者DEM标准接口均可,对于SWC模块则需要通过RTE来上报故障事件。其中,调用DEM标准接口时,也存在四种调用方式
Dem模块收到来自BSW或者SW-C模块的故障事件及状态会进行相应的处理,上报故障事件状态可分为四种:PreFail、PrePass、Passed、Failed。其中前两者需要经过TimeBased 或者CounterBased 的debouncing 策略来进一步判定故障是否成熟,而后二者则可以直接判别故障是否成熟。
如果故障成熟则直接修改上报的故障事件对应的DTC 状态并判断是否需要存储/替换等。
DTC简介放在第二节进行介绍。
为了便于故障发生后能够保留现场,因此需要将相关故障信息存储至Flash或者EEPROM中。 DEM模块的故障信息存储方式可以根据具体需求和系统设计进行选择和配置。以下是一些常见的存储方式:
需要注意的是,具体的存储方式应根据系统设计和硬件平台来确定。在实际应用中,需要考虑存储容量、读写速度、存储寿命等方面的要求。同时,还需要确保所选的存储方式与系统中其他模块的通信协议和接口兼容。
DEM处于BSW的服务层
从图来看与dem交互的模块有SWC、BSW、ECUM、FIM、DCM、NVM。
SWC & BSW
SW-C (Software- components)和BSW (Basic Software)模块可以访问 Dem,更新和/或检索当前监视器状态和UDS状态 信息。swc和BSW模块可以从Dem中检索数据,例如 打开或关闭指示灯。监视器是SWC / BSW模块的子组件。
应用层SWC会周期调用故障监控函数,并周期调用标准接口
Std_ReturnType Dem_SetEventStatus(Dem_EventIdType EventId,Dem_EventStatusType EventStatus)
把故障及状态报给DEM,DEM会根据预先配置的debounce方式调用相对应的函数。然后根据debounce的结果决定是否把当前故障加入到fault memory中和触发FIM。
BSW也会给DEM报故障,根据AUTOSAR规定,BSW通过调用标准接口
void Dem_ReportErrorStatus(Dem_EventIdType EventId,Dem_EventStatusType EventStatus)
给DEM报故障,故障内容如e2e校验错误。该类故障在DEM中的debounce方式是no debounce,不需要debounce,所以故障状态只有DEM_EVENT_STATUS_FAILED或者DEM_EVENT_STATUS_PASSED。
ECUM
ECUM负责基本软件组件(包括Dem)的基本初始化和 反初始化。
ECUM负责在不同时序调用DEM的初始化工作.
DEM初始化应包括
对每个故障的debounce status做处理;
初始化fault memory相关数据;
初始化DEM中存储的BSW的故障数据。
Dem分两阶段进行初始化:Dem_PreInit和Dem_Init。
Dem_PreInit可在NvM初始化完成前(比如InitZero阶段)就进行一些BSW相关的DTC管理的初始化,之后BSW模块即可通过Dem_ReportErrorStatus()
接口上报诊断事件(DTC所对应的operation cycle必须已经启动,参数DemOperationCycleAutostart确定其是否自启动)。
Dem_Init发生在NvM初始化完成之后(比如StartupTwo阶段),之后ASW应调用Dem_SetOperationCycleState()
启动相应的operating cycle,启动后ASW即可通过RTE使用接口Dem_SetEventStatus()
上报事件。
FIM
功能抑制管理器(FiM)代表对软件组件所需操作的事件评估和分配(例如:抑制特定的“监视器”)。在监视器状态发生变化时,Dem通知并更新FiM,以便根据指定的依赖关系停止或释放功能实体。
FIM全称function inhibition manager,主要负责给SWC提供一个控制机制,可以使能或者失能SWC的功能,如SWC中电压检测功能,此时由于其该功能被抑制,SWC此时使用Dem_SetEventStatus报给DEM的故障状态是no condition。
另外在SWC调用Dem_SetEventStatus时,如果故障状态发生变化,DEM会通过调用
void FiM_DemTriggerOnEventStatus(Dem_EventIdType EventId,Dem_UdsStatusByteType EventStatusByteOld,Dem_UdsStatusByteType EventStatusByteNew )
来抑制SWC本身的功能和与之相关的事件的功能。
DCM
Dcm (Diagnostic Communication Manager)负责UDS和SAE J1979之间的通信路径和诊断 服务的执行,从而处理来自外部 测试仪或板载测试系统的诊断请求。它转发来自外部诊断 扫描工具的请求,并进一步负责响应消息 (DTC,状态信息等)的组装,这些消息随后将被转移到外部诊断扫描工具。
DCM和DEM之前有着密切关系,因为DCM中有ReadDTCInformation和ClearDiagnosticInformation这两个服务都是都是要从DEM中读取信息或者传递命令,还有PID01请求当前动力诊断数据等服务。比如根据DTC读冻结帧(也叫快照)(19 04 xx xx xx yy),在19服务的自服务的处理函数里面,首先就要调用
Dem_ReturnGetStatusOfDTCType Dem_DcmGetStatusOfDTC(uint32 DTC,Dem_DTCOriginType DTCOrigin,uint8* DTCStatus)
给DEM传递DTC和该DTC所属的memory类型,来获得DTCStatus;然后调用
Dem_ReturnGetSizeOfDataByDTCType Dem_DcmGetSizeOfFreezeFrameByDTC(uint32 DTC,Dem_DTCOriginType DTCOrigin,uint8 RecordNumber,uint16* SizeOfFreezeFrame)
获得冻结帧(快照)的数据大小,因为数据大小和数据内容是提前配置好的,也可标定。最后调用
Dem_ReturnGetFreezeFrameDataByDTCType Dem_DcmGetFreezeFrameDataByDTC(uint32 DTC,Dem_DTCOriginType DTCOrigin,uint8 RecordNumber,uint8* DestBuffer,uint16* BufSize)
获取冻结帧。但是DCM和DEM是两个不同的任务,所以以上几个函数一般是异步执行,DCM只负责把请求命令和写入目标给到DEM,在DEM任务中轮询DCM的任务请求,并实现数据的填充,后通知DCM任务完成。DCM再通过肯定相应回复数据。
NVM
NVRAM管理器(NvM)提供了在NVRAM中存储数据块的机制。NVRAM块(最大大小是配置问题) 分配给Dem并由Dem用于实现 UDS状态信息和相关数据的永久存储(例如,上电复位)。
NVM主要用于非易失性数据的存储和维护。DEM中存在大量数据需要存储在非易失性存储模块(如Dflash、EEPROM)中,但两者的交互关系基本都发生在上电初始化(startup)和下电(shutdown)过程中,也可以在运行过程中写入,write all除外。
RTE
RTE实现了BSW的调度机制,例如为ECU中使用的每个BSW模块分配优先级和 内存保护。