一文搞懂AUTOSAR的DEM模块

本文详细介绍了AUTOSAR(AUTomotive Open System ARchitecture)中的Diagnostic Event Manager (DEM)模块,包括其整体框架、配置选项、故障去抖策略、故障数据存储和DTC状态位的含义。DEM模块负责故障事件的确认、数据存储和管理,如故障事件的debounce策略、基于计数器和时间的Debounce策略、故障数据存储策略以及DTC状态位的8个位的详细解析。

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

 Dem全称为Diagnostic Event Manager负责故障事件的处理、故障数据的存储和管理。

简单说其功能是:

  1. 故障事件确认前的故障debounce(去抖)
  2. 故障事件确认时的故障数据存储
  3. 故障发生后的故障老化、故障替代

1、AUTOSAR DEM模块整体框架

AUTOSAR标准中对Dem模块最上层分了两菜单栏(参见图1),分别是

  • DemConfigSet
  • DemGeneral

DemConfigSet 负责不同DTC、event等的配置。

DemGeneral 负责DTC、event的共用部分,包括冻结帧、扩展帧、使能条件等。 

图1 Dem的上层架构

下面主要介绍上层菜单下的配置选项。

DemConfigSet 下包含图2所示的配置项,下面针对常用的配置选项进行介绍。

图2 DemConfigSet配置项 

1. DemComponent

DemComponent又名MonitorComponent,主要用于有关联的故障事件

比如传感本身发生故障,这时控制器读取的数据应该被视为无效。

一个DemComponent是若干故障事件的集合

在DemComponent内部,故障事件有优先级:

当最高优先级的故障事件状态为Failed导致其他故障事件状态也为Failed。

或者父节点DemComponent的状态为Failed,导致子节点DemComponent内的故障事件状态变成Failed,这种故障叫做连续错误(consecutive FAULT)。

其他被认为是偶发错误(casual FAULT)。

另外如果DemComponent内部故障事件优先级被忽略,那么仅有当父节点DemComponent的状态为Failed导致子节点DemComponent内的故障事件状态变成Failed被称作是连续错误(consecutive FAULT)。

 2. DemDTCAttributes

DemDTCAttributes用于配置DTC的属性包括:

  1. 老化周期
  2. 故障优先级
  3. 存储方式(立即存储还是下电存储)
  4. 快照数据需记录的最大组数
  5. 参考的冻结帧数据快照数据
  6. 故障数据存储的memory

其中快照数据、扩展数据等需要在DemGeneral中配置。

3. DemDTC

DemDTC用于配置故障的DTC值(诊断故障码)、DTC的严重程度以及参考的DTC属性、Obd属性等。

4. DemDebounceCounterBaseClass、DemDebounceTimeBaseClass

这两项主要用于为不同的故障事件配置不同的debounce策略,

  1. 基于计数器的debounce策略
  2. 基于时间的debounce策略

或者由SWC自定义,具体请查看AUTOSAR故障Debounce策略

5. DemObdDTC

DemObdDTC用于配置obd类故障事件是否支持Pto以及故障事件的DTC值等。

6. DemPidClass

用于配置Pid以及相关联的应用层信号。

7. DemEventParameter

DemEventParameter用于配置故障的类型(BSW or SWC)、故障需要多少个运行循环才能确认、是否支持预存储功能、故障事件的debounce策略以及参考的DTC属性、DemComponent、使能条件、运行循环等。

以上参数基本为DemConfigSet比较重要的配置项,其他未介绍的可以查看标准。

DemGeneral

DemGeneral主要用于配置DemConfigSet中不同event、DTC共用的一些参数,所以相对来说比较杂,下面针对一些进行介绍。

1. DemDataElementClass

DemDataElementClass用于配置内部、外部元素,如表1所示,用于配置扩展数据和快照数据的数据源。

DemDataElementClass 其中内部元素如表2所示,外部元素主要分通过C/S或S/R接口获取应用层的数据。

2. DemDidClass

DemDidClass用于配置快照数据的Did 以及对应的DemDataElementClass。

3. DemExtendedDataRecordClass

该项用于配置扩展数据的id、扩展数据触发储存条件和参考的DemDataElementClass。

4. DemFreezeFrameRecordClass

该项主要用于配置快照数据的触发存储条件以及快照id。

