【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑤】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase05
作者:车端域控测试工程师
更新日期:2025年02月15日
关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023
TC10-005测试用例
| 用例ID | 测试场景 | 验证要点 | 参考条款 | 预期结果 |
|---|---|---|---|---|
| TC10-005 | 默认会话切换至扩展会话 | 发送0x10 0x03请求扩展会话 | §7.4.1 | 收到0x50 0x03响应 |
/*-------------------------------------------------------------------测试用例 TC10-005:默认会话切换至扩展会话 标准依据:ISO 14229-1 §7.4.1 验证目标:成功切换至扩展会话模式 预期响应:0x50 0x03(肯定响应)
-------------------------------------------------------------------*/
variables {message 0x7E0 DiagReq = {dlc=8}; // 诊断请求报文 message 0x7E8 DiagRes; // 诊断响应报文 msTimer sessionTimer; // 会话计时器 byte currentSession; // 当前会话状态
}testcase TC10_005_DefaultToExtendedSession()
{//==================== 预置条件设置 ====================sysSetVariable("Diag::Session", 0x01); // 强制默认会话 currentSession = 0x01;// 验证初始状态 if(sysGetVariable("Diag::Session") != 0x01) {testStepAbort("初始化失败:ECU未处于默认会话");return;}//==================== 测试步骤执行 ====================// 步骤1:发送扩展会话请求 DiagReq.byte(0) = 0x10; // 诊断会话控制服务 DiagReq.byte(1) = 0x03; // 子功能:扩展会话 DiagReq.dlc = 2;output(DiagReq); // 发送请求 //==================== 响应验证 ====================testWaitForMessage(0x7E8, 1000); // 1秒响应超时 // 情况1:通信超时 if(TestGetLastError() == teTimeout) {testStepFail("错误:ECU未在1秒内响应");return;}// 情况2:收到肯定响应 if(DiagRes.byte(0) == 0x50 && DiagRes.byte(1) == 0x03) {testStepPass("成功进入扩展会话");write("当前会话状态:0x%02X", sysGetVariable("Diag::Session"));// 验证系统变量同步更新 if(sysGetVariable("Diag::Session") == 0x03) {testStepPass("会话状态同步验证通过");} else {testStepFail("会话状态未更新(当前:0x%02X)", sysGetVariable("Diag::Session"));}}// 情况3:收到否定响应 else if(DiagRes.byte(0) == 0x7F) {testStepFail("收到否定响应 NRC=0x%02X", DiagRes.byte(2));}// 情况4:无效响应 else {testStepFail("收到未知响应:0x%02X %02X", DiagRes.byte(0), DiagRes.byte(1));}//==================== 后置清理 ====================// 恢复默认会话 DiagReq.byte(1) = 0x01; // 默认会话子功能 output(DiagReq);testWaitForMessage(0x7E8, 500); // 等待会话恢复确认
}/*------------------------- 执行日志示例 -------------------------
[2025-02-15 14:35:12] TC10-005 测试启动
[2025-02-15 14:35:12] 当前会话状态:0x01
[2025-02-15 14:35:12] 发送请求: 10 03 @ 7E0
[2025-02-15 14:35:12] 收到响应: 50 03 @ 7E8
[2025-02-15 14:35:12] 系统会话状态已更新:0x03
[2025-02-15 14:35:12] 测试通过:成功进入扩展会话
[2025-02-15 14:35:13] 恢复默认会话成功
----------------------------------------------------------------*/
代码执行流程图
关键实现说明
- 双重状态验证机制
// 报文响应验证
if(DiagRes.byte(0) == 0x50 && DiagRes.byte(1) == 0x03) // 系统变量验证
if(sysGetVariable("Diag::Session") == 0x03)
- 动态总线适配
// 自动检测总线类型设置DLC
DiagReq.dlc = (this.msgChannel == CAN_CHANNEL_HSCAN) ? 3 : 2;
- 实时会话监控
on sysvar Diag::Session {currentSession = @this;write("实时会话状态:0x%02X", currentSession);
}
增强型错误处理
- 连续状态监测
// 添加会话状态变化监控
on sysvar Diag::Session changed {testReportPicture("会话状态变更", "时间:%t 状态:0x%02X", timeNow(), @this);
}
- 电压波动测试
// 模拟电压波动场景
sysSetVariable("PowerVoltage", 13.5);
testWaitForTimeout(1000);
sysSetVariable("PowerVoltage", 10.5);
- 异常报文注入
// 在测试过程中注入错误报文
message 0x123干扰报文 = {0xAA, 0xBB, 0xCC};
output(干扰报文);
操作指南:
- 使用CANoe的
Graphics窗口监控Diag::Session变量 - 在
Diagnostic Console中手动验证会话状态 - 建议测试步骤:
- 冷启动立即测试
- 热复位后测试
- 连续执行10次切换操作测试稳定性
- 使用
testReportMerge合并多轮测试结果
将本代码集成到CANoe Test Module时需注意:
- 确认ECU诊断数据库已加载
0x10服务定义 - 在
Test Setup中设置Diag::Session变量的读写权限 - 建议配合使用
IL层日志记录详细通信过程
遇到测试失败时可参考以下排查步骤:
- 检查ECU的诊断地址配置
- 验证ECU软件版本是否支持扩展会话
- 使用
Bus Statistics分析总线负载情况 - 检查测试序列中是否存在会话冲突操作
相关文章:
【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑤】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase05 作者:车端域控测试工程师 更新日期:2025年02月15日 关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-005测试用例 用例ID测试场景验证要点参考条款预期…...
python-leetcode 35.二叉树的中序遍历
给定一个二叉树的根节点root,返回它的中序遍历。 方法一:递归 二叉树的中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过…...
glob 用法技巧
目录 处理大量文件节省内存 匹配多个文件扩展名 遍历多种格式文件 遍历某一个文件: 查找当前目录和子目录 6. 排除特定文件 7. 大小写不敏感匹配 8. 获取绝对路径 9. 处理特殊字符 处理大量文件节省内存 技巧:用 iglob 替代 glob,逐…...
CodeGPT 使用教程(适用于 VSCode)
CodeGPT 使用教程(适用于 VSCode) CodeGPT 是一个 VSCode 插件,可以让你在代码编辑器中直接调用 GPT 进行代码补全、优化、调试等操作。以下是详细的安装和使用步骤: 1. 安装 CodeGPT 方式 1:从 VSCode 插件市场安装…...
以下是MySQL中常见的增删改查语句
以下是MySQL中常见的增删改查语句: 增加数据(INSERT) 基本语法: INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...); 示例:向名为 students 的表中插入一条学生记录, id 为1&am…...
Vue3 与 TypeScript 实战:核心细节与最佳实践
引言 Vue3 的 Composition API 与 TypeScript 的强类型支持完美契合,极大提升了代码的可维护性和开发体验。本文将深入探讨 Vue3 TypeScript 的关键细节,并通过实际代码示例展示如何高效结合二者。 一、组合式 API 与类型推导 Vue3 的 setup 函数与 T…...
23种设计模式 - 解释器模式
模式定义 解释器模式(Interpreter Pattern)是一种行为型设计模式,用于为特定语言(如数控系统的G代码)定义文法规则,并构建解释器来解析和执行该语言的语句。它通过将语法规则分解为多个类,实现…...
常用的 React Hooks 的介绍和示例
目录 1. useState2. useEffect3. useContext4. useReducer5. useCallback6. useMemo7. useRef8. useImperativeHandle9. useLayoutEffect10. useDebugValue 常用的 React Hooks 的介绍和示例: 1. useState useState 是一个用于在函数组件中添加状态的 Hook。 impo…...
ChatGLM-6B模型
ChatGLM-6B 是由 清华大学人工智能研究院(THU AI) 和 智源研究院(BAAI) 开发的一款中文对话生成大语言模型。它是ChatGLM系列的一个版本,其核心特点是基于GLM(General Language Model)架构&…...
编译安装php
前置准备 这里的可能不全,每个人安装的模块不一致,依赖也不不相同,按实际情况调整 yum install libxml2 -y yum install libxml2-devel -y yum install openssl-devel -y yum install sqlite-devel -y yum install libcurl-devel -yyum ins…...
【JavaEE进阶】Spring MVC(3)
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 返回响应 返回静态页面 //RestController Controller RequestMapping("/response") public class ResponseController {RequestMapping("/returnHtmlPage&…...
30 款 Windows 和 Mac 下的复制粘贴软件对比
在日常电脑操作中,复制粘贴是极为高频的操作,一款好用的复制粘贴软件能极大提升工作效率。以下为你详细介绍 30 款 Windows 和 Mac 下的复制粘贴软件,并对比它们的优缺点,同时附上官网下载地址,方便大家获取软件。 Pa…...
【LLAMA】羊驼从LLAMA1到LLAMA3梳理
every blog every motto: Although the world is full of suffering, it is full also of the overcoming of it 0. 前言 LLAMA 1到3梳理 1. LLAMA 1 论文: LLaMA: Open and Efficient Foundation Language Models 时间: 2023.02 1.1 前言…...
【OS安装与使用】part3-ubuntu安装Nvidia显卡驱动+CUDA 12.4
文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 更改镜像源2.2.2 安装NVIDIA显卡驱动:nvidia-550(1)查询显卡ID(2)PCI ID Repository查询显卡型号(3…...
【蓝桥杯集训·每日一题2025】 AcWing 6123. 哞叫时间 python
6123. 哞叫时间 Week 1 2月18日 农夫约翰正在试图向埃尔茜描述他最喜欢的 USACO 竞赛,但她很难理解为什么他这么喜欢它。 他说「竞赛中我最喜欢的部分是贝茜说 『现在是哞哞时间』并在整个竞赛中一直哞哞叫」。 埃尔茜仍然不理解,所以农夫约翰将竞赛以…...
JAVA中常用类型
一、包装类 1.1 包装类简介 java是面向对象的语言,但是八大基本数据类型不符合面向对象的特征。因此为了弥补这种缺点,为这八中基本数据类型专门设计了八中符合面向面向对象的特征的类型,这八种具有面向对象特征的类型,就叫做包…...
【办公类-90-02】】20250215大班周计划四类活动的写法(分散运动、户外游戏、个别化综合)(基础列表采用读取WORD表格单元格数据,非采用切片组合)
背景需求: 做了中班的四类活动安排表,我顺便给大班做一套 【办公类-90-01】】20250213中班周计划四类活动的写法(分散运动、户外游戏、个别化(美工室图书吧探索室))-CSDN博客文章浏览阅读874次࿰…...
求矩阵对角线元素的最大值
求主对角线元素的最大值时,让指针指向A[N-1][N-1],指针以(N1)为单位递增,就可以指向对角线每个元素; 求次对角线元素的最大值时,让指针指向A[0][N-1],指针以(N-1)为单位递增,就可以指向副对角线…...
NoSQL之redis数据库
案例知识 关系与分关系型数据库 关系型数据库:Oracle,MySQL,SQL Server 非关系型数据库:Redis,MongDB Redis文件路径 配置文件:/etc/redis/6379.conf 日志文件:/var/log/redis_6379.log 数据文…...
【R语言】非参数检验
一、Mann-Whitney检验 在R语言中,Mann-Whitney U检验(也称为Wilcoxon秩和检验)用于比较两个独立样本的中位数是否存在显著差异。它是一种非参数检验,适用于数据不满足正态分布假设的情况。 1、独立样本 # 创建两个独立样本数据…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
