CANoeUDS诊断测试
本帖最后由 flyingstar01 于 2025-4-8 11:31 编辑使用 **CANoe** 进行 **UDS 诊断测试** 时,可以通过两种主要方式来实现测试:**有CDD文件** 和 **无CDD文件**。

**CDD文件**是基于 **ASAM MCD-2D** 标准格式的描述文件,提供了车辆诊断通信所需的详细描述,包括诊断服务、参数、PDU格式等。

通过导入 CDD 文件,CANoe 可以自动解析和识别ECU支持的UDS诊断服务及相关数据格式,从而提供更高效和自动化的测试过程。
在没有 CDD 文件的情况下,诊断测试通常依赖手动配置或脚本编写进行服务的调用。
这意味着,测试人员需要自行指定每个诊断服务的服务ID、参数ID、数据格式等。

1
**Diagnostics/ISO-TP Configuration窗口**
可以直接在Diagnostics/ISO-TP Configuration窗口导入CDD文件,通常CDD文件中设置好了传输层和诊断层参数。

加载 **CDD 文件** 后,会自动弹出两个窗口:**“Fault Memory”(故障**)** 和 **“Session Control”(会话控制)**。
如果使用 **CANoe** 自带的 **“Basic Diagnostic Editor”(基本诊断编辑器)** 模板(即没有 **CDD 文件**),则这两个窗口将被置为灰色,无法进行操作。

如果没有CDD文件,就需要根据诊断问卷调查表在Diagnostics/ISO-TP Configuration窗口设置传输层和诊断层参数。

1.1、设置传输层参数
点击 **“Transport Layer”** 打开 **“Configure Transport Layer (CAN)”** 界面,对传输层参数进行设置。主要设置项包括 **“Addressing”(诊断地址信息)** 和 **“Additional ISO TP Protocol Parameters”(TP协议参数)。**
Addressing(诊断地址信息) 包括请求地址、物理寻址和功能寻址。一般来说,诊断地址以 **0x7** 开头。ECU 所支持的诊断服务通常都支持物理寻址。功能寻址仅支持以下服务:**10**、**11**、**28**、**3E**、**85**、**22**、**14**、**19**,即不支持 **31**、**2E**、**2F**、**34**、**36**、**37**。

**Additional ISO TP Protocol Parameters(TP协议参数)**
**STmin**:接收方发送流控帧之后,发送方发送连续帧之间的最小时间间隔。**Block size**:接收方发送流控帧后,发送方可以连续发送的最大帧数。如果该值为 0,则表示没有连续帧数目的限制。**FC delay**:CANoe 收到首帧或连续帧后,延迟回复流控帧的时间。**Max. length**:最大传输数据长度,通常取最大值 **4095**(3 位 DLC 最大值)。
**Mixing of CAN 2.0 and FD frames**
此项设置表示是否兼容 **CAN** 帧和 **CAN-FD** 帧。
其选项说明如下:
**Ignore**:两者不兼容。如果配置为 **CAN** 帧,**CANoe** 不接受 **CAN-FD** 帧;如果配置为 **CAN-FD** 帧,则不支持 **CAN** 帧。**Accept**:兼容。当配置为 **CAN** 帧时,**CANoe** 可以接受 **CAN-FD** 帧,但返回的是 **CAN** 帧。**Adapt**:兼容。当配置为 **CAN** 帧时,**CANoe** 可以接受 **CAN-FD** 帧,但返回的是 **CAN-FD** 帧。
1.2、配置诊断层参数
点击 **“Diagnostic Layer”** 打开 **“Configure Diagnostic Layer (CAN)”** 界面,进行 **Tester Present** 参数的设置。

**设置“Tester Present”参数**
勾选 **“Send Tester Present”**,选择** “Manually defined”**,并填写会话保持诊断报文,通常为** “0x3E 00”**。
接着,设置 **“S3 client time”**,即会话保持报文发送的周期。
**UDS诊断中的 0x3E 服务**主要作用是确保诊断服务或之前激活的通信仍然处于激活状态,从而保持当前的非默认会话(Default Session)。通过周期性发送请求帧,防止自动跳回默认会话。
在实际应用中,当进行 **DID(Data Identifier)写入** 时,通常需要进入用户自定义会话(Custom Session),并且可能需要通过 **0x27 服务** 达到特定的安全等级。为了在写入 **DID** 时确保这些服务保持激活状态,可以使用 **0x3E** 服务定期发送会话保持报文。
添加好会话保持报文并勾选 **“Send Tester Present”** 后,后续只需通过点击 **CANoe** 中的 **“Tester Present On”** 功能,即可自动发送或停止会话保持报文,轻松实现会话保持功能。
**根据诊断信息表设置“Timing”参数**
“Timing” 参数需根据诊断信息表进行设置,通常由 OEM 或 ECU 开发方提供。具体参数如下:
**S3 client time**:诊断仪(如 **CANoe**)自动发送会话保持报文(0x3E 服务)的周期。**S3 server time**:停止发送会话保持报文后的最大时间,ECU 保持在非默认会话的时间。**P2 client**:诊断仪(如 **CANoe**)发送请求报文到接收到回复的时间间隔。**P2 server**:ECU 收到请求报文到开始回复的时间间隔。**P2 extended client**:诊断仪(如 **CANoe**)收到 **NRC 78** 错误后,到下一次回复的时间间隔。**P2 extended server**:ECU 发送完 **NRC 78** 错误后,到下一次回复的时间间隔。
**注意**:
**P2 client** 的值必须大于 **P2 server** 的值。同理,**P2 extended client** 必须大于 **P2 extended server**。
**“Security Access” - 安全访问配置**
**Seed & Key DLL**:用于 **27 服务** 安全解锁。为了保护 ECU 数据不被误改,许多诊断服务要求在不同的安全访问等级下进行访问。
在 **CANoe** 中,用户需要配置自定义的动态链接库(DLL)文件,提供解锁安全访问的算法。该 **DLL** 文件通常由 OEM 或 Tier 1 提供。
加载该文件后,当需要解锁时,只需在诊断控制台手动点击 **27 服务**,即可完成解锁操作。
若没有提供此 **DLL 文件**,也可以根据安全算法编写 **CAPL** 脚本来实现解锁功能。
2
Basic Diagnostic Editor窗口
没有CDD文件,根据诊断问卷调查表在Diagnostics/ISO-TP Configuration窗口设置好传输层和诊断层参数后,需要在Basic Diagnostic Editor窗口手动创建诊断服务。
这是 **CANoe** 自带的模板,我们需要根据诊断信息表中的服务汇总,在每个服务的框架下手动添加项目所需的子服务,右键选择“Add New Service”可以添加子服务。

可以根据CAN矩阵和诊
断问卷调查表设置请求和响应的数据,例如以下操作:


3
Diagnostic Console窗口
在Diagnostic Console 窗口中可以选择进行发送诊断请求和查看响应。

点击建立好的子服务按钮,就可以测试发送诊断请求。

CDD文件确实能大幅提高测试效率,但如果没有CDD文件,手动配置和脚本编写也是可行的,就是工作量会大一些。
页:
[1]