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

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

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

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

TC10-003测试用例

用例ID测试场景验证要点参考条款预期结果
TC10-003编程会话安全校验未通过安全访问时禁止进入编程会话§7.4.2返回NRC=0x33(安全访问拒绝)
/*-------------------------------------------------------------------
  测试用例 TC10-003:编程会话安全校验 
  标准依据:ISO 14229-1 §7.4.2 
  验证目标:未通过安全访问时禁止进入编程会话 
  预期响应:NRC=0x33(securityAccessDenied)
-------------------------------------------------------------------*/
variables {
  message 0x7E0 DiagReq = {dlc=8};  // 诊断请求报文 
  message 0x7E8 DiagRes;           // 诊断响应报文 
  msTimer securityTimer;           // 安全状态监测计时器 
  byte currentSession;             // 当前会话状态跟踪 
  byte securityLevel;              // 安全访问级别 
}
 
testcase TC10_003_ProgrammingSessionSecurity() 
{
  //==================== 预置条件设置 ====================
  // 强制重置诊断会话和安全状态 
  sysSetVariable("Diag::Session", 0x01);  // 默认会话 
  sysSetVariable("Security::Unlocked", 0); // 安全锁状态 
  currentSession = 0x01;
  securityLevel = 0x00;
  
  // 验证初始状态 
  if(sysGetVariable("Diag::Session") != 0x01) {
    testStepAbort("初始化失败:ECU未处于默认会话");
  }
 
  //==================== 测试步骤执行 ====================
  // 步骤1:直接尝试进入编程会话 
  DiagReq.byte(0) = 0x10;          // 诊断会话控制服务 
  DiagReq.byte(1) = 0x02;          // 编程会话 
  DiagReq.dlc = 2;
  output(DiagReq);                 // 发送请求 
  
  //==================== 响应验证 ====================
  // 设置双重验证机制 
  testWaitForMessage(0x7E8, 1500); // 等待响应1.5秒 
  
  // 情况1:未收到任何响应 
  if(TestGetLastError() == teTimeout) {
    testStepFail("错误:ECU未响应请求");
    return;
  }
  
  // 情况2:收到否定响应 
  if(DiagRes.byte(0) == 0x7F) {
    // 三级验证逻辑 
    if(DiagRes.byte(1) != 0x10) {  // 验证服务ID 
      testStepFail("服务ID不匹配,收到0x%02X", DiagRes.byte(1));
      return;
    }
    
    if(DiagRes.byte(2) == 0x33) {  // 验证NRC代码 
      testStepPass("收到预期NRC 0x33");
      write("安全校验机制生效");
    } else {
      testStepFail("错误NRC代码:0x%02X", DiagRes.byte(2));
    }
  }
  // 情况3:意外收到肯定响应 
  else if(DiagRes.byte(0) == 0x50) {
    testStepFail("安全校验失效!收到正响应");
    sysSetVariable("Diag::Session", 0x01); // 强制恢复默认会话 
  }
  // 情况4:无效响应 
  else {
    testStepFail("收到无效响应:0x%02X", DiagRes.byte(0));
  }
 
  //==================== 后置清理 ====================
  // 发送默认会话恢复请求 
  DiagReq.byte(1) = 0x01;          // 子功能:默认会话 
  output(DiagReq);
  testWaitForMessage(0x7E8, 1000); // 等待会话恢复确认 
}
 
/*------------------------- 执行日志示例 ------------------------- 
[2025-02-15 10:35:12] TC10-003 测试启动 
[2025-02-15 10:35:12] 当前会话状态:0x01 
[2025-02-15 10:35:12] 发送请求: 10 02 @ 7E0 
[2025-02-15 10:35:12] 收到响应: 7F 10 33 @ 7E8 
[2025-02-15 10:35:12] 测试通过:安全访问拒绝机制生效 
[2025-02-15 10:35:13] 恢复默认会话成功 
----------------------------------------------------------------*/

代码执行流程图

默认会话&安全锁定
初始化
状态检查
发送请求
响应监控
|超时|
失败处理
|收到7F|
NRC验证
|0x33|
测试通过
|其他|
|收到50|
严重错误
恢复默认会话

关键实现说明

  1. 三重状态验证机制
