最近因为项目上的需求,接触了OBD诊断协议(整理一下笔记,以免忘记),从协议上说整体和UDS类似,关系如下图所示:
OBD用来做什么
UDS是通用诊断协议,OBD是偏向于排放标准,前者的使用范围更广一些,大家对于OBD接触会少一些,从我的理解,OBD主要用于如下事情:
1、用于监控整车基本信息参数,例如监控里程,车速,油门踏板位置等
2、用于监控排放相关参数,比如氧传感器等,以保证满足标准
3、用于故障DTC读取,以及DTC发生时的冻结帧信息(相当于UDS快照)
4、OBD控制,这部分中国似乎不涉及
OBD服务
OBD协议服务介绍
SID
Description
服务描述
0x01
Request current powertrain diagnostic data
请求动力系统当前的数据(具体单个定义的状态;发动机转速;动力域DTC数量;故障指示灯是否亮起等)
格式:SID + PID(Parameter ID),ISO 15031定义了部分PID内容,也做了相应预留
因为该协议具有法规效应,OBD协议定义了众多PID,实际应用中,PID分为两类:
1、用于表征具体的数据;
2、用于指出该ECU支持哪些PID(PID分别为0x00,0x20,0x40。。。读取其中一个PID后ECU返回4个字节结果,从返回的4个中每个bit表示其所对应的PID是否被支持。)
a) PID 0x00用于查询(0x01 -0x20)之间所支持的PID的参数;
b) PID 0x20用于查询(0x21 -0x40)之间所支持的PID的参数,以此类推;
举例:
Req:01 04 05 0d(每次可以请求一个,也可以请求多个,最多6个)
Res:41 04 xx xx 05 xx 0d xx(其中xx表示支持的PID的值,比如0d表示当前的车速,0d后面的xx的值是64,就对应的是100km/h)
0x02
Request powertrain freeze frame data
请求冻结数据帧
概述:对车车辆ECU出现并界定出某个故障,会将这个故障被/confirm/i时的相关状态信息“冻结”下来(UDS协议中叫快照信息) ,也就是行业内所谓的冻结帧,这些状态信息对车辆故障的确定非常重要,因为它们记录了车辆发生故障时的很多相关信息,冻结帧的载体同样是PID。
在ISO 15031协议中,Service02与Service 01命令的使用方法相同。只不过02读取的是故障发生时的数据,而01读取的当前数据,数据格式和含义都是相同的。与01命令不同的是02命令中多了一个frame字节:
需要注意的是在OBD协议中,用frame = 0x00来代表读取冻结帧。如果主机厂想自己再定义些什么其他的帧,或者多定义几个冻结帧,则可以给frame分配上其他的编号。OBD只规定了ECU需要为一个DTC存储冻结帧,当ECU中同时存在多个DTC时,就要根据优先级来判定存储谁的冻结帧了。模式2的作用就是为了快速方便的了解,故障发生时刻的一个状态,以此来分析、排查以及定位故障,从而能够有效地提高售后维护的效率。
0x03
Request emission-related diagnostic trouble code
用于读取存储在ECU中的与排放相关的“/confirm/ied”DTC
请求当前确认的故障(Comfirmed DTC) 的故障码,因此就可以了解车辆发生故障时,是哪个故障导致的,进而就可以根据该故障的机理来分析故障,维修车辆。
0x04
clear/Reset emission-related diagnostic information
清除ECU中存储的与排放相关的DTC故障信息。同时清除包括故障码、冻结帧、测试数据等排放相关的内存数据。
该服务格式请求是一个字节的04,响应是一个字节的44。只有在发动机没有运转的时候才可以执行这个服务,否则ECU应该给出NRC Ox22 (条件不满足)来拒绝该服务。
0x05
Request oxygen sensor monitoring test results
请求读取氧传感器的检测结果,监控氧传感器的测试结果。
因为氧气的浓度对燃烧过程有着重要的影响,因此对排放也有着重大的影响,因此有必要进行测试监控。一般支持模式6的话也可以通过模式6来代替模式5的功能(对于OBDonCAN来说不支持该服务).
0x06
Request On-board monitoring test results for specific monitored systems
请求指定监控系统的测试结果
车上不仅仅氧传感器需要监控,还有其他很多的地方需要监控,比如催化剂,蒸发系统等,都可以通过Service 06来进行监控
主机厂也可以根据需要去定义监控各个系统模块ID以及需要进行测试的参数TID。该服务用于请求对特定被监测系统的监测结果。OBD中定义了一个MId(Monitor ID)的表格,来标识被监测系统。一个ECU不一定需要支持所有的MID,获知具体支持哪些MID的方法与01和02服务所使用的方法相同。
06服务的response中,针对某一个MID,可能有多个TID (Test ID) ,因为针对一个系统可能有多个测试项目。TID表格也在OBD中定义。06服务的response格式固定,每个MID的每个TID由6部分组成,具体如下:
a) MID;
b) TID;
c) Unit And Scaling ID,用于标识这个TID的测试内容是什么,比如电压、时间、计数器之类的;
d) Test Value,实际测量值
e) Min.Test Value,这个测量值的最小值:
f) Max.Test Value,这个测量值的最大值;
0x07
Request emission-related diagnostic
trouble code during current or last completed driving
请求当前或上一驾驶循环检测到的排放相关的故障码
Service 07也是获取DTC,但是它和03服务区别在于,它用于获取在当前以及上一个驾驶循环中出现的处于
“pending”状态的DTC,而Service 03则获取的是confirmend DTC。
每次维修人员修理完之后,会清理故障,为了了解这个故障是不是真正解决了,就需要重新试一下,然后看这个故障是不是又会出现,如果是通过模式3去了解,则至少需要三个操作循环,而模式7则根据当前操作循环就可以知道。
0x08
Request control of on-board system, test, or component
请求控制在线系统或组件
用于对系统进行控制,进行元器件测试操作,它相当于UDS中的2F和31服务。
格式:SID + TID,注意这里TID与05和06服务的TID不同,在OBD中有一个专门给08服务使用的TID表格。
0x09
Request vehicle information
请求整车信息,比如VIN码,标定ID 标定校验ID ECU名称IPT等信息
格式:SID + InfoType(InfoType在OBD标准中有定义,并不是所有的InfoType都需要被支持,具体哪些InfoType被支持,可以采用和01服务相同的方法。)
0x0A
Request emission-related diagnostic trouble code with permanent status
请求排放相关的永久DTC
OBD的DTC
ISO15031-6里定义了DTC的相关信息,不同于UDS的是,OBD的DTC是2 bytes,一些由ISO法规直接定义,一些是OEM自己定义。
DTC的三个状态:
confirmed DTC,
经过了三个操作周期
pending DTC,
未到三个操作周期
permanent DTC,
永久存在的DTC
OBD口的定义
引脚Pin
描述Description
1
自由选择Reserved
2
(SAE J1850总线的正线)(BUS positive line of SAE J1850)
3
自由选择Reserved
4
底盘地Chassis ground
5
信号地Signal ground
6
CAN_H Can总线High
7
K线 K line
8
自由选择Reserved
9
自由选择Reserved
10
(SAE J1850总线的负线)(BUS negative line of SAE J1850)
11
自由选择Reserved
12
自由选择Reserved
13
自由选择Reserved
14
CAN_L Can总线Low
15
L线 L line
16
电池电压(terminal 30)Battery voltage( terminal 30 )