5. DemFreezeFrameClass

该项用于配置快照数据包含的数据,数据来自DemDataElementClass。

DEM DTC的去抖动策略

故障诊断由Dem模块和SWC共同完成,如图3所示。SWC中的监控功能实时监控故障条件,并将故障条件的判定结果实时反馈给Dem模块,以判断是否发生故障,如图4所示。

图3 SWC与Dem模块

图4  Dem_SetEventStatus调用示意图

由于故障诊断由SWC和Dem模块共同完成,因此去抖动策略可以在SWC中实现,也可以在Dem模块中实现。

  • 如果在SWC中实现,Dem_SetEventStatus()函数传递给Dem的状态为passed或failed;
  • 如果在Dem中实现,Dem_SetEventStatus()函数传递给Dem的状态为prepassed或prefailed。

在Dem模块中实现的去抖动策略主要有两种:基于计数器的去抖动策略和基于时间的去抖动策略,如图5所示。

  1. 基于计数器的去抖动策略:这种策略通过计数器来记录故障条件的出现次数。当计数器达到预设的阈值时,故障状态被确认。这种方法适用于故障条件频繁出现但持续时间较短的情况。

  2. 基于时间的去抖动策略:这种策略通过测量故障条件的持续时间来判断故障状态。当故障条件持续时间超过预设的时间阈值时,故障状态被确认。这种方法适用于故障条件持续时间较长但出现频率较低的情况。

这两种去抖动策略可以根据具体的应用场景选择使用,以提高故障诊断的准确性和可靠性。

如图5所示。

图5 dem模块支持的debounce策略

基于计数器的去抖动(Debounce)策略

在这种策略下,Dem模块提供一个计数器(故障检测计数器)来记录故障状态。当诊断监控器(Diagnostic Monitor)上报状态为“预故障”(prefailed)时,计数器按设定的步长增加;当计数器达到设定的阈值时,故障状态变为“故障”(failed)。当上报状态为“预通过”(prepassed)时,计数器按设定的步长减少;当计数器达到设定的阈值时,故障状态变为“通过”(passed)。以下是该策略涉及的重要参数解释:

  • FDC(Fault Detection Counter):故障检测计数器,范围为-128到127。
  • DemDebounceCounterFailedThreshold:从预故障状态跳转到故障状态的阈值。
  • DemDebounceCounterPassedThreshold:从预通过状态跳转到通过状态的阈值。
  • DemDebounceCounterIncrementStepSize:当诊断监控器上报预故障时,计数器的增加步长。
  • DemDebounceCounterDecrementStepSize:当诊断监控器上报预通过时,计数器的减少步长。
  • DemDebounceCounterJumpDown:是否启用跳降功能。跳降功能指当上一次诊断监控器上报状态为预故障,而当前上报状态为预通过且计数器值大于DemDebounceCounterJumpDownValue时,计数器值重置为DemDebounceCounterJumpDownValue。如果跳降功能禁用,计数器按步长减少。
  • DemDebounceCounterJumpDownValue:启用跳降功能时,计数器的重置值。
  • DemDebounceCounterJumpUp:是否启用跳升功能。跳升功能指当上一次诊断监控器上报状态为预通过,而当前上报状态为预故障且计数器值小于DemDebounceCounterJumpUpValue时,计数器值重置为DemDebounceCounterJumpUpValue。如果跳升功能禁用,计数器按步长增加。
  • DemDebounceCounterJumpUpValue:启用跳升功能时,计数器的重置值。

图6展示了基于计数器的去抖动策略及其参数:

图6 基于计数器的debounce策略图

其中:

1、5表示JumpDown功能;

3、4表示JumpUp功能;

2表示当前计数器小于DemDebounceCounterJumpDownValue ,所JumpDown功能没有激活;

6表示DemDebounceCounterJumpDownValue ;

7表示DemDebounceCounterJumpUpValue;

8表示DemDebounceCounterFailedThreshold ;

9表示DemDebounceCounterPassedThreshold ;

10、12表示故障确认,由于计数器的值达到了fail的限值;

11故障恢复,由于计数器的值达到pass的限值;

13表示Dem接收的状态为failed,所以故障直接置位;

14表示Dem接到的状态为passed,所以故障恢复;

15表示DemDebounceCounterIncrementStepSize;

