当前位置: 首页 > news >正文

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数值跳变逻辑

  1. 根据每个测试样本的检测结果,FDC开始计数。到1位置处,FDC达到了-128,即这个DTC在当前操作循环第一次有了防抖后的检测结果,且结果为“通过”。bit0为0,bit4、bit6从1变为0。

  2. 到2位置处,测试样本检测到失败,FDC直接从0开始增加26(一个stepup的值)。后续几个测试样本有成功有失败,FDC有增有减,但都没有达到127的阈值,所以DTC的bit0一直还是0。

  3. 到3处,FDC达到了127,判断产生了当前故障。因此DTC的bit0和bit1置1。

  4. 在4处,由于本例中的DTC设置的confirmed threshold为1,所以bit0置1时,bit3也置1。

  5. 在5处,测试样本重新变成通过,FDC开始递减。(FDC可以从当前数字开始递减,也直接从0开始递减,车企或ECU厂家可自定义)

  6. 在6处这段时间,由于外部环境变化,该DTC的检测条件不再满足,所以没有测试样本的结果,FDC以及DTC的状态位都保持不变。

  7. 在7处,由于故障恢复,FDC递减到了-128,判定当前故障消失,DTC的bit0从1变为0。

  8. 在8处,开始了第二个操作循环,新的操作循环FDC初始化从0开始。此时不满足DTC检测条件,所以FDC无变化。

  9. 在9处,经过多个测试样本的检测,FDC递减到了-128,判定当前无故障,即这个DTC在当前操作循环第一次有了防抖后的检测结果,且结果为“通过”,DTC的bit0为0,bit6变为0。

总结

每个小的检测周期为一个测试样本,测试样本的结果直接影响FDC的计数,而FDC的数值直接影响DTC状态位(主要是bit0)的变化。

----------------------------------------------------------------------------------------------------------------------------

博客可能不经常更新,可以搜索关注文中图片水印的账号,主要在此账号更新。谢谢~

http://www.jsqmd.com/news/672919/

相关文章:

  • 从PS2.0数据集出发:聊聊自动驾驶中停车位检测的‘脏活累活’与工程挑战
  • Steam成就管理器:5分钟掌握游戏成就自由掌控的终极指南
  • 长沙金海中学答题:中天电子实现精准调控
  • C# 14 AOT部署Dify客户端,你还在用dotnet publish --self-contained?这6个被微软文档隐藏的--aot选项正在重构企业交付标准
  • 百度网盘秒传链接网页工具:3步搞定全平台文件极速分享
  • C# Blazor面试必考TOP12题型深度拆解(含MAUI互操作、JS隔离沙箱、SignalR流式响应全场景代码)
  • OpenCore Auxiliary Tools:3步搞定黑苹果配置的终极图形化工具
  • 从‘浪费生命’到‘轻松驾驭’:我的NRF24L01/SI24L01调试心路与替代方案盘点
  • STM32 RTC实战:从GPS模块获取UTC时间,自动校准并显示北京时间的全流程指南
  • 百度网盘下载加速全攻略:3步解锁满速下载的免费开源方案
  • DeepSeek总结的DuckDB internals 的 设计与实现 (DiDi)
  • 从π的无穷乘积到‘点火失败’:Wallis公式背后的数学简史与思想演变
  • Android14 Launcher3开发实战:用SurfaceControl实现跨进程动画的5个关键技巧
  • MusicBee歌词同步神器:3步解锁网易云音乐海量歌词库的专业指南
  • 文献管理工具四强争霸:EndNote、Zotero、Scholaread、NoteExpress 功能横评
  • D3KeyHelper终极指南:如何构建暗黑3智能战斗自动化系统
  • Windows Defender 四层防护解除技术深度解析:defender-control 开源项目完全指南
  • 4.16日志
  • 2026届必备的降AI率网站推荐榜单
  • 如何解决Windows硬盘变成了空白
  • DeEAR效果对比展示:原始语音 vs TTS合成语音在DeEAR三维度评分上的显著差异
  • G-Helper:华硕笔记本性能调校的轻量级革命,告别Armoury Crate臃肿体验
  • 别再死记硬背公式了!用MATLAB/Simulink手把手仿真PMSM的SVPWM(附模型文件)
  • GNU Radio OOT模块开发避坑指南:从gr_modtool到CMake编译的完整流程(附3.8/3.9版本差异)
  • 5分钟搞定:大气层Atmosphere破解系统新手配置全攻略
  • PZEM-004T v3.0 Arduino库终极指南:轻松实现精准电力监控的完整方案
  • 如何在macOS上打造完美音乐体验:LyricsX歌词神器完全指南 [特殊字符]
  • C# Blazor全栈开发终极护城河(2026唯一通过ISO/IEC 27001认证的Web框架实践手册)
  • docker containerd 14 - 小镇
  • 从零到一:手把手教你用Mellanox ConnectX-6和Ubuntu 22.04搭建RDMA开发环境(附避坑指南)