做ECU故障诊断,你弄明白了DTC是什么吗?

文摘   2025-01-23 06:51   上海  

好长时间没有做与DTC开发的工作了,恰逢最近开始需要做DTC的软件开发与测试内容,借此回顾下DTC的基础内容,比如什么是DTC,DTC是什么等内容。

source:具有高级功能的经济实惠的汽车诊断读码器 (fixmyoldride.com)

为什么这么说呢?我发现做软件开发的人不会关注DTC是什么,只会关注哪个故障对应哪个DTC;我发现做系统的人可能会关注DTC是什么,因为有时候想拒绝或纠正主机厂的DTC变更,所以要掌握DTC的内容;我也发现主机厂做诊断的人就需要懂DTC是什么了,因为要做出一个完整且系统的诊断系统,那必须得把故障层次分清楚,得把DTC的定义吃透才行。了解总比不知道好,话不多说,那直入话题:

1 DTC是什么

DTC的全称是Diagnostic Trouble Code,即诊断故障码,它是由各个ECU(电子控制单元)识别的故障状态的数字通用标识符。

汽车在运行出现故障,维修人员使用诊断仪器直接读取当前车辆的故障码,就可以获知是出了什么故障。这是因为汽车各个ECU在实时监控汽车的运行情况,当出现故障时会将相关信息进行存储,这样维修人员通过诊断仪发送UDS 19服务请求读取故障信息,ECU就会响应对应的已存故障信息。而DTC就是这些故障信息的身份ID,一个故障对应一个DTC码,通过一个DTC码就可以知道这个故障是否发生,以及还有哪些信息。

1)DTC的定义

从最简单的入手,看看DTC长什么样,如下所示:

  • P0127 -- 代表进气温度过高;
  • B0001 -- 代表驾驶员正面第1阶段展开控制;
  • C0031 -- 代表左前轮速度传感器;
  • U0105 -- 代表与喷油器控制模块通讯丢失。

为什么是这样?标准协议规定DTC由一系列的字母和数字组成,可通过ISO15031-6对DTC的定义来详细了解:

Source:ISO15031-6
对于上图的翻译:DTC使用5个字符来表示,每个DTC占用2个字节数据长度。其中:
第1个字符占用2位数据长度,表示故障所属系统,每个数值的意义如下:
  • 00 = P,代表动力总成(发动机和传动系统)故障;
  • 01 = C,代表底盘故障,如制动系统或底盘控制模块故障;
  • 10 = B,代表车身故障,如车身电子系统故障;
  • 11 = U,代表网络通信故障,表示车辆各系统之间的通信故障。

第2个字符占用2位数据长度,表示故障类型,每个数值的意义如下:
  • 00 = 0,代表ISO/SAE标准定义的故障码;
  • 01 = 1,代表汽车制造商自定义的故障码;
  • 10 = 2,ISO/SAE预留;
  • 11 = 3,ISO/SAE预留。

第3个字符占用4位数据长度,表示故障所属的子系统以动力系统为例,

  • “0” 表示燃油和空气计量辅助排放控制整个系统;

  • “1” 表示燃油和空气计量系统;

  • “2” 表示燃油和空气计量系统(喷油器)等。
第4,5个字符占用1字节数据长度,表示具体故障对象和类型,以网络系统为例,
  • U0101,后2个字符01代表的具体故障对象和类型是与TCM通讯丢失;
  • U0302,后两字符02代表的具体故障对象和类型是与变速器控制模块软件不兼容;
  • U0405,后两字符05代表的具体故障对象和类型是从巡航控制模块接收的数据无效。

以上就是对于DTC的基本认识,可以这么理解DTC就是故障类型的"身份ID",一个DTC映射一个故障类型。

2) DTC格式

ISO-14229-1,SAE J2012 OBD DTC和SAE J1939-73都对DTC的格式有明确定义,归纳起来可以将DTC格式分为non OBD和OBD两种,如下所示:

对于上述两种格式,具体怎么区分?通过DTC格式标志字来区分:

在OBD诊断当中用的最多的格式是SAE_J2012-DA_DTCFormat_00,即上面的OBD的DTC格式;在UDS诊断当中用的最多的格式是ISO_14229-1_DTCFormat,即上面的non OBD的DTC格式。

所以设置好DTC格式标志字,就定义好了哪种DTC格式,当然不同OEM可能会在这个标准的基础上添加自定义的DTC,此时需要参考该OEM提供的DTC解释表或相关文档。

