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

【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] 恢复默认会话成功 
----------------------------------------------------------------*/

代码执行流程图

测试系统 ECU 强制设置默认会话(0x01) 确认会话状态 发送10 03请求 响应50 03 验证会话状态更新 发送恢复默认会话请求 确认响应 测试系统 ECU

关键实现说明

  1. 双重状态验证机制
// 报文响应验证 
if(DiagRes.byte(0) == 0x50 && DiagRes.byte(1) == 0x03) // 系统变量验证 
if(sysGetVariable("Diag::Session") == 0x03)
  1. 动态总线适配
// 自动检测总线类型设置DLC 
DiagReq.dlc = (this.msgChannel == CAN_CHANNEL_HSCAN) ? 3 : 2;
  1. 实时会话监控
on sysvar Diag::Session {currentSession = @this;write("实时会话状态:0x%02X", currentSession);
}

增强型错误处理

  1. 连续状态监测
// 添加会话状态变化监控 
on sysvar Diag::Session changed {testReportPicture("会话状态变更", "时间:%t 状态:0x%02X", timeNow(), @this);
}
  1. 电压波动测试
// 模拟电压波动场景 
sysSetVariable("PowerVoltage", 13.5);
testWaitForTimeout(1000);
sysSetVariable("PowerVoltage", 10.5);
  1. 异常报文注入
// 在测试过程中注入错误报文 
message 0x123干扰报文 = {0xAA, 0xBB, 0xCC};
output(干扰报文);

操作指南:

  1. 使用CANoe的Graphics窗口监控Diag::Session变量
  2. Diagnostic Console中手动验证会话状态
  3. 建议测试步骤:
    • 冷启动立即测试
    • 热复位后测试
    • 连续执行10次切换操作测试稳定性
  4. 使用testReportMerge合并多轮测试结果

将本代码集成到CANoe Test Module时需注意:

  1. 确认ECU诊断数据库已加载0x10服务定义
  2. Test Setup中设置Diag::Session变量的读写权限
  3. 建议配合使用IL层日志记录详细通信过程

遇到测试失败时可参考以下排查步骤:

  1. 检查ECU的诊断地址配置
  2. 验证ECU软件版本是否支持扩展会话
  3. 使用Bus Statistics分析总线负载情况
  4. 检查测试序列中是否存在会话冲突操作

相关文章:

【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&#xf…...

【蓝桥杯集训·每日一题2025】 AcWing 6123. 哞叫时间 python

6123. 哞叫时间 Week 1 2月18日 农夫约翰正在试图向埃尔茜描述他最喜欢的 USACO 竞赛,但她很难理解为什么他这么喜欢它。 他说「竞赛中我最喜欢的部分是贝茜说 『现在是哞哞时间』并在整个竞赛中一直哞哞叫」。 埃尔茜仍然不理解,所以农夫约翰将竞赛以…...

JAVA中常用类型

一、包装类 1.1 包装类简介 java是面向对象的语言,但是八大基本数据类型不符合面向对象的特征。因此为了弥补这种缺点,为这八中基本数据类型专门设计了八中符合面向面向对象的特征的类型,这八种具有面向对象特征的类型,就叫做包…...

【办公类-90-02】】20250215大班周计划四类活动的写法(分散运动、户外游戏、个别化综合)(基础列表采用读取WORD表格单元格数据,非采用切片组合)

背景需求: 做了中班的四类活动安排表,我顺便给大班做一套 【办公类-90-01】】20250213中班周计划四类活动的写法(分散运动、户外游戏、个别化(美工室图书吧探索室))-CSDN博客文章浏览阅读874次&#xff0…...

求矩阵对角线元素的最大值

求主对角线元素的最大值时,让指针指向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、独立样本 # 创建两个独立样本数据…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

SpringTask-03.入门案例

一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...