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

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

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

TC10-006测试用例

用例ID测试场景验证要点参考条款预期结果
TC10-006会话嵌套冲突检测在编程会话中请求切换至扩展会话§7.5.3返回NRC=0x22(条件不满足)
/*-------------------------------------------------------------------测试用例 TC10-006:会话嵌套冲突检测(增强版)标准依据:ISO 14229-1 §7.5.3 验证目标:编程会话中禁止切换其他会话模式 预期响应:NRC=0x22(conditionsNotCorrect)
-------------------------------------------------------------------*/
variables {message 0x7E0 DiagReq = {dlc=8};  // 诊断请求报文 message 0x7E8 DiagRes;           // 诊断响应报文 msTimer securityDelay;           // 安全延时计时器 byte currentSession;             // 当前会话状态 byte securityLevel;              // 安全访问级别 byte seed[4];                    // 安全种子存储 byte key[4];                     // 计算密钥存储 
}//==================== 预置条件设置函数 ====================
void Precondition_ProgrammingSession() {/分步式会话建立流程:1. 强制进入默认会话 2. 请求进入编程会话 3. 执行安全访问解锁 4. 验证最终状态 /// 阶段1:确保默认会话 sysSetVariable("Diag::Session", 0x01);DiagReq.byte(0) = 0x10;          // 诊断会话控制 DiagReq.byte(1) = 0x01;          // 默认会话 DiagReq.dlc = 2;output(DiagReq);testWaitForMessage(0x7E8, 1000);if(DiagRes.byte(0) != 0x50 || DiagRes.byte(1) != 0x01) {testStepAbort("默认会话建立失败");}// 阶段2:进入编程会话 DiagReq.byte(1) = 0x02;          // 编程会话 output(DiagReq);testWaitForMessage(0x7E8, 1500);if(DiagRes.byte(0) != 0x50 || DiagRes.byte(1) != 0x02) {testStepAbort("编程会话进入失败,代码:0x%02X%02X", DiagRes.byte(0), DiagRes.byte(1));}// 阶段3:安全访问解锁(示例算法)// 步骤3.1:请求种子 DiagReq.byte(0) = 0x27;          // 安全访问服务 DiagReq.byte(1) = 0x01;          // 请求种子 output(DiagReq);testWaitForMessage(0x7E8, 2000);if(DiagRes.byte(0) == 0x67 && DiagRes.byte(1) == 0x01) {// 提取种子值(假设4字节种子)seed[0] = DiagRes.byte(2);seed[1] = DiagRes.byte(3);seed[2] = DiagRes.byte(4);seed[3] = DiagRes.byte(5);// 步骤3.2:发送密钥(示例:取反算法)key[0] = ~seed[0];key[1] = ~seed[1];key[2] = ~seed[2];key[3] = ~seed[3];DiagReq.byte(1) = 0x02;        // 发送密钥 DiagReq.byte(2) = key[0];DiagReq.byte(3) = key[1];DiagReq.byte(4) = key[2];DiagReq.byte(5) = key[3];DiagReq.dlc = 6;output(DiagReq);testWaitForMessage(0x7E8, 2000);if(DiagRes.byte(0) != 0x67 || DiagRes.byte(1) != 0x02) {testStepAbort("安全解锁失败,代码:0x%02X%02X",DiagRes.byte(0), DiagRes.byte(1));}} else {testStepAbort("种子获取失败,代码:0x%02X%02X",DiagRes.byte(0), DiagRes.byte(1));}// 阶段4:最终状态验证 if(sysGetVariable("Diag::Session") != 0x02 ||sysGetVariable("Security::Unlocked") != 0x01) {testStepAbort("预置条件验证失败:会话=0x%02X 安全=0x%02X",sysGetVariable("Diag::Session"),sysGetVariable("Security::Unlocked"));}
}//==================== 主测试用例 ====================
testcase TC10_006_SessionNestingCheck() 
{// 执行增强型预置条件设置 Precondition_ProgrammingSession();write("预置条件验证通过:已进入安全解锁的编程会话");//==================== 测试步骤执行 ====================DiagReq.byte(0) = 0x10;          // 诊断会话控制 DiagReq.byte(1) = 0x03;          // 扩展会话 DiagReq.dlc = 2;output(DiagReq);                 // 发送冲突请求 //==================== 响应分析 ====================testWaitForMessage(0x7E8, 1500); // 1.5秒响应超时 if(TestGetLastError() == teTimeout) {testStepFail("ECU响应超时");}else if(DiagRes.byte(0) == 0x7F && DiagRes.byte(2) == 0x22) {testStepPass("NRC 0x22验证成功");}else {testStepFail("异常响应:0x%02X%02X%02X", DiagRes.byte(0), DiagRes.byte(1), DiagRes.byte(2));}//==================== 后置清理 ====================// 发送硬件复位恢复初始状态 DiagReq.byte(0) = 0x11;          // ECU复位 DiagReq.byte(1) = 0x01;          // 硬件复位 output(DiagReq);testWaitForTimeout(3000);        // 等待ECU重启 
}/*------------------------- 执行日志示例 ------------------------- 
[2025-02-15 21:47:15] 进入默认会话成功 
[2025-02-15 21:47:16] 编程会话建立成功 
[2025-02-15 21:47:17] 安全解锁完成(种子:A7 3B F0 89)
[2025-02-15 21:47:18] 发送非法会话切换请求:10 03 
[2025-02-15 21:47:18] 收到预期响应:7F 10 22 
[2025-02-15 21:47:21] ECU复位成功 
----------------------------------------------------------------*/

