一、故障码存在的意义
我认为故障码存在的意义主要有以下几点:
1、下线检测,对于一辆车的零部件的开发、系统集成、整车组装,其中涉及的流程之长、零件数量之多,可以说是相当的复杂;为了保证最终车辆下线,并且能够安全的上路,这就要在上路之前保证每个零件本身和零件之间必须保证没有任何问题,因此故障码检测就应运而生;不仅保证电子元器件本身不存在问题,而且保证电子元器件间也是通信正常,并保证最终车辆的安全上路。
2、故障维修,车辆在整个使用的生命周期中,所处的环境也是相当的复杂且恶略;对于当前车辆复杂的线路来说是一项极大的挑战,同时在出现问题后问题的排查也是相当的困难,这时候我们就可以通过故障码来进行查询故障位置,进行快速定位和解决。
二、故障码的分类
日常我们常见的故障码主要由四个字节组成,前面三个字节表述的是故障码发生的位置最后一个字节表明的是这个位置当前是否存在故障,以及故障状态是什么。
首先说前面表明故障位置的3个字节的说明,说到故障位置,说到这里,那我们就绕不开故障码一定要说的P、C、B、U码;简单来说,这四个字母的来源即是对应车辆的四个组成部分,分别是Power(动力),Chassis(底盘)、Body(车身)、Network and vehicle Integration(U:网络和车辆集成)。
说到这里可能大家会比较奇怪,为什么我说的故障码是由4个byte组成,而实际上我们看到的故障码都是Pxxxxxxxx、Cxxxxxxxx、Bxxxxxxxx、Uxxxxxxxx,这就涉及到了报文表述和人工辨识。为了方便大家的读取,我们加了PCBU码进行分类,更加快速的让维修人员对问题进行检查和定位。因此就出现了对应关系,如下图:
byte 0 | byte 1 | byte 2 | byte 3 | |
| bit0 - bit7 | bit0 - bit 7 | bit0 - bit 7 | bit0 - bit 7 |
P | 0x00 - 0x3F | 0x00 - 0xFF | 0x00 - 0xFF | 0x00 - 0xFF |
C | 0x40 - 0x7F | 0x00 - 0xFF | 0x00 - 0xFF | 0x00 - 0xFF |
B | 0x80 - 0xBF | 0x00 - 0xFF | 0x00 - 0xFF | 0x00 - 0xFF |
U | 0xC0 - 0xFF | 0x00 - 0xFF | 0x00 - 0xFF | 0x00 - 0xFF |
从上表可以看出,PCBU码在byte0的分布主要为P(00-3F)、C(40-7F)、B(80-BF)、U(C0-FF)。对于byte1和byte2并没有什么特殊的,除了行业规定的之外,都是各个主机厂自主定义的一些故障码。但是对于最后一个byte3,则是对这个故障码的定义,是当前故障、历史故障、还是其他的,专业的定义叫做DTCStatusMask,表示当前的故障码状态。
我们常用的故障码状态主要有bit0、bit3、bit5,主要表示当前故障、历史故障码、上次清除后问题故障。
statusOfDTC(DTC 状态):比特域名 | 比特编号 | 比特状态 | 说明 |
testFailed(测试失败) | 0 | 0 | 发出请求时 DTC 未发生失败 |
testFailedThisOperationCycle ( 本操作循环中测试失败) | 1 | 0 | 当前操作循环中 DTC 从未发生失败 |
pendingDTC(待定 DTC) | 2 | 0 | 当前或前次操作循环中 DTC未发生失败 |
confirmedDTC(已确认 DTC) | 3 | 0 | 发出请求时 DTC 未得以确认 |
testNotCompletedSinceLastClear (自上次清除后测试未完成) | 4 | 0 | 自上次故障诊断码清除后测试已完成 |
testFailedSinceLastClear (自上次清除后测试失败 ) | 5 | 0 | 自上次故障诊断码清除后 DTC 测试从未发生失败 |
testNotCompletedThisOperationCyce(本操作循环中测试未完成) | 6 | 0 | 本操作循环 DTC 测试完成 |
warningIndicatorRequested ( 请求警告指示灯) | 7 | 0 | 服务器术请求激活警告指示灯 |