UDS诊断协议(十六)详解故障码DTC的重要参数-故障检测计数器FDC
今天详细聊聊ISO 14229-1中对DTC的FDC(故障检测计数器)的定义和其计数逻辑。
车辆实际运行的环境非常复杂,外界电磁干扰、电瓶电压波动、车辆颠簸等,都可能导致偶发一些故障,这些故障可能只出现一瞬间或极短时间,然后又恢复了,且对车辆正常功能没影响,那这些就没必要报故障码出来。为了减少车辆在实际使用过程中误报故障码DTC,在前期设计时都会考虑故障检测的防抖。
比如之前文章我们举例的RLS模块丢失通讯的DTC,定义检测周期为100ms,但不是100ms内检测到RLS报文丢失就会马上报出该DTC,而是做了防抖策略。要连续10次检测,即1S内都收不到RLS的报文才会报出此DTC。
FDC就是实现防抖的一个重要参数。
涉及参数及术语
Operation Cycle:操作循环(参考文章https://mp.weixin.qq.com/s/sMW-PzojWRPRegFq9e8l3w)本例子中涉及连续两个操作循环。
Test Sample:测试样本,即对于该故障事件的一次检测。例如之前文章(参考文章https://mp.weixin.qq.com/s/RgAdm4_ZrlJ5juxrWJQBnw)我们提到的RLS模块丢失的DTC,100ms检测一次,这每一次检测即为一个测试样本。本示例中为50ms一个测试样本。
Fault detected at moment of test run:置1表示本次检测结果为有故障。
Fault not detected at moment of test run:置1表示本次检测结果为无故障。
Fault Detection Counter:即该DTC的故障检测计数器FDC,FDC的值根据单次检测的结果来变化。单次检测为有故障时,FDC增加step up的值,单次检测为无故障时,FDC减少step down的值。当FDC的值≥127时,该DTC的状态位bit0置1,报出该DTC当前故障。当当FDC的值≤-128时,该DTC的状态位bit0置0,当前故障消失。
step up:本例中设置为26。
step down:本例中设置为13。
FDC数值跳变逻辑
根据每个测试样本的检测结果,FDC开始计数。到1位置处,FDC达到了-128,即这个DTC在当前操作循环第一次有了防抖后的检测结果,且结果为“通过”。bit0为0,bit4、bit6从1变为0。
到2位置处,测试样本检测到失败,FDC直接从0开始增加26(一个stepup的值)。后续几个测试样本有成功有失败,FDC有增有减,但都没有达到127的阈值,所以DTC的bit0一直还是0。
到3处,FDC达到了127,判断产生了当前故障。因此DTC的bit0和bit1置1。
在4处,由于本例中的DTC设置的confirmed threshold为1,所以bit0置1时,bit3也置1。
在5处,测试样本重新变成通过,FDC开始递减。(FDC可以从当前数字开始递减,也直接从0开始递减,车企或ECU厂家可自定义)
在6处这段时间,由于外部环境变化,该DTC的检测条件不再满足,所以没有测试样本的结果,FDC以及DTC的状态位都保持不变。
在7处,由于故障恢复,FDC递减到了-128,判定当前故障消失,DTC的bit0从1变为0。
在8处,开始了第二个操作循环,新的操作循环FDC初始化从0开始。此时不满足DTC检测条件,所以FDC无变化。
在9处,经过多个测试样本的检测,FDC递减到了-128,判定当前无故障,即这个DTC在当前操作循环第一次有了防抖后的检测结果,且结果为“通过”,DTC的bit0为0,bit6变为0。
总结
每个小的检测周期为一个测试样本,测试样本的结果直接影响FDC的计数,而FDC的数值直接影响DTC状态位(主要是bit0)的变化。
----------------------------------------------------------------------------------------------------------------------------
博客可能不经常更新,可以搜索关注文中图片水印的账号,主要在此账号更新。谢谢~
