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

【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.kler.cn/a/550855.html

相关文章:

  • 软件考研,选择华科还是科软?
  • Llama3.0论文学习笔记: The Llama 3 Herd of Models
  • Unity学习part3
  • ubuntu24基于虚拟机无法从主机拖拽文件夹
  • 数据结构:栈(Stack)及其实现
  • 在 UniApp 项目中设置多语言
  • GO语言中的悲观锁与乐观锁
  • Python排序算法详解
  • 坐井说天阔---DeepSeek-R1
  • 设计模式2:单例模式
  • Docker 容器日志与监控
  • 【对比】Pandas 和 Polars 的区别
  • Unity截取RenderTexture某帧画面显示在Image上
  • Leetcode 算法题 88. 合并两个有序数组
  • 802.3 两种格式
  • Redis 10章——集群(cluster)
  • 服务器A到服务器B免密登录
  • 【拒绝算法PUA】LeetCode 1287. 有序数组中出现次数超过25%的元素
  • maven使用默认settings.xml配置时,Idea基于pom.xml更新依赖时报错,有些组件下载时连接超时
  • 解锁JavaScript新姿势:Set数据结构深度解析