十八、自动化进阶(使用python生成config.cin文件)(专栏:从零开始搭建一个UDS诊断自动化测试CANoe工程)

本文档介绍了如何使用Python从Excel数据生成CANoe配置文件config.cin,以实现UDS诊断自动化测试。通过定义Excel填写标准,使用PyQT创建工具读取数据并生成cin文件,提高不同项目间的适配性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

专栏:从零开始搭建一个UDS诊断自动化测试CANoe工程



前言

本专栏将从零开始搭建一个用于UDS诊断服务的CANoe测试工程,基于CAN/CANFD总线,可以手动测试,也可自动化测试,使用XML测试节点实现。目前使用cdd及diva可以快速生成uds诊断的测试用例及工程,任有部分用例无法涉及或配置比较复杂。本工程主要实现功能如下:

  • CAN/CANFD可以配置选择。
  • 诊断ID可通过面板配置,工程运行过程也可以修改,cdd的诊断id是固定的。
  • 通过osek_tp.dll实现诊断服务的接收和发送。
  • 物理寻址,功能寻址可以配置。
  • 实现27服务安全解锁的框架,具体算法需要根据不同厂商自己去实现。虽然制作dll文件同样可以(按照CANoe模板制作seed&&key.dll),但是针对一些mask如果要修改,在CAPL里实现更方便。
  • 实现DTC的解析,19服务读出的诊断报文,解析这条报文中的dtc及dtc的状态,二进制同样打印出来。
  • 设计一些常用的诊断服务按钮,包括10服务会话切换,27服务解锁,19服务读dtc,14服务清dtc等。
  • 实现XML测试节点的UDS诊断服务测试框架,不一定实现所有用例,可基于此二次开发。

bootloader功能主要是36