16表示DemDebounceCounterDecrementStepSize;

基于时间的去抖动(Debounce)策略

在这种策略下,计数器的初始值为0,范围为-128到127。当Dem模块接收到诊断监控器(Diagnostic Monitor)发送的状态值时,开始计数。计数器的增长方向由接收到的状态决定。当计数器在一定时间内达到阈值时,完成此次判断。如果在未达到阈值时,Dem接收到的状态发生变化,计数器会重新开始计数,并且计数方向也会发生转变。

基于时间的去抖动策略主要配置以下几个参数:

  1. DebounceTimeBasedTaskTime:定义基本的检测周期。
  2. DemDebounceTimeFailedThreshold:定义故障状态从预故障(prefailed)跳转至故障(failed)所需的DebounceTimeBasedTaskTime周期数。
  3. DemDebounceTimePassedThreshold:定义故障状态从预通过(prepassed)跳转至通过(passed)所需的DebounceTimeBasedTaskTime周期数。

图7展示了这些参数及基于时间的去抖动策略:

  1. DebounceTimeBasedTaskTime:基本检测周期。
  2. DemDebounceTimeFailedThreshold:从预故障到故障的周期数。
  3. DemDebounceTimePassedThreshold:从预通过到通过的周期数。

图7 基于时间的debounce策略图

其中:

t failed:表示故障failed需要的时间,该值等于DebounceTimeBasedTaskTime乘以DemDebounceTimeFailedThreshold;

t passed:表示故障passed需要的时间,该值等于DebounceTimeBasedTaskTime乘以DemDebounceTimePassedThreshold;

1、表示Diagnostic Monitor传至Dem的状态为prefailed;并经过t failed时间故障状态编程failed;

2、表示Diagnostic Monitor传至Dem的状态为prepassed;此时计数器重新开始计数;

3、由于2时刻开始计数未达到阈值时,Dem接收的状态发生变化,此时计数器开始重新计数,并计数方向发生变化,经过t failed时间后,故障状态编程failed。

4、Dem接收的状态为failed,所以故障直接置位了;

5、Dem接收的状态为passed,所以故障直接恢复了;

6、表示故障已发生;

7、表示故障未发生;

03. DEM 故障数据存储策略

在AUTOSAR的Dem模块中,提供了DemEventDisplacementStrategy配置选项,用于选择不同的故障数据存储策略。这些策略包括:DEM_DISPLACEMENT_NONE、DEM_DISPLACEMENT_PRIO_OCC和DEM_DISPLACEMENT_FULL。

  1. DEM_DISPLACEMENT_NONE:当选择此策略时,如果故障数据存储区已满,新发生的故障数据将不会被存储。
  2. DEM_DISPLACEMENT_PRIO_OCC:此策略通过比较故障优先级(Priority)、故障发生时间(Occurrence)和bit6(TestNotCompletedThisOperationCycle bit)状态来决定是否存储故障数据。
  3. DEM_DISPLACEMENT_FULL:此策略通过比较故障优先级(Priority)、故障发生时间(Occurrence)、bit6(TestNotCompletedThisOperationCycle bit)状态和故障状态(Active/Passive status)来决定是否存储故障数据。

以下是各参数的详细解释:

  • 故障优先级(Priority):在开发Dem模块时,为每个故障配置一个固定的优先级。
  • 故障发生时间(Occurrence):指故障上报至Dem模块的时间。当同一驾驶循环中故障再次发生时,新的故障数据会覆盖上次的故障数据。
  • 故障状态(Active/Passive status):指故障的当前状态,Active表示故障正在发生,Passive表示故障未发生。

图8展示了AUTOSAR故障数据存储的详细逻辑图。

图8 故障存储策略

如果DemOBDEventDisplacement设置为TRUE,,则故障存储策略会忽略满足以下条件的故障:

已有故障为排放相关的故障(AND)已有故障触发了MIL(OR)Pending位置位为1(OR)(已有故障有合法的冻结帧数据(OR)已有故障优先级大于或等于当前故障)。

04.DEM DTC 状态位含义

DTC status表示一个故障的状态,是故障数据存储、故障老化等机制的依据条件之一,DTC status总共包含8位,各位的含义见表3:

Bit

描述

0

TestFailed

1

TestFailedThisOperationCycle

2

PendingDTC

3