增强特性说明

  1. 动态会话建立机制
// 分阶段建立目标状态(取代直接设置变量)
Precondition_ProgrammingSession();
  1. 安全算法扩展接口
// 预留安全算法扩展点(示例为取反算法)
on key* {// 可替换为实际安全算法 key[i] = ~seed[i]; 
}
  1. 复合状态监控
// 实时监控诊断状态 
on sysvar Diag::Session changed {write("会话变更:0x%02X → 0x%02X @ %dms", @sysvar::Diag::Session, @this, timeNow());
}

预置条件流程图

开始
默认会话状态
发送10 01请求
收到50 01响应?
发送10 02请求
终止测试
收到50 02响应?
发送27 01请求
收到67 01响应?
计算安全密钥
发送27 02密钥
收到67 02响应?
验证最终状态
会话=0x02且安全=0x01?
预置条件完成

关键改进点

  1. 真实环境模拟

    • 使用实际诊断流程建立会话状态,而非直接设置系统变量
    • 包含完整的安全访问流程(27服务)
  2. 错误传播机制

    // 分级错误处理 
    if(DiagRes.byte(0) != 0x67) {testReportPicture("安全服务异常", "响应代码:0x%02X", DiagRes.byte(0));testStepAbort("安全服务异常终止");
    }
    
  3. 可维护性增强

    • 将预置条件封装为独立函数
    • 使用常量定义代替魔术数字
    • 添加详细的调试日志

测试数据记录建议

在测试报告中应包含以下关键数据:

  1. 会话切换时间序列
  2. 安全种子-密钥对验证记录
  3. ECU响应时间统计(单位:ms)
  4. 总线错误帧计数
  5. 温度/电压等环境参数(若可获取)

部署说明:

  1. 将安全算法部分替换为实际ECU使用的算法
  2. 根据总线类型调整DLC设置(CAN/CAN FD)
  3. testcase前添加环境检查:
    if(sysGetVariable("ECU::PowerStatus") != 0x01) {testReportWarning("ECU未上电,测试中止");return;
    }
    
  4. 建议配合使用CAPL的testmodule功能实现批量测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18663.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM内存模型详解