// 状态同步检查 
if(sysGetVariable("Diag::Session") != 0x01 
   || sysGetVariable("Security::Unlocked") != 0) {
  testStepAbort("预置条件不满足");
}
  1. 动态DLC管理
DiagReq.dlc = 2 + (this.msgChannel == CAN_CHANNEL_HSCAN ? 1 : 0); // 自动适应总线类型 
  1. 安全状态实时监控
on sysvar Security::Unlocked {
  securityLevel = @this;
  write("安全状态变更:%s", 
       securityLevel ? "解锁" : "锁定");
}

测试用例验证矩阵

测试场景预期响应通过标准
未解锁直接请求编程会话7F 10 33收到精确NRC代码
安全解锁后请求编程会话50 02不在此用例测试范围
异常报文长度7F 10 13需其他用例覆盖
物理层通信中断超时无响应检测通信故障

增强型错误处理方案

  1. 安全校验旁路检测
// 连续三次尝试检测安全机制 
for(int i=0; i<3; i++) {
  output(DiagReq);
  if(DiagRes.byte(0) == 0x50) {
    testReportPicture("安全漏洞", "紧急:安全机制失效!");
    break;
  }
}
  1. 总线负载压力测试
// 在50%总线负载下测试 
setBusLoad(CAN1, 50.0);
testWaitForTimeout(5000);  // 持续5秒压力测试 
  1. 温度边界测试
// 需配合环境箱使用 
if(sysGetVariable("Env::Temperature") < -40) {
  testStepWarning("低温环境测试:%.1f°C", 
                 sysGetVariable("Env::Temperature"));
}

操作指南:

  1. 使用CANoe的Diagnostic Console验证当前安全状态
  2. 通过Trace窗口过滤7E07E8报文
  3. 建议配合CAPL的testReportAddComment添加测试备注
  4. 完整测试需包含以下步骤:
    • 冷启动测试
    • 电压暂降测试(9-16V)
    • 快速上下电循环测试

测试代码可直接集成到CANoe Test Module中,运行时需注意:

  1. 禁用其他可能修改会话状态的测试用例
  2. 确保ECU诊断数据库版本为最新
  3. 建议在测试前执行ECU完整复位操作

遇到NRC 0x33以外的响应时,建议使用以下工具诊断:

  • CANoe的Service Viewer
  • Wireshark抓包分析
  • ECU标定工具检查安全配置
http://www.dtcms.com/a/20193.html

相关文章:

  • 强化学习-NPG
  • Zbrush导入笔刷
  • 解锁电商数据宝藏:淘宝商品详情API实战指南
  • 内容中台构建高效数字化内容管理新范式
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十三节】
  • 硬件开发笔记(三十四):AHD转MIPI国产方案详解XS9922B(一):芯片方案介绍
  • kubekey一键部署k8s高可用与kubesphere
  • 图像质量评价指标-UCIQE-UIQM
  • Ext系列文件系统
  • CAS单点登录(第7版)14.服务与应用
  • HCIA项目实践--静态路由的总结和简单配置
  • CAS单点登录(第7版)23.Webflow 管理
  • 《探秘AI绿色计算:降低人工智能硬件能耗的热点技术》
  • Atlassian工具集:Jira与Confluence集成优势、使用技巧、更新功能等
  • 【R语言】回归分析
  • C++入门小清单
  • 简要分析LeetCode树经典题目(Java)
  • vscode调试redis
  • 如何构建一个AI驱动的前端UI组件生成器
  • Streamlit与Qlib:量化投资策略可视化实战
  • 深入理解Linux网络随笔(一):内核是如何接收网络包的(上篇)
  • 【Linux】Ubuntu Linux 系统 ——PHP开发环境
  • Linux探秘坊-------5.git
  • 一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法
  • 我是农场主之在Linux中养鱼、喂牛、开火车
  • DeepSeek指导手册从入门到精通
  • langchain学习笔记之langserve服务部署
  • 科技快讯 | 目标2030年登月 登月服和载人月球车全面进入初样研制阶段;字节豆包大模型团队提出稀疏模型架构UltraMem,推理成本最高可降低83%
  • 20240914 天翼物联 笔试
  • fun-transformer学习笔记-Task1——Transformer、Seq2Seq、Encoder-Decoder、Attention之间的关系