AUTOSAR DEM (一):简介

本文详细介绍了AUTOSAR诊断事件管理模块(DEM)在汽车诊断中的作用,包括故障信息收集、处理、上报和存储,以及与其他模块如ECU、FIM、DCM和NVM的交互。它强调了DEM在故障诊断、数据提供和错误状态处理中的关键角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缩略词说明

abbreviationdescription
DEMDiagnostic event manager
DTCDiagnostic Trouble Code
BSWBasic software
SWCSoftware componen
ECUMECU state manager
DCMDiagnostic communication manager
FIMFunction inhibition manager
NVMNVRAM manager
RTERun-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模块的故障信息存储方式可以根据具体需求和系统设计进行选择和配置。以下是一些常见的存储方式:

  1. RAM存储:
    • 实时存储:DEM模块可以将故障信息实时存储在RAM中。这种方式可以提供快速的读写速度和实时性,适用于需要实时故障信息的应用场景。
    • 循环缓冲区:DEM模块可以使用循环缓冲区的方式存储故障信息。这样可以保证最新的故障信息总是可用,而旧的故障信息会被覆盖。
  2. NVM存储:
    • 非易失性存储器:DEM模块可以将故障信息存储在非易失性存储器(如闪存)中。这种方式可以保证故障信息在断电后仍然可用,并且可以长期存储。
    • 存储管理:DEM模块可以使用存储管理机制来管理故障信息的存储。例如,可以使用块管理方式将故障信息存储在不同的存储块中,以便进行读写和擦除操作。
  3. 日志文件存储:
    • 文件系统:DEM模块可以将故障信息存储在文件系统中的日志文件中。这种方式可以提供灵活的存储管理和故障信息的查询和分析。
    • 循环日志:DEM模块可以使用循环日志的方式存储故障信息。这样可以保证最新的故障信息总是可用,而旧的故障信息会被覆盖。

需要注意的是,具体的存储方式应根据系统设计和硬件平台来确定。在实际应用中,需要考虑存储容量、读写速度、存储寿命等方面的要求。同时,还需要确保所选的存储方式与系统中其他模块的通信协议和接口兼容。

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模块分配优先级和 内存保护。

