3. CANoe诊断工程搭建

诊断测试能否顺利开展,第一步并不在测试用例,而在于工程配置是否正确。CANoe 的诊断功能依赖一个完整的工程上下文:配置(Configuration)决定总线通道与硬件映射,诊断描述文件(CDD/ODX/PDX)提供诊断服务的语法与语义,目标 ECU 决定诊断请求发往哪个节点,网络拓扑则保证物理链路与逻辑链路一致。四者缺一,后续的 10 01、22 F1 90 之类的请求要么发不出去,要么收到否定响应。

一、新建配置与通道规划

在 CANoe 中通过 File → New Configuration 新建工程,选择与目标总线匹配的模板(CAN、CAN FD 或 Ethernet/DoIP)。新建后进入 Simulation Setup 与 Hardware 配置界面,先确定通道数量与用途。以常见的车身域诊断为例,可规划为:Channel 1 接 CAN 总线(500 kbit/s)用于常规诊断,Channel 2 接 CAN FD(仲裁段 500 kbit/s、数据段 2 Mbit/s)用于刷写,Channel 3 预留 DoIP 以太网。通道速率必须与实车总线一致,否则会出现错误帧或完全收不到响应。

硬件映射在 Hardware → Network Hardware Configuration 中完成,把逻辑通道绑定到具体的 VN 系列接口(如 VN1640A 的 CAN1/CAN2)。若使用离线仿真,可勾选 Simulation Only 模式,此时不占用真实硬件,但诊断响应需由仿真节点提供。

二、添加诊断描述文件

诊断描述文件是 CANoe 理解诊断服务的“字典”。常见格式有三类:CDD(CANdelaStudio 生成,含完整服务、DID、DTC 定义)、ODX/PDX(ISO 22901,多用于 UDS 与法规诊断)、以及简单的诊断数据库。操作路径为 Diagnostics → Diagnostic Description → Add,选择文件后 CANoe 会解析出服务列表、会话、安全访问层级与数据标识符。

添加后需重点核对三项:一是协议类型是否为 UDS(ISO 14229)或 KWP2000;二是诊断寻址方式,物理寻址(如 0x7E0/0x7E8)与功能寻址(0x7DF)是否都已定义;三是会话与安全等级是否与 ECU 实际一致。若 CDD 中缺少某个 DID,即使 ECU 支持,CANoe 也无法在面板中直接调用。

三、设置目标 ECU 与网络拓扑关联

在 Diagnostic → Target ECU 中把描述文件中的 ECU 实例与网络节点绑定。关键参数包括:请求 ID(Request ID)、响应 ID(Response ID)、功能寻址 ID、以及 STmin/BS 等传输层参数。以 0x7E0/0x7E8 为例,请求 ID 是诊断仪发往 ECU 的 CAN ID,响应 ID 是 ECU 回传的 CAN ID,二者必须成对配置,否则会出现“请求发出但无响应”的现象。

网络拓扑关联则通过 Network Topology 或 Simulation Setup 中的节点连接完成:把目标 ECU 节点挂到对应通道上,并确认该通道已绑定硬件。若使用 DoIP,还需配置 IP 地址、逻辑地址(如 0x0E00 诊断仪、0x1001 ECU)与端口(13400)。拓扑关联的本质是保证“诊断请求从哪个通道发出、由哪个节点接收、响应沿哪条路径返回”三者一致。

CANoe 诊断工程配置关系图 Configuration 配置层 Channel 1 CAN 500 kbit/s Channel 2 CAN FD 500/2M Channel 3 DoIP Ethernet Diagnostic Description CDD / ODX / PDX 文件 UDS ISO 14229 服务集 DID / DTC / 会话 / 安全等级 Target ECU 绑定 请求 ID 0x7E0 响应 ID 0x7E8 功能寻址 0x7DF Network Topology 网络拓扑关联 CANoe 诊断仪 Tester 0x7E0 CAN Bus Channel 1 目标 ECU Responder 0x7E8 诊断请求 0x7E0 → 0x7E8 诊断响应 0x7E8 → 0x7E0

四、配置完成后的自检与常见问题

配置完成后不要急于跑用例,先做一次最小闭环验证:发送 10 03(进入扩展会话),观察是否收到 50 03 00 32 01 F4;再发送 22 F1 90(读 VIN),确认返回 62 F1 90 加 17 字节 VIN。若 10 03 无响应,优先检查请求/响应 ID 是否写反、通道是否绑定硬件、总线速率是否匹配;若返回 7F 10 13(长度错误)或 7F 10 12(子功能不支持),则说明描述文件中的服务定义与 ECU 实际不一致,需要回到 CDD 核对。

建议在 Target ECU 配置中同时启用物理寻址与功能寻址,功能寻址用于广播式会话切换,物理寻址用于读取具体数据,两者配合可覆盖大多数诊断场景。
CDD 文件版本必须与 ECU 软件版本对应。若 ECU 升级后新增了 DID 或安全算法,而 CDD 未同步更新,CANoe 面板中不会出现新服务,测试会误判为“ECU 不支持”。