车机技术之OBD(在线诊断系统)
OBD是一种装置于车中用以监控车辆运行状态和回报异常的系统,可于车辆的子系统出现问题时,产生故障代码和提醒讯号通知车主和车厂诊断维修。
车上诊断系统的设计约起于1980年代中期的美国,当时发现配备空燃比控制系统的车辆如果排放污染超过管制值时,其含氧感知器通常也有异常,由此逐渐衍生出设计一套可监控各排放控制元件的系统,以早期发现可能超出污染标准的问题车辆。当前已经发展到了可以进行整车诊断的地步,不再仅仅是排污监测了。
大概在1988年,美国汽车工程师学会(SAE)建议各汽车生产商使用标准化数据传输接口和故障信号代码(DTC),随后一个成为OBD-I的标准诞生。因为该标准太过粗糙,无法统一化,所以1996年前后出现由SAE定义的OBD-II标准。2010年开始,所有美国在售车辆必须配置HOBD系统,2008年开始,所有中国在售车辆必须配置GB18352标准的OBD系统。
OBD协议栈
因为OBD的底层协议不同以及有SAE和ISO两个组织在定义标准,所以导致有一系列相关协议,如下图所示,现在主要用的是ISO15765-4加上SAE J1979组成的栈,可参考SAE标准。
物理接口定义
在J1962标准中定义了OBD-II接口的物理信号(注意和上面协议栈中的Layer 1不同,相当于把上面所有Layer 1组合而成),如下图所示,可以看到其中留了不少接口引脚给厂商自定义使用,从而也使得OBD诊断设备在各车厂间不完全通用。其中关键的是CAN线、ISO9141-2 K-Line线、J1850总线,三个是同一个作用,就是读取故障信息及车辆的部分实时运行信息,只不过通讯协议不同而已。现在CAN基本普及,其他两种难以见到了,CAN方式的OBD直接连接到CAN总线的网关上。
基于CAN的OBD通信流程
最基本的通信流程时序图如下:
消息格式
基于CAN的OBD通用消息格式如下图所示(具体每个消息的消息格式请参考协议),请求消息最长7个字节,响应消息长度随消息类型不同而不同(每字节中最高位MSB为第7位,最低位LSB为第0位)。
请求消息数据部分格式:
正常响应消息数据部分格式:
错误响应消息数据部分格式:
基于CAN的OBD操作模式(即OBD可实现的功能)
协议中一共定义有10种操作模式,汽车制造商并不需要支持所有的模式,每个制造商也可以自行定义额外的模式,这10种模式如下:
01. 显示当前数据(比如:发动机转速、车速、档位、电池电压、油量、油耗、总里程、本次里程等等)
02. 显示冻结帧数据
03. 显示存储的故障诊断代码
04. 清除故障码和存储值
05. 测试结果,氧传感器监测(只有CAN能测试)
06. 测试结果,其他组件/系统监测(测试结果,氧传感器监测只有CAN能测试)
07. 显示待定诊断故障代码(只能在当前或最近的驾驶周期中检测)
08. 诊断组件/系统的控制操作
09. 显示车辆信息(比如:车厂、型号、品牌、车架号、发动机号等等)
0A. 永久性故障库(清除的DTC)
OBD诊断码DTC
所有OBD诊断码加起来差不多有1000多种,具体可参考协议定义,下图举其中的几个例子值:
实物形式
手持式(直接插入车上OBD接口,在自身显示诊断数据):
盒子式(插入车上接口,然后通过串口、蓝牙、wifi等把数据发送到电脑、手机等设备上):