文章目录 1. 程序计数器(Program Counter Register)2. Java虚拟机栈(Java Virtual Machine Stacks)3. 本地方法栈(Native Method Stacks)4. Java堆(Java Heap)5. 方法区(…

KubeSphere 和 K8s 高可用集群离线部署全攻略

本文首发:运维有术,作者术哥。 今天,我们将一起探索如何在离线环境中部署 K8s v1.30.6 和 KubeSphere v4.1.2 高可用集群。对于离线环境的镜像仓库管理,官方推荐使用 Harbor 作为镜像仓库管理工具,它为企业级用户提供…

代码随想录-训练营-day30

今天我们要进入动态规划的背包问题,背包问题也是一类经典问题了。总的来说可以分为: 今天让我们先来复习0-1背包的题目,这也是所有背包问题的基础。所谓的0-1背包问题一般来说就是给一个背包带有最大容量,然后给一个物体对应的需要…

百问网(100ask)提供的烧写工具的原理和详解;将自己编译生成的u-boot镜像文件烧写到eMMC中

百问网(100ask)提供的烧写工具的原理 具体的实现原理见链接 http://wiki.100ask.org/100ask_imx6ull_tool 为了防止上面这个链接失效,我还对上面这个链接指向的页面保存成了mhtml文件,这个mhtml文件的百度网盘下载链接: https://pan.baidu.c…

【旋转框目标检测】基于YOLO11/v8深度学习的遥感视角船只智能检测系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

侯捷 C++ 课程学习笔记:C++ 面向对象开发的艺术

在侯捷老师的 C 系列课程中,《C 面向对象开发》这门课程让我对面向对象编程有了更深入的理解。面向对象编程(OOP)是现代软件开发中最重要的编程范式之一,而 C 作为支持 OOP 的语言,提供了强大的工具和特性。侯捷老师通…

神经网络常见激活函数 12-Swish函数

Swish 函数导函数 Swish函数 S w i s h ( x ) x ⋅ σ ( β x ) x 1 e − β x \begin{aligned} \rm Swish(x) & x \cdot \sigma(\beta x) \\ & \frac{x}{1 e^{-\beta x}} \end{aligned} Swish(x)​x⋅σ(βx)1e−βxx​​ Swish函数导数 d d x S w i s h ( x…

CF 137B.Permutation(Java 实现)

题目分析 输入n个样本,将样本调整为从1到n的包含,需要多少此更改 思路分析 由于样本量本身就是n,无论怎么给数据要么是重复要么不在1到n的范围,只需要遍历1到n判断数据组中有没有i值即可。 代码 import java.util.*;public clas…

web第三次作业

弹窗案例 1.首页代码 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>综合案例</title><st…

go语言简单快速的按顺序遍历kv结构(map)

文章目录 需求描述用map实现按照map的key排序用二维切片实现用结构体实现 需求描述 在go语言中&#xff0c;如果需要对map遍历&#xff0c;每次输出的顺序是不固定的&#xff0c;可以考虑存储为二维切片或结构体。 假设现在需要在页面的下拉菜单中展示一些基础的选项&#xff…

Unity 命令行设置运行在指定的显卡上

设置运行在指定的显卡上 -force-device-index

分享一个使用的音频裁剪chrome扩展-Ringtone Maker

一、插件简介 铃声制作器是一个简单易用的 Chrome 扩展&#xff0c;专门用于制作手机铃声。它支持裁剪音频文件的特定片段&#xff0c;并将其下载为 WAV 格式&#xff0c;方便我们在手机上使用。无论是想从一段长音频中截取精彩部分作为铃声&#xff0c;还是对现有的音频进行个…

数据开放共享和平台整合优化取得实质性突破的智慧物流开源了

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本可通过边缘计算技术…

预留:大数据Hadoop之——部署hadoop+hive+Mysql环境(Linux)

传送门目录 前期准备 一、JDK的安装 1、安装jdk 2、配置Java环境变量 3、加载环境变量 4、进行校验 二、hadoop的集群搭建 1、hadoop的下载安装 2、配置文件设置 2.1. 配置 hadoop-env.sh 2.2. 配置 core-site.xml 2.3. 配置hdfs-site.xml 2.4. 配置 yarn-site.xm…

《Spring实战》(第6版)第1章 Spring起步

第1部分 Spring基础 第1章 Spring起步 1.1 什么是Spring Spring的核心是提供一个容器(container)。 称为Spring应用上下文(Spring application context)。 创建和管理应用的组件(bean)&#xff0c;与上下文装配在一起。 Bean装配通过依赖注入(Dependency Injection,DI)。…

DesignCon2019 Paper分享--Automotive 芯片封装的SIPI优化

本期分享一篇intel在DesignCon2019上发表的介绍汽车芯片封装SIPI优化的paper--《Signal/Power Integrity Optimizations In An IoT Automotive Package》,文章主要介绍汽车芯片在SIPI上面临的挑战并提出了一些优化措施。 汽车芯片的发展趋势 如今&#xff0c;消费者对于车内用…

技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口

引言 随着大数据和人工智能技术的发展&#xff0c;数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame&#xff08;简称“MaxFrame”&#xff09;是一个专为Python开发者设计的分布式计算框架&#xff0c;它不仅支持Python编程接口&#xff0c;还能直接利用MaxCompute的…

优选算法《位运算》

在本篇当中我们将会复习之前在C语言阶段学习的各种位运算&#xff0c;并且在复习当中将再补充一些在算法题当中没有进行总结的位运算的使用方法&#xff0c;再总结完常见的位运算使用方法之和接下来还是和之前的算法篇章一样通过几道算法题来对这些位运算的方法技巧进行巩固。在…

复旦大学:公共数据开放利用层报告(2024)

摘 要: 数据利用是公共数据开放的成效展现环节。 中国公共数据开放评估中利用层的指标体系包括利用促进、 利用多样性、 成果数量、 成果质量、成果价值 5 个一级指标。 其中, 省域评估指标体系更关注省级统筹与省市协同, 而城市评估指标体系更强调成果产出与价值释放。 根据该…

CAS单点登录(第7版)24.高可用性

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 高可用性 概述 高可用性指南 &#xff08;HA/Clustering&#xff09; 高度可用的 CAS 部署是一种提供弹性以响应各种故障模式的部署&#xff0c;以便 CAS 在发生故障时继续提供 SSO 服务…