<think>好的,用户现在问的是,不用CDD文件怎么搭建一个支持UDS诊断CANoe工程。首先,我需要回顾之前的对话历史。用户之前询问了DoIP诊断是否需要CDD文件,现在接着问如何不用CDD文件CANoe中实现UDS诊断。这说明用户可能在使用Vector的工具链,但可能没有CDD文件,或者想了解替代方法。 首先,我需要确认用户的需求。他们可能没有CDD文件,但希望使用CANoe进行UDS诊断。CDD文件通常是Vector工具链中的关键文件,用于生成诊断数据库,所以如果没有CDD,就需要其他方法。用户可能是开发者或者测试工程师,需要在没有CDD的情况下配置工程,可能因为资源限制,或者ECU供应商没有提供CDD文件。 接下来,我需要考虑不用CDD文件的替代方案。可能的替代方法包括手动配置诊断参数、使用ODX文件,或者通过CAPL脚本模拟。需要详细说明每个步骤,确保用户能够按照指导操作。 然后,我需要验证这些方法的可行性。例如,手动配置需要用户了解UDS服务的具体细节,如SID、DID、DTC等,这可能比较繁琐。而使用ODX文件需要用户有对应的ODX文件,这可能也需要供应商支持。CAPL脚本的方法则适用于简单测试,但扩展性可能不足。 此外,需要考虑用户可能遇到的问题,比如如何设置通信参数,如何确保请求和响应的正确格式,如何处理不同的UDS服务等。需要分步骤详细说明,避免遗漏关键点。 还要注意用户可能对CANoe的功能不太熟悉,可能需要解释一些基本概念,比如诊断控制台、CAPL脚本的使用等。同时,提醒用户手动配置的缺点,比如维护困难,容易出错,适合简单场景,而复杂项目还是建议使用标准文件。 最后,总结步骤,给出操作建议,并建议用户在可能的情况下获取标准文件,以确保长期维护的便利性。同时,提供示例代码,帮助用户更快上手。</think>**不用CDD文件搭建支持UDS诊断CANoe工程的逐步指南** --- ### **1. 核心思路** CDD文件主要用于**自动化生成诊断数据库**。若无CDD文件,需**手动配置诊断服务参数**,并通过CAPL脚本或诊断控制台直接发送UDS请求。以下是关键步骤: --- ### **2. 准备工作** 1. **硬件连接**: - 确保CANoe硬件接口(如VN1600)与ECU的通信链路正常(CAN/CAN FD、以太网等)。 2. **工程基础配置**: - 在CANoe中创建新工程,配置正确的通信通道和协议(如CAN、DoIP)。 --- ### **3. 手动配置诊断参数(无需CDD)** #### **步骤3.1:定义诊断层(Diagnostic Layer)** 1. 进入 **Diagnostics & XCP** → **Diagnostic Configuration**。 2. 右键 **Diagnostic Descriptions** → **Add Diagnostic Description**。 3. 选择 **ISO-TP (UDS on CAN)** 或 **UDS over DoIP**(根据实际协议)。 4. 手动输入以下参数: - **物理寻址(Physical Addressing)**:ECU的默认地址(如`0x7E0`)。 - **功能寻址(Functional Addressing)**:如需要广播请求,设置对应地址(如`0x7DF`)。 - **通信参数**:波特率、CAN ID格式(标准帧/扩展帧)、ISO-TP参数(BS/STmin)等。 #### **步骤3.2:定义诊断服务** 1.诊断描述文件中,右键 **Services** → **Add Service**。 2. 手动输入UDS服务参数: - **SID(Service Identifier)**:如`0x10`(会话控制)、`0x22`(读DID)。 - **请求格式**:定义请求报文的数据格式(例如`10 02`表示进入扩展会话)。 - **响应格式**:定义正响应(如`50 02`)和负响应(如`7F 10 22`)的格式。 - **DID(Data Identifier)**:若需读/写特定数据,需手动添加DID及其长度(如`0xF190`对应2字节数据)。 --- ### **4. 通过CAPL脚本实现诊断交互** #### **示例:发送UDS请求并解析响应** ```CAPL variables { message 0x7E0 TxMsg; // 物理请求报文 message 0x7E8 RxMsg; // 物理响应报文 } on start { // 示例:发送进入扩展会话(0x10 0x03) TxMsg.DLC = 2; TxMsg.byte(0) = 0x02; // 单帧,长度=2 TxMsg.byte(1) = 0x10; // SID=0x10 TxMsg.byte(2) = 0x03; // 子服务=扩展会话 output(TxMsg); } on message RxMsg { if (this.byte(0) == 0x02 && this.byte(1) == 0x50) { write("成功进入扩展会话!"); } else if (this.byte(0) == 0x03 && this.byte(1) == 0x7F) { write("请求失败,NRC=0x%02X", this.byte(3)); } } ``` --- ### **5. 使用诊断控制台(Diagnostic Console)** 1. 打开 **Diagnostics** → **Diagnostic Console**。 2. 手动输入UDS指令: - 格式:`<服务ID> <子功能/参数>`,例如: - 读取DID `F190`:`22 F1 90` - 清除DTC:`14 FF FF FF` --- ### **6. 替代方案:使用ODX文件** 若无法获得CDD文件,但能获取ODX文件: 1.CANoe中导入ODX文件: - **Diagnostics** → **ODX/PDX** → **Import Database**。 2. CANoe会自动解析ODX并生成诊断服务列表,无需手动配置。 --- ### **7. 注意事项** - **手动配置的局限性**: - 需完全掌握ECU支持的UDS服务及DID/DTC定义。 - 维护成本高,易出错,仅适合简单测试或临时使用。 - **推荐做法**: - 长期项目建议向ECU供应商索取CDD或ODX文件。 - 复杂诊断逻辑(如安全访问、刷写流程)建议结合CAPL脚本实现自动化。 --- **总结**:通过手动配置诊断层、CAPL脚本或ODX文件,可在无CDD文件搭建UDS诊断工程,但效率和可靠性低于使用标准数据库文件
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天赐好车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值