ConfirmedDTC

4

testNotCompletedSinceLastClear

5

testFailedSinceLastClear

6

TestNotCompletedThisOperationCycle

7

WarningIndicatorRequested

表3 DTC status

下面先对八个状态位进行详细介绍。

Bit0 testFailed

故障诊断通常是周期性执行的,如果当前周期检测到故障条件满足,表示故障发生了,testFailed会立即置1。下一个周期如果检测到该故障条件未满足,则testFailed会立即恢复为0。

testFailed恢复为0还有两种情况:

  • 一种是调用Dem_ClearDTC函数清除故障信息(USD 0x14服务,或OBD 0x04服务)
  • 另一种是调用Dem_ResetEventStatus函数对该故障状态位进行复位。

testFailed逻辑图见图9。

AUTOSAR标准中对testFailed还有关于是否需要存储的描述,可以通过配置项DemStatusBitStorageTestFailed进行配置。对于支持WWH-OBD的控制器则需将该配置项配置为true。

图9 testFailed位逻辑图

Bit1 TestFailedThisOperationCycle

TestFailedThisOperationCycle用于表示当前运行循环是否出现过testFailed = 1

一旦testFailed出现过置1的情况,TestFailedThisOperationCycle会被置1。TestFailedThisOperationCycle位恢复为0的条件有两种:

  • 第一种是用Dem_ClearDTC函数清除故障信息(USD 0x14服务,或OBD 0x04服务);
  • 第二种是该运行循环结束或新的运行循环开始。

TestFailedThisOperationCycle的变化逻辑请参照图10。

图10 TestFailedThisOperationCycle位逻辑图

Bit2 PendingDTC

PendingDTC用于表示故障在当前运行循环或者上一个运行循环出现过testFailed被置位为1,并且PendingDTC的状态只有在当前循环测试完毕之后才会更新。也就是说,如果上一个循环故障发生了,PendingDTC置1,当前循环故障没有发生,但是PendingDTC仍为1,只有在下一个循环才会恢复为0。该位恢复0的条件有两种:

  • 第一种是用Dem_ClearDTC函数清除故障信息(USD 0x14服务,或OBD 0x04服务);
  • 第二种是当前运行TestFailedThisOperationCycle未置为1,且TestNotCompletedThisOperationCycle未置为1,同时运行循环结束或者下一个运行循环开始。

该位的逻辑图见图11。

PendingDTC主要用于某些故障需要多个运行循环才能确认(Bit3 confirmedDTC=1)的情况下,目前遇到的主要是OBD排放相关的故障需要实现PendingDTC位。

图11 PendingDTC逻辑图

Bit3 confirmedDTC

confirmedDTC表示故障已经确认,故障数据存储至EEPROM或者FEE(如果支持实时存故障数据)。

需要注意的是,confirmedDTC置位为1不表示故障还在发生,故障当前是否发生主要由testFailed状态确定。该位恢复为0的条件有以下三种:

  • 第一种为故障老化;
  • 第二种为故障替代;
  • 第三种是用Dem_ClearDTC函数(USD 0x14服务,OBD为 0x04服务)清除故障信息。

该位的逻辑图见图12。

图12 confirmedDTC逻辑图

Bit4 TestNotCompletedSinceLastClear

TestNotCompletedSinceLastClear表示自从上次调用Dem_ClearDTC函数清除故障信息后,是否成功执行对故障进行检测。该位的逻辑图见图13。

  • TestNotCompletedSinceLastClear=1:表示该故障自从上次清除之后还未进行检测。
  • TestNotCompletedSinceLastClear=0:表示该故障自从上次清除之后已成功进行检测。

图13 TestNotCompletedSinceLastClear逻辑图

Bit5 TestFailedSinceLastClear

TestFailedSinceLastClear表示自从上次调用Dem_ClearDTC函数清除故障信息后,testFailed是否出现过置位为1。

  • TestFailedSinceLastClear=0表示自从上次清除DTC之后,故障未发生过;TestFailedSinceLastClear=1表示自从上次清除之后故障又发生过。

该位的复位条件有三种:

  • 第一种为调用Dem_ClearDTC函数(USD 0x14服务,OBD为 0x04服务)清除故障信息;
  • 第二种是故障老化;
  • 第三种为故障替代。

该位的逻辑图请参照图14。

