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

news2025/3/12 13:08:59

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.coloradmin.cn/o/2299859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注

【1】引言 前序学习进程中&#xff0c;已经使用cv2.findContours()函数cv2.drawContours()函数实现图像轮廓识别和标注&#xff0c;这种标注沿着图像的轮廓进行&#xff0c;比较细致。相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;六十四&#xff09;使用…

haproxy实现MySQL服务器负载均衡

1.环境准备 准备好下面四台台服务器&#xff1a; 主机名IP角色open-Euler1192.168.121.150mysql-server1openEuler-2192.168.121.151mysql-server2openEuler-3192.168.121.152clientRocky8-1192.168.121.160haproxy 2.mysql服务器配置 1.下载mariadb #下载mariadb [rootop…

C语言简单练习题

文章目录 练习题一、计算n的阶乘bool类型 二、计算1!2!3!...10!三、计算数组arr中的元素个数二分法查找 四、动态打印字符Sleep()ms延时函数system("cls")清屏函数 五、模拟用户登录strcmp()函数 六、猜数字小游戏产生一个随机数randsrandRAND_MAX时间戳time() 示例 …

C语言之easyX

目录 概要 easyX整体架构 图形绘制 画布宽高 圆形 图片的贴图 加载图像 游戏框架 概要 easyX是一个轻量级的图形库&#xff0c;用于在Windows平台上进行简单的2D图形绘制。它提供了一组简单易用的函数&#xff0c;可以方便地绘制基本的图形元素&#xff0c;如线条、矩形、圆形…

10. Hbase Compaction命令

一. 什么是Compaction 在 HBase 中&#xff0c;频繁进行数据插入、更新和删除操作会生成许多小的 HFile&#xff0c;当 HFile 数量增多时&#xff0c;会影响HBase的读写性能。此外&#xff0c;垃圾数据的存在也会增加存储需求。因此&#xff0c;定期进行 Compact操作&#xff…

告别卡关!XSS挑战之旅全关卡通关思路详解

XSS挑战之旅 XSS测试思路Level1Level2Level3Level4Level5Level6Level7Level8Level9Level10Level11Level12Level13Level14Level15Level16Level17Level18Level19Level20免责声明&#xff1a; XSS测试思路 确定输入输出点&#xff1a; 寻找URL参数、表单输入、HTTP头&#xff08;R…

【Java】分布式锁Redis和Redisson

https://blog.csdn.net/weixin_44606481/article/details/134373900 https://www.bilibili.com/video/BV1nW421R7qJ Redis锁机制一般是由 setnx 命令实现&#xff0c;set if not exists&#xff0c;语法setnx key value&#xff0c;将key设置值为value&#xff0c;如果key不存在…

Python的imutils库详细介绍

imutils 是一个专为简化OpenCV&#xff08;计算机视觉库&#xff09;常见操作而设计的Python工具库&#xff0c;提供了一系列便捷函数&#xff0c;使图像和视频处理更加高效和简洁。以下是对其功能、安装及用法的详细介绍&#xff1a; 1. 安装方法 通过pip安装&#xff1a; p…

从零开始学Python爬虫:(二)使用基本库urllib(下)

一、异常处理 关于某些情况下&#xff0c;可能会出现异常&#xff0c;如果不处理它们&#xff0c;会发生很多错误。 而urllib库提供了error模块来处理这些异常&#xff0c;该模块包括以下功能&#xff1a; &#xff08;1&#xff09;URLError 该类含有一个属性reason&#x…

【嵌入式Linux应用开发基础】read函数与write函数

目录 一、read 函数 1.1. 函数原型 1.2. 参数说明 1.3. 返回值 1.4. 示例代码 二、write 函数 2.1. 函数原型 2.2. 参数说明 2.3. 返回值 2.4. 示例代码 三、关键注意事项 3.1 部分读写 3.2 错误处理 3.3 阻塞与非阻塞模式 3.4 数据持久化 3.5 线程安全 四、嵌…

15.1 Process(进程)类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 通常开发时想要获得进程是比较困难的事&#xff0c;必须要调用CreateToolhelpSnapshot、ProcessFirst、ProcessNext等API或者诸如 Zw…

CentOS 7 企业级Redis 7部署指南

CentOS 7 企业级Redis 7部署指南 目录导航 一、环境准备 1.1 依赖管理 二、离线安装 2.1 源码编译安装2.2 目录结构规范 三、生产配置 3.1 主配置文件3.2 配置生成脚本 四、系统集成 4.1 Systemd服务文件4.2 服务管理命令 五、安全加固 5.1 网络安全配置5.2 审计配置 六、性能…

消息中间件深度剖析:以 RabbitMQ 和 Kafka 为核心

在现代分布式系统和微服务架构的构建中&#xff0c;消息中间件作为一个不可或缺的组件&#xff0c;承担着系统间解耦、异步处理、流量削峰、数据传输等重要职能。尤其是在面临大规模并发、高可用性和可扩展性需求时&#xff0c;如何选择合适的消息中间件成为了开发者和架构师们…

大语言模型简史:从Transformer(2017)到DeepSeek-R1(2025)的进化之路

2025年初&#xff0c;中国推出了具有开创性且高性价比的「大型语言模型」&#xff08;Large Language Model — LLM&#xff09;DeepSeek-R1&#xff0c;引发了AI的巨大变革。本文回顾了LLM的发展历程&#xff0c;起点是2017年革命性的Transformer架构&#xff0c;该架构通过「…

java八股文-spring

目录 1. spring基础 1.1 什么是Spring&#xff1f; 1.2 Spring有哪些优点&#xff1f; 1.3 Spring主要模块 1.4 Spring常用注解 1.5 Spring中Bean的作用域 1.6 Spring自动装配的方式 1.7 SpringBean的生命周期 1.8 多级缓存 1.9 循环依赖&#xff1f; 1 .8.1 原因 1.8…

NLP 八股 DAY1:BERT

BERT全称&#xff1a;Pre-training of deep bidirectional transformers for language understanding&#xff0c;即深度双向Transformer。 模型训练时的两个任务是预测句⼦中被掩盖的词以及判断输⼊的两个句⼦是不是上下句。在预训练 好的BERT模型后⾯根据特定任务加上相应的⽹…

蓝桥与力扣刷题(230 二叉搜索树中第k小的元素)

题目&#xff1a;给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff1a;1示例 2&#xff…

半遮挡检测算法 Detecting Binocular Half-Occlusions

【1. 背景】&#xff1a; 本文分析【Detecting Binocular Half-Occlusions&#xff1a;Empirical Comparisons of Five Approaches】Geoffrey Egnal和Richard P. Wildes于2002年发表在IEEE Transactions on Pattern Analysis and Machine Intelligence上&#xff0c;这是1篇中…

PHP培训机构教务管理系统小程序

&#x1f511; 培训机构教务管理系统——智慧教育&#xff0c;高效管理新典范 &#x1f680; 这款教务管理系统&#xff0c;是基于前沿的ThinkPHP框架与Uniapp技术深度融合&#xff0c;匠心打造的培训机构管理神器。它犹如一把开启高效运营与精细管理的金钥匙&#xff0c;专为…

无人机不等同轴旋翼架构设计应用探究

“结果显示&#xff0c;对于不等组合&#xff0c;用户应将较小的螺旋桨置于上游以提高能效&#xff0c;但若追求最大推力&#xff0c;则两个相等的螺旋桨更为理想。” 在近期的研究《不等同轴旋翼性能特性探究》中&#xff0c;Max Miles和Stephen D. Prior博士深入探讨了不同螺…