八、UDS自动化测试(正负响应)(专栏:从零开始搭建一个UDS诊断自动化测试CANoe工程)

本文档介绍了从零开始搭建UDS诊断自动化测试CANoe工程的过程,涵盖正负响应测试、物理寻址和功能寻址的发送及接收函数。工程支持CAN/CANFD配置,具有灵活的诊断ID配置,并提供了27服务安全解锁的框架。内容包括常用诊断服务的测试用例,如10服务的正负响应测试,强调了测试逻辑的通用性。

专栏:从零开始搭建一个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服务的实现,还不确定要不要实现及介绍。
此工程拿来即可使用,除27服务算法那块需要自己去实现,诊断id,can/canfd都可配置。测

搭建UDS诊断自动化测试环境并实现Bootloader刷写功能时,CANoe一个非常强大的工具,它支持基于CAPL语言编写脚本,实现完整的UDS诊断流程,包括Bootloader刷写过程。以下是一个完整的实现方案,涵盖测试环境搭建、脚本编写、以及Bootloader刷写功能的实现。 ### 3. UDS诊断自动化测试环境搭建CANoe搭建UDS诊断自动化测试环境,首先需要配置通信接口(如CAN或CAN FD)、ECU仿真节点、诊断数据库(如CDD或DBC文件)以及CAPL测试脚本。CANoe支持通过Simulation Setup配置ECU节点,模拟ECU响应诊断请求。此外,还需配置诊断描述文件(CDD),以定义诊断服务、子功能、数据标识符等。 测试脚本通常使用CAPL语言编写,CAPL支持事件驱动编程,能够响应总线报文、定时器、系统变量等事件。测试流程可包括连接ECU、发送诊断请求、接收响应、验证响应数据等步骤。 ```capl on start { diagInit(); diagSetECU("MyECU"); diagSetTester("Tester"); diagConnect(); } ``` ### 3.1 Bootloader刷写流程实现 Bootloader刷写通常涉及以下UDS服务: - **0x10 Service (Diagnostic Session Control)**:切换诊断会话模式,进入Bootloader模式。 - **0x27 Service (Security Access)**:安全访问,解锁Bootloader刷写权限。 - **0x36 Service (Transfer Data)**:传输刷写数据块。 - **0x37 Service (Request Transfer Exit)**:结束数据传输。 - **0x31 Service (Routine Control)**:执行刷写前的擦除操作。 - **0x83 Service (Access Timing Parameter)** 和 **0x84 Service (Secure Data Transmission)**:可选配置项。 以下是一个简化版的Bootloader刷写CAPL脚本示例: ```capl void enterBootloader() { byte session = 0x03; // Extended Session diagSendRequest("10 03", session); if (diagCheckPositiveResponse("7F")) { write("Failed to enter bootloader mode."); } } void securityAccess() { byte seed[4]; diagSendRequest("27 01"); diagGetResponse(seed, elCount(seed)); // 生成密钥(示例逻辑) byte key[4]; key[0] = seed[3]; key[1] = seed[2]; key[2] = seed[1]; key[3] = seed[0]; diagSendRequest("27 02", key, elCount(key)); } void transferData() { byte blockSequenceCounter = 0x01; byte data[7]; // 示例数据 data[0] = 0x01; data[1] = 0x02; data[2] = 0x03; data[3] = 0x04; data[4] = 0x05; data[5] = 0x06; data[6] = 0x07; diagSendRequest("36 01", blockSequenceCounter, data, elCount(data)); } ``` ### 3.2 自动化测试与验证 在实现Bootloader刷写后,自动化测试应包括以下方面: - 验证各UDS服务是否响应。 - 检查刷写过程中数据完整性(CRC校验)。 - 验证刷写完成后ECU是否能常启动。 - 记录测试日志并生成测试报告。 可以通过CAPL编写自动化测试用例,例如: ```capl on diagResponse "10 03" { if (diagPositiveResponse()) { write("Successfully entered bootloader mode."); } else { write("Failed to enter bootloader mode."); } } ``` ### 3.3 扩展功能与优化 为了提升自动化程度,可以结合外部设备控制,如程控电源、示波器等,实现完整的刷写流程自动化。此外,如果项目涉及DoIP协议,CANoe同样支持基于以太网的诊断通信,只需调整底层通信方式,上层UDS服务逻辑可复用。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天赐好车

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

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

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

打赏作者

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

抵扣说明:

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

余额充值