在DTC的定义使用的都是OBD格式的DTC,并省略了低字节(0x00),而在个人在实际工作接触基本上是non OBD格式的DTC。因此接下来主要介绍non OBD格式的DTC,其包含高中低3个字节数据,其中:
  • 高字节和中字节与OBD格式的DTC定义一样,对应5位标准故障码;

  • 低字节表示故障类型,包含了DTC故障类别DTC故障子类型,它代表了电路或系统中的故障类型比如常见的 timeout 应该用 0x87,信号无效为 0x81 等,具体不同的编码代表不同的详细故障情况,一般OEM都会提供其每个编码的具体含义。

DTC故障类别的定义如下:

  • 一般电器故障:编码为 0x01,通常指车辆电气系统中一些较为普遍的电气类问题,涉及电路、电源、用电设备等方面出现的故障。比如电路出现间歇性故障,时而导通时而断开;又或者电路中的某个电器元件损坏而导致无法正常通电或断电控制,如车灯不亮、喇叭不响、电动车窗无法升降等。

  • 一般信号故障:编码为 0x02,主要是指车辆各系统之间用于传输信息的信号出现了问题,包括信号的产生、传输、接收等环节出现异常,比如传感器损坏无法准确测量并输出正确的信号;信号传输线路断路、短路、信号干扰等导致信号在传输丢失、失真或错误;ECU故障而无法正确处理接收到的信号。
  • FM(调频)/PWM(脉宽调制)故障:编码为 0x03,指调频或脉宽调制信号出现问题,如信号频率异常、占空比错误等,导致相关系统无法正常工作,像发动机的电子节气门控制可能因 PWM 信号故障而无法准确控制节气门开度。
  • 系统内部故障:编码 0x04,涉及系统内部的非特定硬件或软件问题,可能是系统逻辑错误、内部数据传输故障等,比如ECU程序运行出现异常,但又不属于明确的软件编程或硬件损坏问题。
  • 系统编程失败:对应 0x05,通常是系统的软件编程过程出现错误,如ECU程序写入失败、配置参数编程错误等,可能造成控制单元无法按照预期功能工作。
  • 基于算法的故障:编码为 0x06,意味着系统中基于算法的计算或逻辑判断出现错误,如ABS控制算法在计算车轮转速、制动力分配等参数时出现错误,导致 ABS 功能异常。
  • 总线信号 / 消息故障:0x08 表示总线信号或消息方面的故障,如 CAN 总线通信中信号丢失、数据错误、帧格式错误等,会影响多个控制单元之间的通信,进而导致车辆多个系统出现故障。
  • 部件故障:编码 0x09,泛指某个具体部件出现问题,但不属于前面特定的电路、传感器、执行器等故障类型,可能是部件本身的质量问题、磨损、老化等导致的故障。

接下来对 DTC故障子类型 稍作说明,假设故障类型为一般信号故障,那么DTC故障子类型可能有以下多种:

  • 0x21 Signal Amplitude < Minimum:信号幅值小于最小值,意味着信号的强度或幅度低于系统正常运行所需的最低阈值,可能导致接收端无法正确识别信号。

  • 0x22 Signal Amplitude > Maximum:信号幅值大于最大值,即信号强度或幅度超出了系统能够处理的最大范围,可能使信号失真或对接收设备造成损坏。
  • 0x23 Signal Stuck Low:信号卡住低,表明信号一直处于低电平状态,无法按照正常的逻辑或规律变化。
  • 0x24 Signal Stuck High:信号卡住高,与 Signal Stuck Low 相反,信号一直保持在高电平状态,不能正常变化,影响系统的正常判断和运行。
  • 0x25 Signal Shape / Waveform Failure:信号形状 / 波形故障,说明信号的波形不再符合正常的标准形状,可能出现畸变、变形等情况,会使信号携带的信息产生错误或丢失。
  • 0x26 Signal Rate of Change Below Threshold:信号变化率低于阈值,即信号的变化速度过慢,低于系统要求的最低变化速率,可能导致系统无法及时响应或正确处理信号。
  • ......

这就是关于低字节定义的介绍,这里通过两个DTC巩固下对这个概念的理解,比如:
  • B0039-10 代表第1排右前方阶段部署控制,一般电器失效;

  • C0031-23 代表左前轮速传感器 ,一般信号故障, 信号卡在低位。

3)DTC的16进制表示

最后再了解一个DTC的概念,DTC数值的表示形式。通过诊断通信获取的DTC通常是16进制数值,而非5个字符形式,这意味着需要将字符形式转换为16进制,具体转换操作如下:

通过上述数值转换方法就定义出了下表所示的Code categories与Hex value的对应关系。

2 小结

到此,就比较完整介绍DTC是什么,就是当你看到一个DTC码,你大概就是它为什么长这样,以及它是哪种格式,它代表了怎样的故障,不管它是字符形式还是16进制形式。下篇文章就开始介绍如何来获取DTC。


创作不易,欢迎点赞再看收藏关注


汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车从业人员。

谦益行
分享汽车研发日常,助力你我共同成长。
 最新文章