OBD-II总共定义了9个诊断服务,每个服务用一个byte来代表,即所谓的ServiceID(SID)。
其中进行数据读取时需要以下数据参数进行信息识别:
SID:Service Identity document服务地址码
PID:Parameter Identity document 参数地址码,每个PID也是一个字节(byte),取值范围是0x00至0xFF。
MID:Monitor Identity document 监测地址码
TID:Test Identity document 测试地址码
$ 01. 显示当前数据
服务01用于读取动力系统当前的诊断数据(如转速、故障码数量、故障灯状态、传感器状态等)。
命令格式
请求格式:SID + 若干PID
响应格式:SID + 请求PID + 具体响应数据
(可以简单理解为请求格式即为通道号,响应格式即为进入响应通道号后展示出来的内容)
需要注意的是,PID有两种类型,一种表示具体的数据,一种用于指出响应的ECU支持的PID。只有在ECU支持了该PID的情况下,才能进行数据的读取。在请求和响应消息中最大支持6个PID。
$ 02. 显示冻结帧数据
服务02用于读取车辆冻结帧即车辆出现故障那一刻时的相关信息,其命令格式与服务01相似。不同之处是在响应格式中增加了一个frame字节,代表所读取的冻结帧。
命令格式
请求格式:SID + 若干PID
响应格式:SID + PID + frame
需要注意的是,OBD只规定了ECU需要为一个DTC存储冻结帧,当ECU中同时存在多个DTC时,需根据优先级来判定存储谁的冻结帧。
$ 03. 显示存储的故障诊断代码
服务03用于读取存储在ECU中的与排放相关的确定DTC。
命令格式
请求格式:03
响应格式:SID + DTC总量 + 具体DTC(用每两个字节表示)
$ 04. 清除故障码和存储值
服务04用于清除存储在ECU中与排放相关的DTC。
命令格式
请求字节:04
响应字节:44
只有在发动机没有运转的时候才可以执行这个服务,否则ECU应该给出NRC 0x22(条件不满足)来拒绝该服务。清除数据时包括故障码、冻结帧、测试数据等等排放相关的内存数据都会清除掉。
(这里展示的是内部机制,我们可以简单的理解为进行清码时的操作)
$ 05. 测试结果-氧传感器监测
服务05用于读取氧传感器的状态。
$ 06. 测试结果-其他组件/系统监测
服务06用于请求对特定被监测系统的监测结果。一个ECU不一定需要支持所有的MID,获知具体支持哪些MID的方法与服务01和02所使用的方法相同。
命令格式
请求格式:SID + 若干MID
响应格式:SID + MID
针对某一个MID,可能有多个TID(Test ID),如测试内容(电压/时间/计数器等)、实际测量值/最小测量值、最大测量值。
$ 07. 显示待定诊断故障代码
服务07用于获取在当前以及上一个驾驶循环中出现的处于待定状态的DTC。在每次维修人员修理完之后,会通过清理故障码的形式来测试该故障是不是真正解决了,然后看这个故障是不是又会出现,这样可帮助技术员快速了解故障问题是否解决。
$ 08. 诊断组件/系统的控制操作
服务08用于对系统进行控制,进行元件测试操作。
命令格式
请求格式:SID + TID
响应格式:SID + TID + 测试结果值
$ 09. 显示车辆信息
服务09用于读取车辆信息,
命令格式
请求格式:SID + 若干InfoType
响应格式:SID + 支持的InfoType + 信息数据值
→ OBD-II诊断服务中的PID取值表(点击查看)