ZEV OBD(零排放车辆车载诊断)详解及举例
一、ZEV OBD 基本概念
1.1 什么是 ZEV OBD?
ZEV OBD(Zero Emission Vehicle On-Board Diagnostics)是专门为零排放车辆(纯电动车BEV、燃料电池车FCEV)及插电式混合动力车(PHEV)设计的车载诊断系统。
传统 OBD-II(SAE J1979)是围绕内燃机尾气排放设计的,而 ZEV OBD 则将诊断重心转向电驱动推进系统(Propulsion System)的安全与性能监测。
| 项目 | 说明 |
|---|---|
| 核心标准 | SAE J1979-3(ZEVonUDS) |
| 上位标准 | SAE J1979(OBD-II)/ ISO 15031 |
| 底层协议 | UDS(ISO 14229)+ CAN / DoIP(ISO 13400) |
| 法规驱动 | 美国 CARB(加州空气资源委员会)ZEV 法规 |
| 适用车型 | BEV、FCEV、PHEV(纯电模式) |
| 实施时间 | 2026车型年起逐步实施,2028车型年全面强制 |
1.2 为什么需要 ZEV OBD?
传统OBD-II的局限: ┌─────────────────────────────────────────────┐ │ ✗ 监测对象:催化器、氧传感器、燃油蒸发... │ │ ✗ 不适用于:无发动机、无排气系统的纯电车 │ │ ✗ 无法覆盖:电池热失控、电机绝缘失效等 │ │ ✗ 缺乏:充电系统、高压安全等诊断定义 │ └─────────────────────────────────────────────┘ ZEV OBD 的必要性: ┌─────────────────────────────────────────────┐ │ ✓ 监测三电系统:电池(BMS)、电机(MCU)、电控 │ │ ✓ 高压安全:绝缘监测、热管理、接触器状态 │ │ ✓ 充电安全:OBC、DC/DC、充电通信 │ │ ✓ 法规强制:年检、召回、环保监管依据 │ │ ✓ 标准化:统一诊断接口,第三方设备可读 │ └─────────────────────────────────────────────┘二、标准体系与架构
2.1 标准族关系
SAE J1979(OBD-II 总标准) ├── SAE J1979-1 → 传统OBD(ICE车辆,基于CAN/KWP) ├── SAE J1979-2 → OBDonUDS(ICE车辆,基于UDS) └── SAE J1979-3 → ZEVonUDS(零排放车辆,基于UDS)★ ├── 引用 ISO 14229(UDS) ├── 引用 ISO 15765-4(CAN传输) ├── 引用 ISO 13400(DoIP传输) └── 引用 SAE J1979-DA(PID/DTC定义)2.2 ZEVonUDS vs OBDonUDS vs 传统OBD-II
| 对比项 | 传统 OBD-II | OBDonUDS | ZEVonUDS |
|---|---|---|---|
| 标准号 | SAE J1979 | SAE J1979-2 | SAE J1979-3 |
| 底层协议 | CAN/KWP2000 | UDS (ISO 14229) | UDS (ISO 14229) |
| 传输层 | ISO 15765-4 | ISO 15765-4 | ISO 15765-4 / ISO 13400(DoIP) |
| 监测对象 | 排放系统 | 排放系统 | 电驱动推进系统 |
| 尾气相关函数 | ✅ 有 | ✅ 有 | ❌ 无 |
| 安全访问 | 无需 | 无需 | 无需(法规强制公开) |
| 适用车型 | ICE | ICE | BEV / FCEV / PHEV |
2.3 通信架构
┌──────────────┐ ┌──────────────────────────────────┐ │ 诊断仪 │ CAN │ 车辆网关 │ │ (Tester) │◄──────►│ (Central Gateway ECU) │ │ │ DoIP │ │ │ 物理地址: │◄──────►│ 路由到目标ECU: │ │ 0x641 │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ 功能地址: │ │ │ BMS │ │ MCU │ │ VCU │ │ │ 0x6DF │ │ └─────┘ └─────┘ └─────┘ │ └──────────────┘ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │ OBC │ │DC/DC│ │ PTC │ │ │ └─────┘ └─────┘ └─────┘ │ └──────────────────────────────────┘关键地址(与传统OBD一致):
- 功能寻址(广播):
0x6DF- 物理寻址(点对点):
0x641(默认)- 响应地址:
0x649/0x6F1
三、ZEV OBD 诊断服务(基于 UDS)
ZEVonUDS 使用UDS 服务作为底层,但限定了必须支持的服务子集:
3.1 必须支持的 UDS 服务
| SID | 服务名称 | ZEV OBD 用途 |
|---|---|---|
0x10 | DiagnosticSessionControl | 切换到 OBD 会话(默认会话即可) |
0x14 | ClearDiagnosticInformation | 清除 DTC |
0x19 | ReadDTCInformation | 读取 DTC(含状态、快照、扩展数据) |
0x22 | ReadDataByIdentifier | 读取 PID 数据流 |
0x2E | WriteDataByIdentifier | 写入特定标识(如VIN) |
0x3E | TesterPresent | 保持会话活跃 |
0x85 | ControlDTCSetting | 控制 DTC 设置(开发阶段用) |
0x86 | ResponseOnEvent | 事件触发响应 |
3.2 与传统 OBD Mode 的映射关系
| 传统 OBD Mode | ZEVonUDS 对应 UDS 服务 | 说明 |
|---|---|---|
| Mode 01(实时数据) | 0x22ReadDataByIdentifier | 通过 DID 读取 PID |
| Mode 02(冻结帧) | 0x19ReadDTCInformation (sub 0x04) | 读取 DTC 快照 |
| Mode 03(存储DTC) | 0x19ReadDTCInformation (sub 0x02/0x0A) | 读取已确认 DTC |
| Mode 04(清除DTC) | 0x14ClearDiagnosticInformation | 清除所有 DTC |
| Mode 07(Pending DTC) | 0x19ReadDTCInformation (sub 0x01) | 读取待确认 DTC |
| Mode 09(车辆信息) | 0x22ReadDataByIdentifier | 通过特定 DID 读取 |
| Mode 0A(永久DTC) | 0x19ReadDTCInformation (sub 0x09) | 读取永久 DTC |
四、ZEV OBD 监测器(Monitors)
4.1 监测器概念
与传统 OBD 的"就绪状态监测器"类似,ZEV OBD 定义了针对电驱动系统的监测器:
| 监测器 | 英文名称 | 监测内容 |
|---|---|---|
| 电池系统监测 | Battery System Monitor | SOC/SOH、单体电压、温度、绝缘 |
| 电机系统监测 | Electric Machine Monitor | 转速、扭矩、温度、绕组绝缘 |
| 逆变器监测 | Inverter Monitor | IGBT温度、母线电压、PWM异常 |
| 充电系统监测 | Charging System Monitor | OBC、DC快充通信、充电电流 |
| DC/DC转换器监测 | DC/DC Converter Monitor | 输出电压、效率、过温 |
| 高压互锁监测 | HV Interlock Monitor | 高压连接器完整性 |
| 绝缘监测 | Isolation Monitor | 高压系统对地绝缘电阻 |
| 热管理监测 | Thermal Management Monitor | 冷却液温度、流量、泵状态 |
| 接触器监测 | Contactor Monitor | 主正/主负/预充接触器状态 |
| 能量回收监测 | Regenerative Braking Monitor | 回收扭矩、制动协调 |
4.2 监测器状态读取
通过 UDS0x22服务读取特定 DID,获取各监测器的完成状态:
请求: 03 22 F1 01 00 00 00 00 ← 读取DID 0xF101(ZEV监测器状态) 响应: 06 62 F1 01 FF 03 00 00 ← 各监测器状态位图 ↑ ↑ | └─ 0x03 = 电池+电机监测已完成 └──── 0xFF = 所有监测器支持五、ZEV OBD PID(数据标识符)
5.1 PID 定义方式
ZEVonUDS 中,传统 OBD 的 "Mode+PID" 被映射为 UDS 的DID(Data Identifier):
传统OBD: Mode 01 + PID 0x0C → 发动机转速 ZEVonUDS: SID 0x22 + DID 0xF1xx → 电机转速/电池SOC等5.2 ZEV 专用 PID/DID 列表(典型)
| DID | 名称 | 字节数 | 公式/说明 | 范围 |
|---|---|---|---|---|
F100 | ZEV PID 支持列表 | 4 | 位图 | — |
F101 | ZEV 监测器状态 | 4 | 位图(各监测器完成状态) | — |
F102 | 冻结帧 DTC | 3 | 触发冻结帧的 DTC | — |
F200 | 动力电池 SOC | 2 | (A×256+B)/10 | 0~100.0% |
F201 | 动力电池 SOH | 2 | (A×256+B)/10 | 0~100.0% |
F202 | 电池包总电压 | 2 | (A×256+B)/10 | 0~1000.0 V |
F203 | 电池包总电流 | 2 | (A×256+B)/10 − 500 | −500~500 A |
F204 | 电池最高温度 | 1 | A − 40 | −40~215°C |
F205 | 电池最低温度 | 1 | A − 40 | −40~215°C |
F206 | 电池最高单体电压 | 2 | (A×256+B)/1000 | 0~5.000 V |
F207 | 电池最低单体电压 | 2 | (A×256+B)/1000 | 0~5.000 V |
F208 | 电池绝缘电阻 | 2 | (A×256+B)×10 | 0~655350 kΩ |
F300 | 电机转速 | 2 | (A×256+B) − 20000 | −20000~45000 rpm |
F301 | 电机扭矩 | 2 | (A×256+B)/4 − 500 | −500~1500 Nm |
F302 | 电机绕组温度 | 1 | A − 40 | −40~215°C |
F303 | 逆变器 IGBT 温度 | 1 | A − 40 | −40~215°C |
F304 | 逆变器母线电压 | 2 | (A×256+B)/10 | 0~1000 V |
F400 | 充电状态 | 1 | 枚举(0=未充电,1=交流,2=直流) | — |
F401 | 充电电流 | 2 | (A×256+B)/10 | 0~500 A |
F402 | 充电电压 | 2 | (A×256+B)/10 | 0~1000 V |
F403 | 剩余充电时间 | 2 | A×256+B | 0~65535 min |
F500 | 高压互锁状态 | 1 | 0=正常, 1=断开 | — |
F501 | 主接触器状态 | 1 | 位图(主正/主负/预充) | — |
F502 | DC/DC 输出电压 | 2 | (A×256+B)/100 | 0~16.00 V |
F503 | 冷却液温度 | 1 | A − 40 | −40~215°C |
F600 | 累计行驶里程 | 4 | A×2^24+B×2^16+C×256+D | 0~4294967 km |
F601 | 累计耗电量 | 4 | (A×2^24+...)/10 | 0~429496.7 kWh |
六、ZEV OBD DTC(故障码)
6.1 DTC 格式
ZEV OBD 沿用ISO 14229 / SAE J2012的 3字节 DTC 格式(6位十六进制),但定义了电动车专用故障码段:
| DTC 范围 | 系统 | 说明 |
|---|---|---|
P0Axx~P0Axx | 混合动力/电动车 | SAE 标准通用 EV 故障码 |
P1Axx~P1Axx | 混合动力/电动车 | 厂商自定义 EV 故障码 |
P2Axx~P2Axx | 混合动力/电动车 | SAE 预留 |
U01xx~U01xx | 网络通信 | ECU 间通信丢失 |
U3Axx~U3Axx | 电池通信 | BMS 内部通信 |
6.2 常见 ZEV 故障码
| DTC | 含义 | 常见原因 |
|---|---|---|
| P0A80 | 混合动力/电动车电池包故障 | 电池模组异常、BMS故障 |
| P0A1F | 电池能量控制模块 | BMS 内部故障 |
| P0A78 | 混合动力/电动车逆变器温度过高 | 冷却系统故障、过载 |
| P0A79 | 混合动力/电动车逆变器性能 | IGBT损坏、驱动异常 |
| P0A0A | 高压互锁回路断开 | 连接器松动、线束断裂 |
| P0A0B | 高压互锁回路性能 | 接触电阻过大 |
| P0A1A | 发电机(电机)控制模块 | MCU 故障 |
| P0A1B | 驱动电机A控制模块 | MCU 内部故障 |
| P0A3A | 电机温度传感器电路 | 传感器断路/短路 |
| P0A3B | 电机温度传感器范围/性能 | 传感器漂移 |
| P0A7A | 逆变器温度传感器电路 | 传感器故障 |
| P0A90 | 混合动力/电动车驱动系统性能 | 电机/逆变器综合故障 |
| P0A94 | DC/DC 转换器性能 | 输出电压异常 |
| P0A95 | 高压保险丝 | 保险丝熔断 |
| P0A96 | 混合动力/电动车电池冷却系统 | 冷却泵/风扇故障 |
| P0A97 | 混合动力/电动车电池冷却系统性能 | 冷却效率不足 |
| P0AA1 | 电池正极接触器卡滞 | 接触器粘连 |
| P0AA2 | 电池负极接触器卡滞 | 接触器粘连 |
| P0AA5 | 电池正极接触器电路 | 驱动电路故障 |
| P0AA6 | 电池负极接触器电路 | 驱动电路故障 |
| P0AB0 | 电池包绝缘电阻低 | 绝缘老化、进水 |
| P0AB1 | 电池包绝缘电阻性能 | 绝缘下降趋势 |
| P0C71 | 电机逆变器温度传感器 | 传感器故障 |
| P0C72 | 电机逆变器温度传感器范围 | 超范围 |
| U0100 | 与 ECM/PCM 通信丢失 | CAN 总线故障 |
| U0111 | 与 BMS 通信丢失 | BMS CAN 故障 |
| U0112 | 与电机控制器通信丢失 | MCU CAN 故障 |
| U0293 | 与混合动力控制模块通信丢失 | HCU 通信故障 |
| U3A00 | BMS 内部通信故障 | 内部总线异常 |
七、ZEV OBD 诊断举例
📌 例1:读取电池 SOC(DID F200)
请求: 03 22 F2 00 00 00 00 00 ↑ ↑ ────┘ | | └─ DID = 0xF200(电池SOC) | └───── SID = 0x22(ReadDataByIdentifier) └──────── 长度 = 3 响应: 05 62 F2 00 02 EE 00 00 ↑ ↑ ────┘ ────┘ | | DID 数据:0x02EE = 750 | └──────── SID = 0x62(22+40) └─────────── 长度 = 5 计算: SOC = 750 / 10 = 75.0%📌 例2:读取电池包总电压和电流
请求: 05 22 F2 02 F2 03 00 00 ← 同时请求电压(F202)和电流(F203) 响应: 09 62 F2 02 01 90 F2 03 00 64 00 ────┘ ────┘ ────┘ ────┘ DID 电压 DID 电流 计算: 电压 = 0x0190 / 10 = 400 / 10 = 40.0 → 400.0 V 电流 = 0x0064 / 10 − 500 = 10.0 − 500 = −490 A(放电) 或(若公式为直接值): 电流 = 0x0064 / 10 = 10.0 A(充电)📌 例3:读取电机转速和扭矩
请求: 05 22 F3 00 F3 01 00 00 响应: 09 62 F3 00 27 10 F3 01 03 E8 ────┘ ────┘ ────┘ ────┘ DID 转速 DID 扭矩 计算: 转速 = 0x2710 − 20000 = 10000 − 20000 = −10000 → 实际 10000 rpm (或:0x2710 = 10000 rpm,偏移量视具体实现) 扭矩 = 0x03E8 / 4 − 500 = 250 − 500 = −250 → 实际 250 Nm📌 例4:读取已存储的 DTC(UDS 0x19 服务)
请求: 03 19 02 FF 00 00 00 00 ↑ ↑ ↑ ↑ | | | └─ DTC状态掩码 = 0xFF(所有状态) | | └──── 子功能 = 0x02(reportDTCByStatusMask) | └─────── SID = 0x19 └────────── 长度 = 3 响应: 0A 59 02 FF 0A 0A 80 24 0A 0A 2F ↑ ↑ ↑ ↑ ───────┘ ───────┘ | | | | DTC1+状态 DTC2+状态 | | | └─ 状态掩码 | | └──── 子功能 | └─────── SID = 0x59(19+40) └────────── 长度 解析: DTC1 = 0x0A0A80 → P0A80(电池包故障),状态=0x24(已确认+测试失败) DTC2 = 0x0A0A2F → P0AA2(负极接触器卡滞),状态=0x2F📌 例5:读取冻结帧数据(DTC 快照)
请求: 04 19 04 0A 0A 80 00 00 ↑ ↑ ↑ ───────┘ | | | DTC = P0A80 | | └── 子功能 = 0x04(reportDTCSnapshotRecordByDTCNumber) | └───── SID = 0x19 └──────── 长度 = 4 响应: 10 12 59 04 0A 0A 80 01 ← 首帧(ISO-TP多帧) 21 F2 00 02 BC F2 04 4B ← 连续帧 22 F3 00 1F 40 00 00 00 ← 连续帧 解析: 冻结帧记录 #01: - DID F200(SOC)= 0x02BC = 700 → 70.0% - DID F204(电池最高温度)= 0x4B = 75 → 75−40 = 35°C - DID F300(电机转速)= 0x1F40 = 8000 rpm📌 例6:清除 DTC
请求: 04 14 FF FF FF 00 00 00 ↑ ↑ ───────┘ | | 清除所有DTC(0xFFFFFF = 全部) | └── SID = 0x14(ClearDiagnosticInformation) └───── 长度 = 4 响应: 01 54 00 00 00 00 00 00 ↑ ↑ | └─ SID = 0x54(14+40)→ 清除成功 └──── 长度 = 1⚠️ 与 Mode 04 相同,永久 DTC 无法通过此服务清除。
📌 例7:读取车辆信息(VIN)
请求: 03 22 F1 90 00 00 00 00 ← DID 0xF190 = VIN 响应(多帧): 10 14 62 F1 90 4C 53 47 56 ← 首帧 21 41 4D 31 32 33 34 35 36 ← 连续帧 22 37 38 39 41 42 00 00 00 ← 连续帧 ASCII: "LSGVAM123456789AB"📌 例8:读取高压互锁状态
请求: 03 22 F5 00 00 00 00 00 响应: 04 62 F5 00 00 00 00 00 ↑ └─ 0x00 = 正常(互锁回路完整) 0x01 = 断开(高压连接器脱落!)📌 例9:读取充电状态
请求: 03 22 F4 00 00 00 00 00 响应: 04 62 F4 00 02 00 00 00 ↑ └─ 0x02 = 直流快充中 同时读取充电电流: 请求: 03 22 F4 01 00 00 00 00 响应: 05 62 F4 01 00 FA 00 00 ────┘ 0x00FA = 250 → 250/10 = 25.0 A(充电电流)📌 例10:读取永久 DTC
请求: 03 19 09 FF 00 00 00 00 ↑ ↑ ↑ | | └─ 子功能 = 0x09(reportSeverityInformationOfDTC) | └──── 或 0x08(reportDTCBySeverityMaskRecord) └─────── SID = 0x19 响应: 07 59 09 FF 0A B0 24 00 00 ───────┘ ──┘ DTC 状态 解析: DTC = 0x0AB0 → P0AB0(电池绝缘电阻低) 状态 = 0x24(已确认 + 永久存储) → 此DTC无法通过0x14服务清除,需绝缘修复后自检通过八、ZEV OBD 完整诊断流程
场景:纯电动车仪表盘亮起"电驱系统故障"灯,使用支持 ZEVonUDS 的诊断仪进行诊断。
步骤1️⃣ 建立通信 诊断仪通过 CAN(500kbps)连接 OBD-II 接口 发送 TesterPresent:3E 00 → 响应 7E 00 ✅ 步骤2️⃣ 读取 DTC 状态 请求:19 02 FF 响应:59 02 FF 0A 80 24 0A 0A 2F 结果:P0A80(电池包故障)+ P0AA2(负极接触器卡滞) 步骤3️⃣ 读取冻结帧 请求:19 04 0A 0A 80 结果:故障时 SOC=70%,电池温度=35°C,电机转速=8000rpm 步骤4️⃣ 读取实时数据流 请求:22 F2 00 → SOC = 68.5% 请求:22 F2 02 → 电池电压 = 398.2 V 请求:22 F2 03 → 电池电流 = −125.3 A(放电) 请求:22 F2 04 → 最高温度 = 38°C 请求:22 F2 08 → 绝缘电阻 = 5200 kΩ(正常 >500kΩ) 请求:22 F5 00 → 高压互锁 = 正常 请求:22 F5 01 → 主接触器 = 主正✅ 主负❌ 预充✅ 步骤5️⃣ 故障定位 分析:P0AA2(负极接触器卡滞)+ 主负接触器状态异常 结论:负极接触器机械卡滞,无法正常闭合/断开 步骤6️⃣ 维修后清除 DTC 请求:14 FF FF FF → 响应:54 ✅ 步骤7️⃣ 验证永久 DTC 请求:19 09 FF 响应:59 09 FF(无永久DTC)→ 清除成功 ✅ 步骤8️⃣ 验证监测器就绪 请求:22 F1 01 → 所有监测器 = 已完成 ✅九、ZEV OBD 与传统 OBD 的 DTC 对比
| 对比项 | 传统 OBD(ICE) | ZEV OBD(EV) |
|---|---|---|
| 典型 DTC | P0301(1缸失火) | P0A80(电池包故障) |
| 监测对象 | 催化器、氧传感器、EGR | 电池、电机、逆变器、充电 |
| 冻结帧参数 | 转速、负荷、水温、油压 | SOC、电压、电流、温度、扭矩 |
| 就绪监测 | 催化器、O2、蒸发、EGR | 电池、电机、绝缘、热管理 |
| MIL 灯 | Check Engine | 电驱系统故障灯 |
| 清除条件 | 3个驾驶循环自检通过 | 3个驾驶循环自检通过 |
| 永久DTC | P0420等 | P0A80、P0AB0等 |
十、法规实施时间线
| 时间 | 里程碑 |
|---|---|
| 2022年 | SAE J1979-3 首版发布 |
| 2023年10月 | SAE J1979-3 修订版(_202310) |
| 2025年3月 | 中国《新能源汽车运行安全性能检验规程》实施 |
| 2026车型年 | CARB 要求新认证 ZEV 支持 ZEVonUDS |
| 2028车型年 | 美国市场所有 ZEV 强制支持 ZEVonUDS |
| 2026年4月 | 中国年检 OBD 检测全面铺开(含新能源车) |
| 2026年7月 | GB 38031-2025(电池安全)实施 |
十一、中国新能源汽车 OBD 检测要点(2025-2026)
根据《新能源汽车运行安全性能检验规程》:
| 检测项目 | 内容 | 判定标准 |
|---|---|---|
| 故障码扫描 | 读取三电系统 DTC | 无当前故障码 |
| 电池安全 | SOC、温度、绝缘、压差 | 绝缘≥500Ω/V,压差≤500mV |
| 电机安全 | 温度、绝缘、转速 | 无过温/绝缘故障 |
| 充电安全 | 充电通信、过流保护 | 无充电故障码 |
| 高压安全 | 互锁、接触器、绝缘 | 互锁正常,绝缘合格 |
| 就绪状态 | 各监测器完成状态 | 未完成项 ≤ 1 |
十二、总结速查表
| 项目 | 传统 OBD-II | ZEV OBD |
|---|---|---|
| 标准 | SAE J1979 | SAE J1979-3 |
| 协议 | CAN (ISO 15765) | UDS + CAN / DoIP |
| 服务格式 | Mode + PID | SID + DID |
| 读取数据 | 02 01 0C | 03 22 F3 00 |
| 读取DTC | 01 03 | 03 19 02 FF |
| 清除DTC | 01 04 | 04 14 FF FF FF |
| 响应格式 | 41 0C xx | 62 F3 00 xx xx |
| 否定响应 | 7F 01 NRC | 7F 22 NRC |
| 核心监测 | 排放(催化器、O2) | 三电(电池、电机、电控) |
| 典型DTC | P0420、P0301 | P0A80、P0A0A、P0AB0 |
| 安全访问 | 不需要 | 不需要(法规公开) |
💡核心记忆:
- 传统OBD =Mode + PID(面向排放)
- ZEV OBD =UDS SID + DID(面向三电安全)
- 两者共享 OBD-II 物理接口(16针DLC)和否定响应格式(7F + SID + NRC)
- ZEV OBD 是法规强制,所有第三方诊断仪必须能读取