【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析②】

news/2025/2/21 13:10:48/

ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase02

作者:车端域控测试工程师
更新日期:2025年02月15日
关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023

TC10-002测试用例

用例ID测试场景验证要点参考条款预期结果
TC10-002扩展会话超时管理S3定时器超时后自动返回默认会话Annex A.3超时60s±5%触发会话切换
/*-------------------------------------------------------------------测试用例 TC10-002:扩展会话超时管理 标准依据:ISO 14229-1 Annex A.3 验证目标:S3定时器超时后自动返回默认会话 时间要求:60s±5%(57s-63s)
-------------------------------------------------------------------*/
variables {message 0x7E0 DiagReq = {dlc=8};  // 诊断请求报文 message 0x7E8 DiagRes;           // 诊断响应报文 msTimer sessionTimer;            // 会话计时器 dword sessionStartTime;          // 会话开始时间戳 byte currentSession;             // 当前会话状态 
}testcase TC10_002_SessionTimeout() 
{//==================== 测试初始化 ====================sysSetVariable("Diag::Session", 0x01);  // 强制重置为默认会话 currentSession = 0x01;//==================== 激活扩展会话 ====================DiagReq.byte(0) = 0x10;          // 诊断会话控制服务 DiagReq.byte(1) = 0x03;          // 子功能:扩展会话 DiagReq.dlc = 2;output(DiagReq);// 等待正响应 testWaitForMessage(0x7E8, 1000);if(DiagRes.byte(0) != 0x50 || DiagRes.byte(1) != 0x03) {testStepFail("扩展会话激活失败");return;}sessionStartTime = timeNow();    // 记录会话激活时间 write("扩展会话激活时间:%d ms", sessionStartTime);//==================== 超时监控 ====================setTimer(sessionTimer, 65000);   // 设置65秒监控周期 write("开始监测会话超时...");// 定时器回调处理 on timer sessionTimer {dword elapsedTime = timeNow() - sessionStartTime;currentSession = sysGetVariable("Diag::Session");// 验证时间窗口和会话状态 if(currentSession == 0x01) {if(elapsedTime >= 57000 && elapsedTime <= 63000) {testStepPass("定时器在%0.1fs触发切换(符合57-63s要求)", elapsedTime/1000.0);} else {testStepFail("切换时间异常:%0.1fs", elapsedTime/1000.0);}} else {testStepFail("会话未切换,当前状态:0x%02X", currentSession);}}// 等待测试完成 testWaitForTimeout(66000);
}/*------------------------- 执行日志示例 ------------------------- 
[2025-02-15 09:55:12] TC10-002 测试启动 
[2025-02-15 09:55:12] 发送请求: 10 03 @ 7E0 
[2025-02-15 09:55:12] 收到响应: 50 03 @ 7E8 
[2025-02-15 09:55:12] 会话激活时间:43650000 ms 
[2025-02-15 09:56:15] 定时器在61.3s触发切换(符合57-63s要求)
[2025-02-15 09:56:15] 测试通过 
----------------------------------------------------------------*/

代码执行流程图

测试系统 ECU 10 03 (扩展会话) 50 03 (正响应) 启动65秒计时器 监控会话状态 当前会话状态 loop [超时监控] 验证切换时间和状态 测试系统 ECU

关键实现说明

  1. 时间窗口验证逻辑
if(elapsedTime >= 57000 && elapsedTime <= 63000) {// 符合±5%精度要求 
}
  1. 会话状态实时监控
on sysvar Diag::Session {currentSession = @this;  // 实时捕获会话状态变化 write("会话状态变更:0x%02X @ %dms", currentSession, timeNow());
}
  1. 容错机制设计
// 增加网络静默检测 
testWaitForBusSilence(1000);  // 确保测试期间无其他通信 

测试数据记录表

测试轮次触发时间(s)会话状态测试结果
158.90x01PASS
262.10x01PASS
356.80x03FAIL
463.50x01FAIL

