Autosar Dem模块之Debounce策略

文章介绍了Dem模块的Debounce策略,包括基于计数和时间的Debounce算法,以及特定的Debounce算法如MonitorDebounce。在Autosar框架中,配置这些算法涉及到设置阈值、计数步长、定时器和不同的行为参数。此外,Dem模块的DebounceBehavior参数影响事件上报时的处理方式。文章强调理解这些功能对于有效配置和调试Autosar系统至关重要。

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

事件Debounce策略概述

Dem模块提供了几个优化信号质量的Debounce策略,包括基于计数的Debounce算法、基于时间的Debounce算法以及特定的Debounce算法。Dem模块可以通过配置事件的DemDebounceAlgorithmClass容器来选择相应的Debounce算法。

基于计数的Debounce算法

Dem模块根据上报检查结果(Passed/Failed),内部Debounce计数增加/减少N(步长)。当内部Debounce计数达到失败阈值时,monitor会上报DEM_EVENT_STATUS_FAILED状态;当内部Debounce计数达到成功阈值时,monitor会上报DEM_EVENT_STATUS_PASSED状态。

若开启jump-down功能,当内部Debounce计数达到失败阈值后,内部Debounce计数设置为jump-down初始值。若开启jump-up功能,当内部Debounce计数达到成功阈值后,内部Debounce计数设置为jump-up初始值。下图为计数Debounce的示例:

Dem模块提供了DemDebounceBehavior参数,定义在Enable condition和ControlDTCSetting过程中上报的处理方案,具体配置和处理流程如下图所示:

DEM_DEBOUNCE_STATUS_FREEZE:在Enable condition和ControlDTCSetting过程中上报,内部Debounce计数保持不变;

DEM_DEBOUNCE_STATUS_RESET:在Enable condition和ControlDTCSetting过程中上报,内部Debounce计数清零。

Dem模块提供了DemDebounceCounterStorage参数,定义内部Debounce计数是否需要存储。若开启,Dem模块会在Dem初始化(Dem_Init)的时候重载之前存储的内部Debounce计数。

其中Autosar 配置如下:

  • 开启基于计数的Debounce算法(DemDebounceCounterBasedSupport = true)
  • 设置event的Debounce算法(DemDebounceAlgorithmClass = DemDebounceCounterBased)
  • 设置Failed阈值(DemDebounceCounterFailedThreshold)
  • 设置passed阈值(DemDebounceCounterPassedThreshold)
  • 设置内部Debounce计数步长(DemDebounceCounterIncrementStepSize)
  • 开启Jump down功能(DemDebounceCounterJumpDown = true)
  • 设置Jump down初始值(DemDebounceCounterJumpDownValue)
  • 开启Jump up功能(DemDebounceCounterJumpUp = true)
  • 设置Jump up初始值(DemDebounceCounterJumpUpValue)
  • 设置Debounce行为(DemDebounceBehavior)
  • 设置内部计数存储功能(DemDebounceCounterStorage)

基于时间的Debounce算法

Dem模块根据上报检查结果(Passed/Failed),开启Failed/Passed内部Debounce定时器。当内部Debounce定时器达到失败阈值时,monitor会上报DEM_EVENT_STATUS_FAILED状态;当内部Debounce定时器达到成功阈值时,monitor会上报DEM_EVENT_STATUS_PASSED状态。

具体Debounce流程如下图所示:

Dem模块提供了DemDebounceBehavior参数(同计数Debounce功能相同),定义在Enable condition和ControlDTCSetting过程中上报的处理方案,具体配置和处理流程如下图所示:

DEM_DEBOUNCE_STATUS_FREEZE:在Enable condition和ControlDTCSetting过程中上报,内部Debounce定时器保持不变;

DEM_DEBOUNCE_STATUS_RESET:在Enable condition和ControlDTCSetting过程中上报,内部Debounce定时器清零。  

具体Debounce Reset流程如下图所示:

其中Autosar 配置如下:

  • 开启基于计数的Debounce算法(DemDebounceTimeBasedSupport= true)
  • 设置event的Debounce算法(DemDebounceAlgorithmClass = DemDebounceTimeBase)
  • 设置Failed阈值(/DemDebounceTimeFailedThreshold)
  • 设置passed阈值(DemDebounceTimePassedThreshold)

特定的Debounce算法

针对一些有特殊需求的应用程序,Dem模块还扩展了其他的特殊Debounce算法。

Monitor Debounce 算法

Dem模块提供了一个monitor debounce算法,若配置成DemDebounceMonitorInternal,Dem模块不能为每个event使用内部debounce机制,其中monitor就不可以上报DEM_EVENT_STATUS_PREFAILED和DEM_EVENT_STATUS_PREPASSED状态。

当调用Dem_PreInit函数和清除DTC(14服务)时,Dem模块会复位内部debounce算法及相关参数。

总结

本章节主要描述了Dem模块Debounce策略和常用的几种Debounce算法的使用方法和Autosar配置。这些功能仅仅是Dem模块的一小部分,同时我们还需要了解Dem模块其他功能和Autosar工具的配置选项,这样才能灵活使用Autosar工具配置和调试相关的BUG。

本章节主要参考Autosar标准的Dem模块相关文档和ISO14229标准等。

### AUTOSAR DEM 模块中的去抖动处理实现方法 在 AUTOSARDEM (Diagnostic Event Manager) 模块中,去抖动机制用于防止由于瞬态条件引起的错误诊断状态报告。当监测到某个事件的状态变化时,可能并不是真正的故障发生,而是由暂时性的干扰引起。为了确保只有确实存在的问题才会被记录为 DTC (Diagnostic Trouble Code),DEM 提供了一种称为“Debouncing”的功能。 对于某些特定类型的监控器(Monitor),如果其内部已经实现了自身的去抖动逻辑,则无需再利用 DEM 自带的去抖动算法[^3]。这意味着这些自定义或高级别的监视组件可以直接向 DEM 报告最终的结果——即 `FAILED` 或者 `PASSED` 状态,而不必经历额外的时间延迟或其他形式的验证过程。 然而,在其他情况下,DEM 可以为那些没有内置此能力的标准监测单元提供必要的过滤手段。通过配置相应的参数集 (`DemConfigSet`) 和通用设置 (`DemGeneral`) 中的相关选项,可以激活并调整 DEM 内部的去抖动特性[^2]。这通常涉及到设定时间窗口以及确认次数等阈值,使得在一个指定时间段内多次检测到相同异常情况之后才正式认定该状况有效,并触发进一步的动作如存储 DTC 到 ECU 存储器里。 ```c // 配置 DEM 去抖动参数的例子 { uint8_t debounceCount; // 连续失败计数门限值 uint16_t debounceTimeMs; // 时间间隔(ms),在此期间内连续出现debounceCount次相同的错误则认为是真的故障 } ``` #### 关键点总结: - 对于具有自己去抖动策略的 Monitor 组件来说,它们会直接上报 `FAILED` 或 `PASSED` 结果给 DEM。 - 如果 Monitor 不具备自己的去抖动方案,则可通过 DEM 来完成这一任务,具体取决于如何配置 `DemConfigSet` 和 `DemGeneral` 参数来满足实际需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值