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)。拓扑关联的本质是保证“诊断请求从哪个通道发出、由哪个节点接收、响应沿哪条路径返回”三者一致。
四、配置完成后的自检与常见问题
配置完成后不要急于跑用例,先做一次最小闭环验证:发送 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 核对。