常见问题处理方案

  1. 超时时间偏差过大

    • 检查ECU配置参数:
      sysGetParameter("Diag::S3_Timeout"); // 读取实际配置值 
      
    • 使用示波器监控硬件唤醒信号
  2. 会话状态未切换

    • 添加诊断服务重试机制:
      for(int i=0; i<3; i++) {output(DiagReq);if(testWaitForMessage(0x7E8, 1000)) break;
      }
      
  3. 偶发性测试失败

    • 增加预测试环境检查:
      if(sysGetVariable("PowerVoltage") < 11.5) {testStepWarning("电压不稳定:%.1fV", sysGetVariable("PowerVoltage"));
      }
      

操作建议:

  1. 测试前使用sysSetParameter("Diag::DebugMode", 1)开启调试模式
  2. 配合CANoe的Graphics窗口可视化定时器状态
  3. 建议在-40°C、25°C、85°C三个温度点执行测试
  4. 完整测试需包含500次压力测试循环

CANoe_Test_Module_173">将代码复制到CANoe Test Module后,通过以下步骤执行:

  1. 配置ECU工程文件加载诊断数据库
  2. 设置系统变量Diag::Session的监控
  3. 运行测试用例并查看生成的HTML报告

遇到技术问题可在评论区留言,建议配合使用CANoe的实时曲线功能监控时间参数。


http://www.ppmy.cn/news/1573459.html

相关文章

推荐几款较好的开源成熟框架

一. 若依&#xff1a; 1. 官方网站&#xff1a;https://doc.ruoyi.vip/ruoyi/ 2. 若依SpringBootVueElement 的后台管理系统&#xff1a;https://gitee.com/y_project/RuoYi-Vue 3. 若依SpringBootVueElement 的后台管理系统&#xff1a;https://gitee.com/y_project/RuoYi-Cl…

动手学深度学习11.7. AdaGrad算法-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;72 优化算法【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址&#xff1a;11.7. AdaGrad算法…

kafka为什么这么快?

前言 Kafka的高效有几个关键点&#xff0c;首先是顺序读写。磁盘的顺序访问速度其实很快&#xff0c;甚至比内存的随机访问还要快。Kafka在设计上利用了这一点&#xff0c;将消息顺序写入日志文件&#xff0c;这样减少了磁盘寻道的时间&#xff0c;提高了吞吐量。与传统数据库的…

Python图形界面(GUI)Tkinter笔记(二十四):Frame框架功能控件

Frame控件,也就是我们通常所说的框架,它是一个非常重要的容器控件。它本身并不直接参与与用户的交互过程,而是扮演着一个组织者和管理者的角色,主要负责组织和管理其他控件的布局。简单来说,它的工作原理就像是把原本的“根窗口”或者“父窗口”划分成几个独立的“子窗口”…

【HarmonyOS Next】图片选择方案

背景 封装一个选择图片和调用拍照相机的按钮&#xff0c;展示api13下选择图片和调用相机&#xff0c;可以使用不申请用户权限的方式&#xff0c;进行图片的选择和修改。但是&#xff0c;目前方案并未包含上传图片保存的功能&#xff0c;仅提供图片选择或者拍照后&#xff0c;图…

PostgreSQL认证指南

PostgreSQL 作为一款强大的开源关系型数据库&#xff0c;深受开发者和企业的青睐。获得 PostgreSQL 专家认证&#xff0c;不仅能提升个人在数据库领域的专业能力&#xff0c;还能为职业发展增添有力筹码。下面为大家详细介绍 PostgreSQL 专家认证的学习路径。 一、深入理解基础…

c/c++蓝桥杯经典编程题100道(22)最短路径问题

最短路径问题 ->返回c/c蓝桥杯经典编程题100道-目录 目录 最短路径问题 一、题型解释 二、例题问题描述 三、C语言实现 解法1&#xff1a;Dijkstra算法&#xff08;正权图&#xff0c;难度★★&#xff09; 解法2&#xff1a;Bellman-Ford算法&#xff08;含负权边&a…

腾讯的webUI怎样实现deepseek外部调用 ; 腾讯云通过API怎样调用deepseek

腾讯的webUI怎样实现deepseek外部调用 目录 腾讯的webUI怎样实现deepseek外部调用腾讯云通过API怎样调用deepseekhtml方式curl方式python方式腾讯云通过API怎样调用deepseek 重点说明:不需要SK,仅仅使用ip和端口号 html方式 <!DOCTYPE html> <html lang="e…