仿真工程进阶
汽车诊断技术概述
汽车诊断技术是一种无需拆解车辆,通过读取车辆运行过程中记录的数据或故障码来识别故障原因并定位故障部位的应用技术。借助该技术,可实现对车辆故障的快速检测与定位。

如图所示,诊断通常采用请求—响应(Request–Response)模式,诊断设备发送请求,ECU 返回响应并解析为诊断信息。例如,发送读取请求 22 4A 05,若收到响应 62 4A 05 5A FF,则在诊断规范中将响应数据的第 4 字节定义为某个传感器的十六进制温度值,因此 5A 表示 0x5A(十进制 90),对应 90°C。
诊断术语
- 客户端(Client):发起诊断请求并发送请求的设备(诊断仪)。
- 服务器(Server):提供诊断响应并返回响应的主体(ECU)。
- 远端客户端/服务器(Remote Client/Server):网络段与客户端/服务器不同的实体。
- 正响应(Positive Response):服务器正确执行客户端诊断请求后返回的响应。
- 负响应(Negative Response):服务器无法正确执行客户端请求时返回的响应(错误/拒绝)。
OBD 诊断与增强诊断(Enhanced Diagnostics)
OBD(On-Board Diagnostic,车载诊断)系统最初为满足加州排放法规而制定,核心用于监控车辆排放系统并在异常时发出警告。随着 OBD 的演进,OBD II 标准逐步规范了诊断接口、协议、故障码与服务指南,使维护人员能快速定位与处理排放相关故障。
相比之下,增强诊断超越了 OBD 的排放监控,包含更广泛的诊断功能,旨在支持整车开发、标定、产测、售后维护与软件更新等场景。例如,发动机模块可能同时包含 OBD 与增强诊断功能,而车身、仪表等 ECU 更常采用增强诊断。因此,增强诊断可被视为对 OBD 的扩展,提供更全面的车辆诊断能力。
诊断协议
目前主流诊断接口以 K 线与 CAN 总线为主;随着 CAN 的广泛应用,K 线的使用逐渐减少。本节主要围绕 CAN 总线诊断展开说明。ISO 标准为 K 线与 CAN 线诊断制定了一系列规范,以下表格展示了 K 线与 CAN 的诊断协议在 OSI 各层的对应:
K 线诊断协议
| OSI 层 | 厂商增强诊断 | 排放相关诊断(OBD) |
|---|---|---|
| 应用层 | ISO14230-3 | N/A |
| 表示层 | N/A | N/A |
| 会话层 | N/A | N/A |
| 传输层 | N/A | N/A |
| 网络层 | N/A | N/A |
| 数据链路层 | ISO14230-2 | ISO14230-4 |
| 物理层 | ISO14230-1 | ISO14230-4 |
CAN 线诊断协议
| OSI 层 | 厂商增强诊断 | 排放相关诊断(OBD) |
|---|---|---|
| 应用层 | ISO14229-1 / ISO15765-3 / ISO14230-3 | N/A |
| 表示层 | N/A | N/A |
| 会话层 | N/A | N/A |
| 传输层 | N/A | N/A |
| 网络层 | ISO 15765-2 | ISO 15765-4 |
| 数据链路层 | ISO 15765-1 | ISO 15765-4 |
| 物理层 | 未定义 | ISO 15765-4 |
由上表可见,ISO 标准为 OSI 各层(应用、网络、数据链路、物理层)提供了明确的诊断规范,以支持 K 线与 CAN 线的排放相关诊断(如 OBD)与厂商增强诊断,确保通信各层之间的兼容性与可靠性。
诊断接口
现代车辆普遍采用标准化的 OBD 接口,通常布置在驾驶员座位前方下方,便于接入。标准 OBD 接口具有固定的物理形状与针脚定义,其功能分配可参考规范化的针脚定义表,旨在保证不同车辆与诊断设备之间的互操作性,方便维护人员使用诊断工具读取车辆数据或故障码。

