一文搞懂AUTOSAR的DEM模块

 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所示,用于配置扩展数据和快照数据的数据源。其中内部元素如表2所示,外部元素主要分通过C/S或S/R接口获取应用层的数据。

 

2. DemDidClass

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

3. DemExtendedDataRecordClass

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

4. DemFreezeFrameRecordClass

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

5. DemFreezeFrameClass

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

 DEM DTC的Debounce策略

故障诊断是由Dem模块和SWC共同完成的,如下图3所示,SWC中的Monitor Function对故障条件进行实时监控,并实时将故障条件的判定结果反馈至Dem模块判断是否发生故障,如图4所示。

图3 SWC与Dem模块

图4  Dem_SetEventStatus调用示意图

故障诊断由SWC与Dem模块共同完成的,故故障的debounce策略即可在SWC中实现,也可在Dem模块中实现。如果在SWC中,Dem_SetEventStatus()函数传给Dem的状态为passed或failed,如果在Dem,Dem_SetEventStatus()函数传给Dem的状态为prepassed或prefailed。

下面主要介绍在Dem中实现的debounce策略。Dem中提供了两种debounce策略,分别为基于计数器的debounce策略和基于时间的debounce策略,如图5所示。

图5 dem模块支持的debounce策略

基于计数器的Debounce策略

在这种策略下,Dem会提供一个计数器(fault detection counter)用来记录判断的结果,当Diagnostic Monitor上报至dem的状态为prefailed,计数器会按步长增加,当达到设定的限值时,故障状态变成failed。当上报状态为prepassed,计数器按步长减少,当达到设定的限值时,故障状态变成passed。当以下对改策略涉及的重要参数进行解释。

1、FDC(fault detection counter):错误计数器,其范围为-128~127;

2、DemDebounceCounterFailedThreshold:故障从prefailed状态跳转至failed的限值;

3、DemDebounceCounterPassedThreshold:故障从prepassed状态跳转至passed状态的限值;

4、DemDebounceCounterIncrementStepSize:当DiagnosticMonitor上报Prefailed,错误计数器的增加量;

5、DemDebounceCounterDecrementStepSize:当DiagnosticMonitor上报Prepassed,错误计数器减少量;

6、DemDebounceCounterJumpDown:是否使能JumpDown功能。JumpDown功能是指当上一次Diagnostic Monitor上报的状态是prefailed,而当前上报的是prepassed,且当前计数器的值大于DemDebounceCounterJumpDownValue,错误计数器的值会重置为DemDebounceCounterJumpDownValue。如果JumpDown功能禁止,计数器按步长减少;

7、DemDebounceCounterJumpDownValue:当JumpDown功能使能,该变量定义了计数器的重置值;

8、DemDebounceCounterJumpUp:是否使能JumpUp功能。JumpUp功能是指当上一次Diagnostic Monitor上报的状态是prepassed,而这次上报的是prefailed,且当前计数器的值小于DemDebounceCounterJumpUpValue,错误计数器的值会重置为DemDebounceCounterJumpUpValue。如果JumpUp功能禁止,计数器按步长增加;

9:DemDebounceCounterJumpUpValue:当JumpUp功能使能,该变量定义了计数器的重置值;

下面用图6来讲解以上参数及基于计数器的debounde策略。

图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接收的状态发生变化,计数器会重新开始计数,并且计数方向也发生转变。

对于基于时间debounce的策略主要配置以下几个参数:

1、DebounceTimeBasedTaskTime:该变量定义基本的检测周期;

2、DemDebounceTimeFailedThreshold:定义故障状态从prefailed跳转至failed需要多少个DebounceTimeBasedTaskTime周期;

3、DemDebounceTimeFailedThreshold:定义故障状态从prepassed跳转至passed需要多少个DebounceTimeBasedTaskTime周期;

下面用图7来讲解以上参数以及基于时间的debounce策略。

图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。

当故障存储策略选择为DEM_DISPLACEMENT_NONE,如果故障数据存储区存满时,新发生故障的数据不会被存储;当故障存储策略选择DEM_DISPLACEMENT_PRIO_OCC,通过比较故障优先级(Priority)、故障发生时间(Occurrence)、bit6(TestNotCompletedThisOperationCycle bit)状态判断故障数据是否存储;当故存储策略选择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 状态图

其中:

0 表示接收到清除故障信息命令,初始化DTCstatus byte;

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

3,4,5,6表示testFailed,TestFailedThisOperationCycle,pendingDTC,testFailedSinceLastClear位同时从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中故障发生了,所以testfailed、testFailedThisMonitoringCycle置位为1;

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

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

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

Autosar诊断基础——诊断事件管理(DEM)_u012406840的博客-CSDN博客1https://blog.csdn.net/u012406840/article/details/107603731

  • 17
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值