图14 TestFailedSinceLastClear逻辑图

Bit6 testNotCompletedThisOperationCycle

testNotCompletedThisOperationCycle表示该运行循环故障是否进行检测,或者说故障是否进行测试。该位的逻辑图见图15。

  • testNotCompletedThisOperationCycle=0:表示当前循环已对该故障进行检测,进行测试。
  • testNotCompletedThisOperationCycle=1:表示当前循环还未对该故障进行检测,进行测试。

图15 testNotCompletedThisOperationCycle逻辑图

Bit7 WarningIndicatorRequested

WarningIndicatorRequested用于某些故障发生需要通过仪表盘的MIL灯通知用户。

  • WarningIndicatorRequested=1表示请求点亮仪表盘的MIL灯。
  • WarningIndicatorRequested=0表示不请求点亮仪表盘的MIL灯。

对于不需要通过仪表盘告知用户的故障,WarningIndicatorRequested始终为0,该位的逻辑图见图16.

图16 WarningIndicatorRequested逻辑图

上面主要单独对DTC status的各位进项介绍,下面通过一张状态图(如图17)来介绍各状态位的变化。

图17 状态图

上面主要单独对DTC状态的各位进行了介绍,下面通过一张状态图(如图17)来介绍各状态位的变化。

0:表示接收到清除故障信息命令,初始化DTC状态字节。

1,2:表示在运行循环1中故障检测,或者说故障测试已经开始,所以bit4、bit6状态发生变化。

3,4,5,6:表示testFailedTestFailedThisOperationCyclePendingDTCTestFailedSinceLastClear位同时从0变为1,表示已检测到故障发生,但该故障需要两个运行周期才能确认,所以confirmedDTC还是为0。

7:表示故障恢复。

8:表示故障再次发生。

9,10:表示在运行循环1结束,运行循环2开始的分界点。由于运行循环2中故障还未进行检测,所以TestFailedThisOperationCycle状态从1变成0,testNotCompletedThisOperationCycle状态从0变成1。

11:表示在运行循环2中故障检测还未开始。这时testFailed的状态可以由制造商指定是否保留上一个循环中testFailed的状态,在AUTOSAR中可以通过DemStatusBitStorageTestFailed配置项配置。

12:表示在运行循环2中故障检测已经执行。

13,14:表示在运行循环2中故障发生了,所以testFailedTestFailedThisMonitoringCycle置位为1。

15:由于故障在两个循环中都存在,confirmedDTC置位为1。

16:用于记录故障连续在多少个运行循环中出现,用于确认故障的confirmedDTC是否达到置1的条件。

小结:

DEM DTC状态位用于表示故障的状态,共包含8位,每个位都有特定的含义:

  1. Bit0: testFailed - 当前周期检测到故障条件满足时置1。
  2. Bit1: TestFailedThisOperationCycle - 当前运行循环中是否出现过testFailed=1。
  3. Bit2: PendingDTC - 当前或上一个运行循环中出现过testFailed=1。
  4. Bit3: confirmedDTC - 故障已确认并存储。
  5. Bit4: TestNotCompletedSinceLastClear - 自上次清除故障信息后是否成功检测。
  6. Bit5: TestFailedSinceLastClear - 自上次清除故障信息后是否出现过testFailed=1。
  7. Bit6: testNotCompletedThisOperationCycle - 当前运行循环中是否进行故障检测。
  8. Bit7: WarningIndicatorRequested - 请求点亮仪表盘的MIL灯。

这些状态位帮助确定故障的检测、存储和处理过程。

一文搞懂AUTOSAR的DEM模块之前分开写过几篇DEM模块的文章,为了方面大家查找,把这几篇进行汇总。icon-default.png?t=O83Ahttps://mp.weixin.qq.com/s?__biz=Mzg4NjIxODk4Mg==&mid=2247496230&idx=1&sn=711b3032878d7fefe15ab2cf78595ccb&chksm=cf9fbbaff8e832b97b752c0559a2cc41348cfd8c78ddb19be019608a87d23c98ed4d0beaab64&scene=21#wechat_redirect

Autosar诊断基础——诊断事件管理(DEM)_u012406840的博客-CSDN博客1icon-default.png?t=O83Ahttps://blog.csdn.net/u012406840/article/details/107603731

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值