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

【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑮】

ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase15

作者:车端域控测试工程师
更新日期:2025年02月18日
关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023

TC11-015测试用例

用例ID测试场景验证要点参考条款预期结果
TC11-015复位与编程会话联动在编程会话中执行硬件复位§8.3.3复位后自动退出编程会话

以下是为TC11-015设计的工业级CAPL测试用例,包含多会话管理验证与增强型状态追踪机制:

/*----------------------------------------------------------
  Title:TC11-015 复位与会话联动验证 
  作者:车端域控测试工程师   
  版本:V2.1(CANoe 12.0优化版)
------------------------------------------------------------*/
 
variables {
  // 诊断协议参数 
  const long DiagReqID = 0x701;       // 诊断请求ID 
  const long DiagResID = 0x709;       // 诊断响应ID 
  const byte ProgSession = 0x02;      // 编程会话 
  const byte ResetSubFunc = 0x01;     // 硬件复位 
  const byte SID_Reset = 0x11;        // 复位服务 
  const byte SID_Session = 0x10;      // 会话控制 
  const byte DefSession = 0x01;       // 默认会话 
  
  // 状态追踪变量 
  byte currentSession = 0xFF;         // 当前会话状态 
  msTimer sessionCheckTimer;          // 会话验证定时器 
}
 
testcase TC11_015_SessionResetTest() 
{
  TestModuleTitle("TC11-015 复位与会话联动验证");
  
  // ███ 阶段1:进入编程会话 ███ 
  testStep("STEP1 激活编程会话");
  diagRequest EnterProgSession: SID_Session(ProgSession);
  diagSendRequest(EnterProgSession);
  
  if(diagWaitForPositiveResponse(500)) {
    testStepPass("成功进入编程会话");
    currentSession = ProgSession;
  } else {
    testCaseFail("会话切换失败");
    return;
  }
 
  // ███ 阶段2:执行硬件复位 ███ 
  testStep("STEP2 发送硬件复位请求");
  message DiagReqID [CAN] {
    dlc = 2;
    byte(0) = SID_Reset;
    byte(1) = ResetSubFunc;
  }
  output(this);
  
  // ███ 阶段3:会话状态追踪 ███ 
  testStep("STEP3 验证会话回退");
  setTimer(sessionCheckTimer, 1000);  // 1秒验证窗口 
  
  while(getTimer(sessionCheckTimer) < 1000) 
  {
    // 方法1:主动查询会话状态 
    diagRequest ReadActiveSession: 0x22 0x86;  // 通过DID读取 
    diagSendRequest(ReadActiveSession);
    
    if(diagWaitForPositiveResponse(200)) {
      currentSession = this.byte(2);  // 假设会话状态在第三字节 
      break;
    }
    
    // 方法2:被动检测默认会话特征 
    if(TestWaitForMessage(DiagResID, 50)) {
      if(this.byte(0) == 0x7F && this.byte(1) == 0x10) {
        currentSession = DefSession;
        break;
      }
    }
    
    testWait(100);
  }
 
  // ███ 阶段4:综合结果判定 ███ 
  testStep("STEP4 最终状态确认");
  switch(currentSession) {
    case DefSession:
      testCasePass("成功退回默认会话");
      break;
    case ProgSession:
      testCaseFail("会话维持异常");
      break;
    default:
      testCaseFail("会话状态未知(0x%02X)", currentSession);
  }
}
 
/*----------------------------------------------------------
  增强型会话监控模块(CANoe 12.0新特性)
----------------------------------------------------------*/
on diagResponse *
{
  // 实时捕获所有诊断响应 
  if(this.serviceId == 0x50) {  // 会话控制响应 
    testAddLog("会话变更通知 @%dms", timeNow());
  }
}
 
on sysvar ECU::SessionState 
{
  // 绑定ECU内部会话状态变量(需ECU支持)
  currentSession = @this::SessionState;
  testAddLog("会话状态更新: 0x%02X", currentSession);
}

流程图解(执行逻辑可视化)

Tester ECU 10 02 (进入编程) 50 02 (确认) 11 01 (硬件复位) 51 01 (响应) 执行复位操作 22 86 (查询会话) 62 86 01 (默认会话) Tester ECU

关键参数说明表

参数名称示例值工程校准要点
编程会话ID0x02OEM特定定义
会话查询DID0x86需与ECU诊断规范一致
状态轮询间隔100ms平衡检测精度与总线负载
复位响应超时500ms覆盖ECU最长处理时间

工业级增强功能

// 压力测试扩展模块 
void ExecuteStressTest() {
  // 可扩展:
  // 1. 连续执行50次会话切换+复位 
  // 2. 异常供电场景测试(快速断电重启)
  // 3. 总线错误注入测试 
}
 
// 安全状态监控 
on errorFrame {
  testAddLog("总线错误计数: %d", this.errorCount);
}
 
// 使用CANoe 12.0新增API 
on sysvar Diag::SecurityLevel changed {
  testAddLog("安全等级变更: %d → %d", 
            @this::SecurityLevel.oldValue, 
            @this::SecurityLevel);
}

测试执行说明

  1. 环境预配置

    [Diagnostic]
    P2Server_Extended = 5000 
    SuppressPosResponse = On 
    
    [ECU_Config]
    SessionTimeout = 5000 
    
  2. 结果判定矩阵

    检查项通过标准验证方法
    复位响应时效≤300ms时间戳分析
    会话回退完整性100%退回默认会话状态机验证
    功能恢复性基础诊断服务可用服务遍历测试

专试技巧:

  1. 使用CANoe 12.0的Trace Filter快速定位关键事件:
    (id == 701h && (byte(0) == 10h || byte(0) == 11h)) || 
    (id == 709h && byte(0) in [50h,51h,7Fh])
    
  2. 利用Graphic Window监控关键信号:
    sysvar::ECU::SessionState 
    sysvar::Diag::ResponseTime 
    sysvar::ECU::ResetCounter 
    
  3. 配置Break Condition进行深度调试:
    break when (sysvar::ECU::SessionState == 0xFF)
    

典型问题排查指南

异常现象排查方向工具支持
会话维持异常1. NVM配置参数校验
2. 看门狗触发机制
工程诊断仪/刷新工具
复位响应丢失1. 总线终端电阻匹配
2. ECU固件版本验证
示波器/版本管理系统
状态查询超时1. 任务调度优先级配置
2. 内存分配检测
静态代码分析工具

http://www.kler.cn/a/551474.html

相关文章:

  • 【js逆向_入门】图灵爬虫练习平台 第四题
  • mybatis存储过程返回list
  • Helm快速开始
  • 【SQL】SQL多表查询
  • Windows系统安装GPU驱动
  • 数据分析的AI+流程(个人经验)
  • 一笔画-获取图像轮廓坐标点
  • JavaScript设计模式 -- 迭代器模式
  • vmware下ubuntu无法上网,电脑通过wifi连网
  • 罗德与施瓦茨ZNB4,4.5GHz网络分析仪的佼佼者
  • openGauss 3.0 数据库在线实训课程18:学习视图管理
  • 基于Qlearning强化学习的1DoF机械臂运动控制系统matlab仿真
  • 【GPIO详解及实践示例】
  • Leetcode 3459. Length of Longest V-Shaped Diagonal Segment
  • 大数据学习(48) - Flink状态种类
  • 李代数和李群的转化方法
  • Openssl交叉编译
  • 项目流程图
  • BSD协议栈:UDP发送
  • Python中通过Pymysql连接MySQL