当前位置: 首页 > news >正文

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

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后,通过以下步骤执行:

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

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

http://www.lryc.cn/news/539333.html

相关文章:

  • 前端新手必看:10 大 UI 组件库全面解析,快速搭建高质量 Web 应用」 「从零开始:Vue 和 React 最受欢迎的 UI 组件库入门指南」 「超实用!PC 端和移动端 UI 组件库推荐与实战
  • 【MySQL高级】17 - MySQL中常用工具
  • 【Linux】Linux 文件系统——有关 inode 不足的案例
  • 计算机视觉:卷积神经网络(CNN)基本概念(二)
  • 【第7章:注意力机制与Transformer模型—7.4 NLP领域的BERT、GPT系列模型】
  • [代码调试]安装Text2Image(stable diffusion)模型环境的踩坑记录
  • 大数据SQL调优专题——Flink执行原理
  • Oracle 12c中在同一组列上创建多个索引
  • 线程安全的集合类
  • 【如何实现 JavaScript 的防抖和节流?】
  • C#中File类的Copy()方法或FileInfo类的CopyTo()方法的参数overwrite取false和true的区别
  • 力扣 买卖股票的最佳时机
  • 蚁剑(AutSword)的下载安装与报错解决
  • 【全栈开发】----Mysql基本配置与使用
  • Spring Boot项目的基本设计步骤和相关要点介绍
  • 【Spring快速入门】不断更新...
  • nodejs版本管理,使用 nvm 删除node版本,要删除 Node.js 的某个版本详细操作
  • HTML之JavaScript DOM(document)编程处理事件
  • 5.【线性代数】—— 转置,置换和向量空间
  • 移动通信发展史
  • Python MoviePy 视频处理全攻略:从入门到实战案例
  • uniapp webview嵌入外部h5网页后的消息通知
  • macos安装jmeter测试软件
  • 【virtiofs】ubuntu24.04+qemu7.0调试virtiofs
  • DeepSeek 和 ChatGPT 在特定任务中的表现:逻辑推理与创意生成
  • MoE硬件部署
  • MYSQL中的性能调优方法
  • Day48(补)【AI思考】-设计模式三大类型统一区分与记忆指南
  • 公牛充电桩协议对接单车汽车平台交互协议外发版
  • 大语言模型内容安全的方式有哪些