<think>嗯,用户现在问的是AUTOSAR中DTC的存储区域划分。之前他问过ETAS工具如何配置DTC存储,现在转向了AUTOSAR的标准,可能是在项目中同时使用这两种技术,需要了解两者的关联和区别。 首先,我得回忆AUTOSAR的架构,特别是诊断事件管理(Dem)模块。DTC存储主要涉及非易失性内存(NVRAM)的管理,但具体怎么划分呢?可能需要分几个部分:事件存储、扩展数据、冻结帧、老化处理等。 用户之前的问题里提到了存储区域分配,比如每个DTC的结构,包括状态位、计数器等。现在在AUTOSAR下,应该更标准化,比如Dem模块如何组织这些数据。可能需要考虑事件存储区、扩展数据区、冻结帧存储区,还有可能的事件缓冲区。 另外,用户可能关心的是AUTOSAR的规范里这些存储区如何配置,是否需要特定的参数设置,比如通过DemGeneral和DemConfigSet来定义存储位置和大小。同时,可能涉及内存分块,比如使用NvM模块来管理不同的块,每个块对应不同的存储区域。 还要注意AUTOSAR中的事件优先级和存储策略,比如选择首次故障存储还是最新故障覆盖,这会影响存储区域的划分方式。此外,冻结帧数据存储的条件,比如预触发和后触发数据,可能需要不同的内存区域来处理。 用户可能还想知道如何通过工具(比如ETAS的ISOLAR或Vector的DaVinci)配置这些存储区域,是否需要手动分配地址,还是自动生成。需要提到配置参数,比如DemStorageCondition和DemStorageTrigger,这些会影响存储行为。 最后,要确保回答涵盖关键注意事项,比如内存优化、实时性、兼容性以及错误处理机制,这些都是用户在实际项目中可能遇到的挑战。可能需要对比之前ETAS的配置,说明AUTOSAR的不同之处,比如更模块化的设计和标准化的接口。</think>在AUTOSAR架构中,DTC(Diagnostic Trouble Code)的存储区域划分遵循标准化设计,主要通过**诊断事件管理模块(Dem)**与**非易失性存储管理模块(NvM)**协同实现。以下是其核心存储区域的划分逻辑及配置方法: --- ### **1. 存储区域分类** AUTOSAR中DTC相关数据划分为以下关键区域: | **存储区域** | **功能描述** | **数据内容** | |-----------------------|-----------------------------------------------------------------------------|-----------------------------------------------------------------------------| | **事件存储区** | 存储DTC基本状态及老化计数器 | - DTC编号(4字节)<br>- 状态位(1字节)<br>- 老化计数器(1字节) | | **扩展数据区** | 存储与DTC关联的扩展信息(如环境数据) | - 时间戳(4字节)<br>- 里程(4字节)<br>- 故障发生时的电压、温度等(可选) | | **冻结帧存储区** | 存储故障发生时的快照数据(Freeze Frame) | - 关键信号值(如车速、发动机转速等)<br>- 故障触发时的系统状态 | | **事件缓冲区** | 临时存储未确认的故障事件(Pending DTC) | 用于故障确认前的中间状态缓存 | --- ### **2. 内存分配机制** #### **(1) NvM与Dem的交互** - **NvM模块**负责物理存储管理,将DTC数据划分为多个**NvBlock**: - **DTC存储块**:每个DTC对应个NvBlock(如`NvBlock_DTC_0xP0001`),存储其状态、计数器及扩展数据。 - **冻结帧块**:独立存储冻结帧数据(如`NvBlock_FF_0xP0001`),支持多次覆盖写入。 - **Dem模块**通过API调用NvM服务(如`NvM_WriteBlock`、`NvM_ReadBlock`)实现数据存取。 #### **(2) 存储策略配置** - **静态分区**:在Dem配置中预定义存储区域大小(需在`DemGeneral`和`DemConfigSet`中设置): ```plaintext DemMaxNumberOfDTC = 50 // 最大存储DTC数量 DemFreezeFrameSize = 32 // 每个冻结帧占32字节 DemExtendedDataSize = 16 // 每个扩展数据占16字节 ``` - **动态分配**:通过事件优先级(`DemEventPriority`)决定存储顺序(高优先级事件优先存储)。 --- ### **3. 关键配置参数** #### **(1) 状态位与老化计数器** - **状态位映射**:按ISO 14229-1标准定义(通过`DemStatusBit`配置): ```C #define DEM_STATUS_TEST_FAILED 0x01 #define DEM_STATUS_CONFIRMED 0x08 #define DEM_STATUS_AGING_COUNTER_ACTIVE 0x10 ``` - **老化计数器逻辑**:通过`DemAgingCounterThreshold`设置阈值(如255),计数器递增/递减策略由`DemIncrementAgingCounter`和`DemDecrementAgingCounter`函数实现。 #### **(2) 冻结帧存储条件** - **触发条件**:在`DemStorageCondition`中定义(如故障首次发生、计数器达到阈值等)。 - **存储内容**:通过`DemFreezeFrameRecord`配置需要捕获的信号(如`DemFreezeFrame_Speed`、`DemFreezeFrame_RPM`)。 --- ### **4. 存储优化与容错** - **循环覆盖策略**:当DTC数量超过`DemMaxNumberOfDTC`时,按优先级或时间戳覆盖旧记录。 - **冗余存储**:为关键DTC配置镜像存储块(通过`NvMBlockDuplicate`实现),防止数据丢失。 - **CRC校验**:为每个NvBlock添加CRC校验码(在NvM中启用`NvMBlockCrc`功能)。 --- ### **5. 示例:AUTOSAR工具链配置(以Vector DaVinci为例)** 1. **Dem模块配置**: - 在`DemGeneral`中设置存储参数(最大DTC数、冻结帧大小等)。 - 在`DemEvent`中关联DTC与存储条件(如`DemStorageTriggerOnEventConfirmed`)。 2. **NvM模块配置**: - 为每个DTC创建NvBlock,并映射到ECU内存地址(如`0x70000000`)。 - 配置存储周期(如每次点火循环结束时自动保存)。 --- ### **注意事项** 1. **内存对齐**:确保DTC数据按4字节对齐,避免访问冲突。 2. **实时性要求**:DTC状态更新需满足ISO 15031-5的50ms响应时间。 3. **与UDS服务集成**:通过`Dem_DcmReadDTCInformation`服务(如`0x19 02`)提供外部诊断访问接口。 --- 通过以上设计,AUTOSAR实现了DTC存储的标准化管理,兼顾可靠性、实时性及内存效率,满足功能安全(ISO 26262 ASIL等级)和OBD-II法规要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值