| 针脚 | 定义 |
|---|---|
| 1 | 未定义(OEM 定制) |
| 2 | SAE J1850 Bus Positive |
| 3 | 未定义(OEM 定制) |
| 4 | 底盘地(Chassis Ground) |
| 5 | 信号地(Signal Ground) |
| 6 | CAN High(由 ISO15765-4 定义) |
| 7 | K-line(由 ISO9141-2 与 ISO14230-4 定义) |
| 8 | 未定义(OEM 定制) |
| 9 | 未定义(OEM 定制) |
| 10 | SAE J1850 Bus Negative |
| 11 | 未定义(OEM 定制) |
| 12 | 未定义(OEM 定制) |
| 13 | 未定义(OEM 定制) |
| 14 | CAN Low(由 ISO15765-4 定义) |
| 15 | K-line(由 ISO9141-2 与 ISO14230-4 定义) |
| 16 | 常电正极(Constant Power Positive) |
针对单个 ECU,诊断工具通常直接接入相应总线(K-line、CAN、LIN 等)进行测试与调试。
诊断生命周期
诊断贯穿车辆从开发到售后的整个生命周期,如下图所示:开发阶段整车厂与 ECU 供应商联合定义并开发诊断功能;ECU 供应商对单个 ECU 进行诊断测试,OEM 在生产阶段对整车系统进行诊断测试;车辆下线后,售后维护单位可依据诊断规范使用诊断设备对故障车辆进行排查与维修。

UDS(统一诊断服务)
前文已介绍 OBD 与增强诊断,随着增强诊断在整车与 ECU 中的广泛应用,本节重点介绍增强诊断中常用的 UDS(Unified Diagnostic Services)协议。UDS(ISO 14229)为诊断服务提供基本框架,是车辆各 ECU 单元间常用的应用层诊断协议。
UDS 主要定义了应用层的诊断协议与服务,可通过 BasicDiagnostics → Diagnostic0 → BasicDiagnostics 打开 UDS 诊断面板。UDS 服务主要涵盖诊断和通信管理、数据传输、存储数据读写、输入/输出控制、例程控制以及上传/下载等功能。

UDS 服务功能与说明一览表
| 功能单元 | 服务 | 说明 |
|---|---|---|
| 诊断与通信管理 | ||
| DiagnosticSessionControl (0x10) | 客户端请求切换服务端的诊断会话 | |
| ECUReset (0x11) | 客户端请求服务端执行复位 | |
| SecurityAccess (0x27) | 客户端请求解锁受安全保护的服务 | |
| CommunicationControl (0x28) | 客户端请求启用/禁用服务端的收发功能 | |
| TesterPresent (0x3E) | 客户端告知服务端客户端仍在线 | |
| AccessTimingParameter (0x83) | 读取/修改激活通信的定时参数 | |
| SecuredDataTransmission (0x84) | 执行扩展的数据链路安全保护数据传输 | |
| ControlDTCSetting (0x85) | 客户端控制服务端设置 DTC(故障码) | |
| ResponseOnEvent (0x86) | 客户端请求服务端启动事件触发的响应机制 | |
| LinkControl (0x87) | 客户端请求控制通信波特率 | |
| 数据传输 | ||
| ReadDataByIdentifier (0x22) | 读取指定数据标识符的数据 | |
| ReadMemoryByAddress (0x23) | 读取指定内存地址范围内的数据 | |
| ReadScalingDataByIdentifier (0x24) | 读取标识符的缩放/量程信息 | |
| ReadDataByPeriodicIdentifier (0x2A) | 请求服务器周期发送指定标识符数据 | |
| DynamicallyDefineDataIdentifier (0x2C) | 动态定义由 ReadDataByIdentifier 读取的标识符 | |
| WriteDataByIdentifier (0x2E) | 写入指定数据标识符的记录 | |
| WriteMemoryByAddress (0x3D) | 向指定内存地址范围写入数据 | |
| 存储数据传输 | ||
| ClearDiagnosticInformation (0x14) | 清除诊断故障码信息 | |
| ReadDTCInformation (0x19) | 读取诊断故障码信息 | |
| 输入/输出控制 | ||
| InputOutputControlByIdentifier (0x2F) | 替换电子系统的输入信号值或控制输出 | |
| 例程控制 | ||
| RoutineControl (0x31) | 远程启动/停止例程或请求例程执行结果 | |
| 上传/下载 | ||
| RequestDownload (0x34) | 初始化数据下载请求,ECU 完成准备后返回正响应 |