3. 诊断描述文件解析
在 MICROSAR 诊断系统中,诊断描述文件是连接“整车诊断规范”与“ECU 软件实现”的桥梁。ODX(Open Diagnostic Data Exchange,ISO 22901-1)用统一的数据模型描述诊断服务、请求响应、参数编码、DTC 与刷写流程;PDX(Packaged ODX)则是把多个 ODX 文件按工程组织打包的容器。理解这两者的结构,是后续在 MICROSAR 中正确导入与配置诊断数据库的前提。
一、ODX 文件的核心结构
ODX 采用分层模型,最外层是 ODX 根元素,其下通过 DIAG-LAYER 组织诊断数据。常见的诊断层包括:PROTOCOL(协议层,定义通信参数与通用服务)、FUNCTIONAL-GROUP(功能组,如所有 ECU 共用的 OBD 服务)、BASE-VARIANT(基础变体,描述同一平台 ECU 的公共诊断能力)、ECU-VARIANT(ECU 变体,描述具体车型/配置下的差异)。这种“协议→功能组→基础变体→ECU 变体”的继承关系,使诊断数据可以复用,避免每个 ECU 重复定义全部服务。
每个诊断层内部由若干 DIAG-COMM(诊断通信)构成,每个 DIAG-COMM 对应一条诊断服务,例如 0x22 ReadDataByIdentifier、0x2E WriteDataByIdentifier、0x31 RoutineControl、0x19 ReadDTCInformation。一条 DIAG-COMM 包含请求参数、肯定响应、否定响应以及参数到物理值的转换规则。参数编码由 PARAM、DOP(Data Object Property)和 COMPU-METHOD 共同描述:DOP 定义数据类型与长度,COMPU-METHOD 定义原始值与物理值之间的线性或查表换算。例如某温度信号原始值 0x00~0xFF 对应 -40℃~215℃,采用线性换算,则 COMPU-METHOD 中会给出 offset 与 factor。
PDX 文件本质是一个 ZIP 包,内部通常包含 index.xml(描述包内 ODX 文件清单与版本)、若干 .odx 文件以及可选的 .odx-d、.odx-c 等分文件。MICROSAR 在导入时读取 index.xml,按引用关系加载各诊断层,因此 PDX 的目录结构和 index 的准确性直接影响导入结果。
二、在 MICROSAR 中导入诊断数据库
MICROSAR 的诊断配置主要在 DaVinci Configurator 中完成。导入 PDX 的典型流程是:在工程中打开 Diagnostic 视图,选择 Import Diagnostic Description,指定 PDX 文件路径。工具会解析 index.xml,列出包内所有 ODX 文件及其诊断层,并让用户选择目标 ECU 变体。选择后,工具按继承关系合并 PROTOCOL、BASE-VARIANT、ECU-VARIANT 三层数据,生成内部的诊断模型。
导入过程中需要重点关注三类映射:第一,DIAG-COMM 到 Dcm 服务表的映射,包括服务 ID、子功能、会话与安全等级;第二,DTC 到 Dem 事件表的映射,包括 DTC 编号、故障类型、去抖策略;第三,DOP 与 COMPU-METHOD 到数据转换的映射,决定 DID 读写时原始值与物理值的换算。若 PDX 中缺少某层定义,工具会给出引用错误,此时需要检查 index.xml 是否完整、ODX 文件是否被正确引用。
三、关键配置项与示例
导入完成后,需要在 DaVinci Configurator 中核对以下配置。以一条 0x22 ReadDataByIdentifier 读取 DID 0xF190(VIN)为例,ODX 中该服务的请求参数为 2 字节 DID,肯定响应为 17 字节 ASCII 字符串。导入后 Dcm 配置中应出现对应服务项,DID 长度、数据类型与 ODX 一致。若 ODX 中定义了 COMPU-METHOD,则还需确认转换公式被正确带入。
示例:DID 0xF190 的 ODX 参数片段(简化)
DIAG-COMM: ReadDataByIdentifier_F190
REQUEST: 0x22 0xF1 0x90
POS-RESPONSE: 0x62 0xF1 0x90 + 17 Byte ASCII
DOP: A_ASCIISTRING (length=17)
COMPU-METHOD: IDENTICAL(无换算)
导入后 Dcm 配置核对项:
DcmDspDidIdentifier = 0xF190
DcmDspDidSize = 17
DcmDspDidDataElementType = ASCII
DcmDspDidReadSession = DEFAULT / EXTENDED
对于 DTC,ODX 中通常定义 DTC 编号、故障类型(如 ISO-14229-1 的 DTCFormatIdentifier)、严重度与快照数据。导入 Dem 后,需要核对 DemEventId、DemDtc、DemDebounceAlgorithm 是否与 ODX 一致。例如某氧传感器故障 DTC 0x0133,ODX 中定义去抖为 counter-based,阈值 10 次,则 Dem 配置中应出现对应的计数器参数。
四、常见问题与处理
实际工程中,PDX 导入失败最常见的原因是版本不匹配:ODX 文件使用的 schema 版本高于工具支持版本,或 index.xml 中声明的版本与文件实际内容不符。此时可先用 ODX 编辑器(如 Vector ODX Studio)打开 PDX,检查 ODX 根元素的 MODEL-VERSION 与 index.xml 的 VERSION 是否一致。另一个常见问题是 ECU 变体选择错误:若选择了错误的 ECU-VARIANT,导入的服务集可能与实际 ECU 不符,导致 Dcm 服务表缺失或多出服务。处理方法是重新导入并明确指定目标变体,或在 ODX 中确认变体名称与工程配置一致。
此外,DTC 映射时需注意 ODX 中的 DTC 编号格式。ISO 14229-1 使用 3 字节 DTC,而部分 OEM 使用 2 字节或自定义格式。导入后应在 Dem 配置中核对 DTC 的字节序与掩码,避免诊断仪读取到的 DTC 与预期不符。对于刷写相关 ODX,还需确认 Flash 驱动配置中的扇区地址、校验算法与 ODX 中定义的刷写序列一致,否则会在刷写过程中出现校验失败或超时。
总结来说,ODX/PDX 解析的关键在于理解诊断层的继承关系与参数编码规则,MICROSAR 导入的核心在于把 ODX 中的 DIAG-COMM、DTC、DOP 正确映射到 Dcm、Dem 与数据转换配置。导入后通过一致性检查与关键配置核对,可以尽早发现引用错误、版本不匹配与变体选择问题,为后续诊断功能测试与量产适配打下可靠基础。