工业控制
1.Dem 中为什么用到 debounce
故障诊断通常由诊断事件管理Dem模块和SW-C共同完成,即先由SWC中的Monitor Function对故障条件实时监控,并不断将故障条件的判定结果上报给Dem模块,而在Dem为了防止所有的故障误报,在其处理过程中增加一个Debouncing(去抖动)环节,也就是采用Debounce算法来确定事件的最终状态,即确认事件是PASSED、是FAILED,还是 No Result,除此之外还包括PREFAILED和PREPASSED。Dem模块中提供2种Debounce算法,基于计数器的Debounce算法是通过计数器计数来完成对事件的确认;基于时间的Debounce算法则通过计时来完成对事件的确认。
2. SWC 与 Dem 的故障诊断关系
故障诊断是由Dem模块和SWC共同完成的,SWC中的Monitor Function对故障条件进行实时监控,并实时将故障条件的判定结果反馈至Dem模块判断是否发生故障,因为故障诊断由SWC与Dem模块共同完成的,所以debounce策略即可在SWC中实现,也可在Dem模块中实现。
3. Dem 中实现的 debounce 策略
Dem中实现debounce策略有三种,如下图7.30所示
3.1 基于计数器的Debounce策略
针对该算法,Dem模块为每一个事件提供一个Debounce计数器(范围为-128到127)用来记录判断的结果。
当一个事件上报一次PREFAILED状态,那么计数器(Fault Detection Counter)会按步长增加1,当达到设定的Failed限值时,故障状态就变成Failed。如下图t1时刻。
当一个事件上报一次PREPASSED状态,那么计数器按步长减少1,当达到设定的Passed限值时,故障状态就变成Passed,如下图t2时刻。
注释:Failed限值根据需求来定义,例如有的是3个event条件就会触发DTC的Failed状态。
FDC(fault detection counter):错误计数器,其范围为-128~127;
DemDebounceCounterFailedThreshold:故障从prefailed状态跳转至failed的限值;
DemDebounceCounterPassedThreshold:故障从prepassed状态跳转至passed状态的限值;
DemDebounceCounterIncrementStepSize:当DiagnosticMonitor上报Prefailed,错误计数器的增加量;
DemDebounceCounterDecrementStepSize:当DiagnosticMonitor上报Prepassed,错误计数器减少量;
DemDebounceCounterJumpDown:是否使能JumpDown功能。JumpDown功能是指当上一次Diagnostic Monitor上报的状态是prefailed,而当前上报的是prepassed,且当前计数器的值大于DemDebounceCounterJumpDownValue,错误计数器的值会重置为DemDebounceCounterJumpDownValue。如果JumpDown功能禁止,计数器按步长减少;
DemDebounceCounterJumpDownValue:当JumpDown功能使能,该变量定义了计数器的重置值;
DemDebounceCounterJumpUp:是否使能JumpUp功能。JumpUp功能是指当上一次Diagnostic Monitor上报的状态是prepassed,而这次上报的是prefailed,且当前计数器的值小于DemDebounceCounterJumpUpValue,错误计数器的值会重置为DemDebounceCounterJumpUpValue。如果JumpUp功能禁止,计数器按步长增加;
DemDebounceCounterJumpUpValue:当JumpUp功能使能,该变量定义了计数器的重置值;
注释:根据【AUTOSAR_SWS_DiagnosticEventManager】文档中说明,Dem 模块应通过 DemDebounceAlgorithmClass 来支持去抖算法的特定事件的配置。如图所示,所属的模块位置。
3.2 基于时间的Debounce策略
针对该算法,Dem模块为每一个事件提供一个Debounce计时器(范围同样为-128到127)用来记录判断的结果。
当一个事件上报一次PREFAILED状态,那么计时器(Fault Detection Counter)开始计时,在一段时间t failed,如果都没有出现PREPASSED或PASSED状态,那么到达t failed时,故障状态就变成Failed,如下图t1时刻;在t failed内,如果出现FAILED状态,那么故障状态就直接变成Failed,如下图t4时刻。
当一个事件上报一次PREPASSED状态,那么计时器(Fault Detection Counter)开始计时,在一段时间t passed内,如果都没有出现PREFAILED或FAILED状态,那么到达t passed时,故障状态就变成Passed,如下图t2时刻;在t passed内,如果出现PASSED状态,那么故障状态就直接变成Passed,如下图t3时刻。
对于基于时间debounce的策略主要配置以下几个参数:
DebounceTimeBasedTaskTime:该变量定义基本的检测周期;
DemDebounceTimeFailedThreshold:定义故障状态从prefailed跳转至failed需要多少个DebounceTimeBasedTaskTime周期;
DemDebounceTimeFailedThreshold:定义故障状态从prepassed跳转至passed需要多少个DebounceTimeBasedTaskTime周期;
3.3 基于SWC中Debounce策略
在SWC中,可以通过手写代码来实现上面两个的逻辑,比如说DTC判断的需求是每10ms判断一次,如果三次判断都是Failed,则DTC set Failed,否则是 PASSED。
现在,我创建了一个Task,这个Task每10ms就会执行一次,我可以将DTC的判断条件放在这个Task里,如果判断(Failed)条件成立三次,就会set Failed状态。否则 PASSED。
4. Debounce 对UDS DTC状态的影响
通过 《ISO 14229》 UDS服务中的 0x19服务,可以读取到此时DTC的状态,依据AutoSAR描述,当event report的EventStatuse为passed或者failed或者bounce counter到达debounce counter的阈值时,UDS Status的bit0(TestFailed),bit1(TestFailedThisOperationCycle)和 bit6(TestNotCompletedThisOperationCycle)会发生变化。
根据ISO14229-1_2013规定,bit4(testNotCompletedSinceLastClear)由“1”变为“0”的条件是“DTC测试的结果为passed或者failed。
bit5(testFailedSinceLastClear)由“1”变为“0”的条件是“从上一次诊断信息被清除之后的DTC测试结果为failed”。
注意:具体可参考《AUTOSAR_SWS_DiagnosticEventManager》中第 7.7 章 《Event memory description》
bit0
bit1
bit2
bit3
bit4
bit5
bit6
bit7
在经过 debounce 或者 no debounce 滤波之后的结果为 failed 时,bit4 和 bit6 会被清零,bit5 应当被置 1 ;
在经过 debounce 或者 no debounce 滤波之后的结果为passed时,bit4 和 bit6 会被清零。而 bit2(pendingDTC)、bit3(confirmedDTC)和 bit7(warningIndicatorRequested)是需要在Fault memory中其他的条件去判断(具体的可以在Fault Memory章节和UDS Status大总结中看到),所以这3个位和debounce影响的4个UDS状态位是异步置位。由于诊断事件report故障及状态是独立于DEM模块,所以为了保存debounce之后的故障状态,可以给每个故障再给配一个变量记录debounce的状态。
5. 需求参考
审核编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !