Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

1.2 听诊器到故障灯——汽车诊断的第一次哭喊

医生的第一个工具为什么是听诊器

1816年,巴黎。一位名叫雷奈克(René Laennec)的法国医生面对一个难题:一位年轻女性病人需要听诊心音,但当时的常规做法是医生直接把耳朵贴在病人胸前。这在生理上可行,在礼仪上尴尬。

雷奈克卷起一本笔记本,放在病人胸口。他惊讶地发现,通过纸卷听到的心音比直接贴耳更清晰。不是因为纸卷有魔法——是因为固体传导的声波比空气更集中。听诊器诞生了。

一百多年后,当一台故障ECU被送进维修车间,技师面对的是一个比那位女病人更沉默的系统。病人至少还会说“我胸闷“,ECU不说一个字。


1950年代:工程师第一次在发动机里埋了眼睛

汽车上第一个“诊断传感器“是什么?

不是O2氧传感器。不是爆震传感器。不是进气温度传感器。事实上——所有这些传感器最初的使命都不是为了诊断,而是为了执行控制。O2传感器告诉ECU混合气是过浓还是过稀,用来调整喷油量;不是用来判断“三元催化器效率够不够“。爆震传感器告诉ECU退点火提前角,不是用来存DTC。

第一个以“监视自身状态“为目的的存在,始于充电系统和机油压力

1950年代,车载电系统已经复杂到足够出问题——发电机不发电、机油泵不建压——而驾驶员根本感知不到直到发动机抱死。工程师在两处埋了开关:一个双金属片感知机油压力过低时接通,一个电压阈值电路监测发电机输出是否正常。接通时,仪表盘亮起一盏小灯。

这就是仪表盘上那盏红色机油壶灯和电池灯的由来。

核心洞察:最早的“诊断能力“只有一个比特。“机油压力低”=1,“正常”=0。没有故障码,没有快照,没有“发生的时候发动机转速多少“——只有一盏灯。但这一比特已经完成了诊断系统最基本的使命:把系统内部的一个二进制状态,翻译成人眼能在仪表盘上看到的信号。


1980年代:当ECU有了微处理器,它就开始记账

燃油喷射、点火正时、EGR废气再循环——1980年代的发动机电子控制系统把一堆传感器和执行器联到了一起。ECU里住着一颗8位、16MHz的微处理器——这颗芯片每秒读几千次传感器、算几十次喷油量、更新几十次点火角——但只在很少的时刻真正“思考“:等一下,这个传感器值合理吗?

第一批DTC正是在这种“喘口气“的时刻诞生的。

进气温度传感器——热敏电阻,负温度系数,-40°C时约45kΩ,100°C时约185Ω。ECU通过片上ADC读电阻值、换算温度。有一套很简单的验证逻辑摆在那里:

if (adcReading < MIN_VALID_ADC) → 对地短路 → 存一个内部故障标志
if (adcReading > MAX_VALID_ADC) → 对电源短路或开路 → 存另一个内部故障标志

这是汽车史上的第一个DTC。存储在ECU的RAM里——几十字节的PPRAM(Parameter Plus RAM),用后备电容维持,熄火后保活一夜(以Motorola 68HC11等典型8位MCU为例,PPRAM通常为64~128字节)。没有诊断仪能读到它。技师只能在特殊的诊断模式下,让ECU把8位故障字节编码成特定的输出波形——比如读取节气门位置传感器的电压输出是否跳变到0V还是5V——间接判断“ECU是知道你传感器坏了不是在怠工的。

那个时代的人类诊断流程是这样的:点火、连续踩油门(五秒内踩多少次)、观察发动机故障灯闪烁的次数和间隔。长闪=十位数字,短闪=个位数字。用车的车主手册后面有一张对照表——代码12=正常、代码13=氧传感器信号过慢、代码14=水温信号过慢、代码15=水温信号过快……

通用汽车的ALDL (Assembly Line Diagnostic Link)接口——串口端子藏在方向盘下面——技师需要用一根跨接线短接端子的A和B,故障灯才开始闪烁工厂预置的“快码“。克莱斯勒的做法是循环发动机点火钥匙五次开关:开-关-开-关-开,灯开始闪码。福特的方法是在诊断口上用模拟电压表读数(跳表针的节奏)。

核心洞察:一个不能为人类感知的内部状态,是没有诊断价值的。ECU早在1980年就已经知道了“传感器有开路故障“——但它不知道怎么告诉人类。“知道“和“告诉“之间,隔着一整条表达和传输链。 表达需要编码(用什么方式反馈信息),传输需要物理接口(诊断口)。如果这两样没有准备,你再强的ECU再精确的内部判断——只是一个孤独的、在心里知道却不能说出口的病人。


为什么只亮灯,不多说一个字

你可能会想,ECU既然有微处理器,为什么不直接输出一个字节的故障码到串口?这有多难。

答案是——当时根本没多少人想明白为什么需要这么做。汽车发动机控制系统是给驾驶员开的——不是为了给技师修的。这就像最早的ECU设计者不会在一开始就想着“得给维修站留个故障码接口“一样——功能永远追随需求演进。

1980年代汽车电子工程师面对的核心矛盾不是“车能不能自诊断“——他们面对的核心矛盾是:

  • 8位微处理器的ROM只有8KB,已经塞满了点火和喷油的计算逻辑;
  • 在RAM里分配几个字节计故障码,行。再浪费宝贵的代码空间定义一个复杂的诊断通讯协议,不是不行——是当时没有足够强的需求驱动
  • 而维修站端——扳手、听诊器、真空压力表、模拟电压表才是他们信任的工具。你就算把ECU的故障码通过串口打出来,技师也不一定信任——“会不会是ECU自己误报了?我用老方法再确认一遍靠谱。

所以早期汽车诊断能力的发展规律是:

第一步:ECU自己知道出问题了     ←  80年代初实现
第二步:亮一个警告灯        ←  80年代中期实现
第三步:闪码               ←  80年代末期,但各车厂私有格式
第四步:标准化串口读码     ←  90年代初OBD-I阶段,仍然各车厂私有

你现在回看这个过程,会觉得“为什么不一开始就做第四步“——但工程的演进不是按“最优解“走的,是按可被接受的成本可产生回报的需求走的。灯泡最便宜。闪码次之。私有串口成本可控但收益有限。标准串口的收益最大——但有需求冲突:谁来做标准?谁有这个权力?

核心洞察:标准不是技术问题,是政治问题。你不说服通用、福特、克莱斯勒坐在一起——单方面给雪佛兰做一个标准诊断口没有任何价值。因为技师不会为了你这一款车型专门买一根诊断线。标准的价值在于网络的规模效应——越多参与者说同一种语言,每一个参与者都越受益。但在参与者不情愿的情况下,必须有外部的力量来推动。


推动标准化的大手——不是车厂,是政府

加州,1960年代。洛杉矶盆地的光化学烟雾已经浓到能让人眼睛灼痛。居民在黄昏时分能看到一层黄色的霾笼罩城市。政府把霾采样器放在城市的不同地方,发现罪魁祸首是汽车尾气中的氮氧化物(NOx)和碳氢化合物(HC)在阳光下反应生成的臭氧和PAN(过氧乙酰硝酸酯)。

这不是环境问题。这是公共健康问题。

1966年,加州制定了全球第一个汽车排放标准。1970年,美国联邦《清洁空气法》出台,授权EPA制定全国范围的汽车排放限值。催化转换器被强制装到每一辆新车上。引擎控制不再是“怎么开得舒服“——是“怎么排得干净“。而为了确保催化转换器和氧传感器正常工作——ECU必须自己监视排放系统是否在工作。

这不是车厂自愿的。是法规强迫的。

一辆车下线后跑了几万英里,三元催化器可能劣化、氧传感器可能中毒、EGR阀可能卡住——这些问题不影响动力性能(或影响得不太明显),驾驶员根本感觉不到——但尾气已经超标了。法规的解决方案很简单但极其有效:如果在使用过程中排放系统故障,ECU必须亮灯通知驾驶员去维修。

这就是MIL(Malfunction Indicator Lamp)——那盏后来通用的“Check Engine“黄灯的来历。

它为什么是黄色的?不是红色的?因为红色=紧急停车(机油压力为0、水温120°C),黄色=尽快维修(排放超标不会立刻把你抛在高速上,但不去修下次年检可能不过)。

核心洞察:汽车诊断的第一推动力不是“让维修更高效“。是法规要求你保证车辆的排放系统在整条生命周期内有效工作——而保证的办法只能是让ECU持续监视排放系统并向驾驶员报告异常。几万块钱的诊断仪、几百页的UDS标准——它们的根源,就是40年前加州那条黄烟滚滚的高速公路。


闪码时代为什么被遗忘——或者说,被原谅

闪码这件事本身非常聪明——它用最少的硬件成本(就一个灯),把最多的信息传出来(闪烁的次数和节奏)。但它有五个致命缺陷:

  1. 一位技师的记忆是有限的。 闪码一次只显示出几十个故障码中的一两个。你记不住,只能每次闪一个、看着、记录——再闪一次、确认——再闪一次、再确认——再读下一个。读取五个故障码可能要花5分钟、反复确认——这还不算可能的信号抖动造成的解析错误。

  2. 错误率不是零。 人不是示波器。光线、眨眼、手抖——任何一次错过闪烁,这个码就串了。

  3. 信息量太小。 一个8位的故障码(7位=故障代码,1位=当前/历史标志)——只能区分最多127种故障。对发动机本身来说勉强够——但如果你还要诊断ABS、气囊、车身控制器——不行。

  4. 没有上下文。 闪码只告诉你“哪个传感器出了故障“,不告诉你故障是什么类型(短路/开路/信号不合理),不告诉你什么时候发生的、当时其他参数是多少。对新一代含有几十个传感器的ECU来说,这等于什么也没说。

  5. 不可扩展。 如果有两个ECU同时在闪光,怎么分辨哪个是发动机故障码哪个是ABS故障码?如果一辆车有30个ECU怎么办?

闪码不是被时代淘汰的——它是被时代超越的。当ECU的能力越过某个临界点——内存大了、芯片快了、传感器多了、故障模式复杂了——闪码这条“最朴素的通信方式“就跟不上了。不是因为闪码错了,是因为世界变了。


本篇小结

  1. 最早的汽车诊断能力只有一比特:机油灯、充电灯——接通=1,断开=0。这一比特已经完成了诊断的最基本使命:把内部状态翻译成人眼可见的信号。
  2. ECU在1980年代就有了内部自检能力——但当时没有标准接口把故障码传出去。机械师的工具仍是扳手、听诊器、真空压力表——他们不信任电子诊断。
  3. 闪码是第一个大规模使用的汽车诊断通信方式——通过故障灯的闪烁次数编码故障码。它解决了“传出来“的问题,但受限于信息量、准确性和可扩展性。
  4. 加州光化学烟雾事件是诊断标准化最关键的外部推动力。如果没有法规强制ECU持续监视排放系统,就不会有统一的MIL、统一的故障码格式——也就不会有后来的UDS。

【下集预告】:1988年,加州空气资源委员会做了第一件事——要求所有加州销售的1970年后的车都要有排放检测接口。结果很惨——每个车厂都搞了自己的私有接口和私有故障码。如何不重复闪码时代的教训?巴别塔的教训——OBD-I的尴尬:接口统一了,语言没统一。