最近因为项目上的需求,接触了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时的相关状态信息“冻结”下来(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中的与排放相关的“confirmed”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 )

来自庞辉 埃泰克攻城狮公众号