【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析②】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase02
作者:车端域控测试工程师
更新日期:2025年02月15日
关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023
TC10-002测试用例
| 用例ID | 测试场景 | 验证要点 | 参考条款 | 预期结果 |
|---|---|---|---|---|
| TC10-002 | 扩展会话超时管理 | S3定时器超时后自动返回默认会话 | Annex A.3 | 超时60s±5%触发会话切换 |
/*-------------------------------------------------------------------测试用例 TC10-002:扩展会话超时管理 标准依据:ISO 14229-1 Annex A.3 验证目标:S3定时器超时后自动返回默认会话 时间要求:60s±5%(57s-63s)
-------------------------------------------------------------------*/
variables {message 0x7E0 DiagReq = {dlc=8}; // 诊断请求报文 message 0x7E8 DiagRes; // 诊断响应报文 msTimer sessionTimer; // 会话计时器 dword sessionStartTime; // 会话开始时间戳 byte currentSession; // 当前会话状态
}testcase TC10_002_SessionTimeout()
{//==================== 测试初始化 ====================sysSetVariable("Diag::Session", 0x01); // 强制重置为默认会话 currentSession = 0x01;//==================== 激活扩展会话 ====================DiagReq.byte(0) = 0x10; // 诊断会话控制服务 DiagReq.byte(1) = 0x03; // 子功能:扩展会话 DiagReq.dlc = 2;output(DiagReq);// 等待正响应 testWaitForMessage(0x7E8, 1000);if(DiagRes.byte(0) != 0x50 || DiagRes.byte(1) != 0x03) {testStepFail("扩展会话激活失败");return;}sessionStartTime = timeNow(); // 记录会话激活时间 write("扩展会话激活时间:%d ms", sessionStartTime);//==================== 超时监控 ====================setTimer(sessionTimer, 65000); // 设置65秒监控周期 write("开始监测会话超时...");// 定时器回调处理 on timer sessionTimer {dword elapsedTime = timeNow() - sessionStartTime;currentSession = sysGetVariable("Diag::Session");// 验证时间窗口和会话状态 if(currentSession == 0x01) {if(elapsedTime >= 57000 && elapsedTime <= 63000) {testStepPass("定时器在%0.1fs触发切换(符合57-63s要求)", elapsedTime/1000.0);} else {testStepFail("切换时间异常:%0.1fs", elapsedTime/1000.0);}} else {testStepFail("会话未切换,当前状态:0x%02X", currentSession);}}// 等待测试完成 testWaitForTimeout(66000);
}/*------------------------- 执行日志示例 -------------------------
[2025-02-15 09:55:12] TC10-002 测试启动
[2025-02-15 09:55:12] 发送请求: 10 03 @ 7E0
[2025-02-15 09:55:12] 收到响应: 50 03 @ 7E8
[2025-02-15 09:55:12] 会话激活时间:43650000 ms
[2025-02-15 09:56:15] 定时器在61.3s触发切换(符合57-63s要求)
[2025-02-15 09:56:15] 测试通过
----------------------------------------------------------------*/
代码执行流程图
关键实现说明
- 时间窗口验证逻辑
if(elapsedTime >= 57000 && elapsedTime <= 63000) {// 符合±5%精度要求
}
- 会话状态实时监控
on sysvar Diag::Session {currentSession = @this; // 实时捕获会话状态变化 write("会话状态变更:0x%02X @ %dms", currentSession, timeNow());
}
- 容错机制设计
// 增加网络静默检测
testWaitForBusSilence(1000); // 确保测试期间无其他通信
测试数据记录表
| 测试轮次 | 触发时间(s) | 会话状态 | 测试结果 |
|---|---|---|---|
| 1 | 58.9 | 0x01 | PASS |
| 2 | 62.1 | 0x01 | PASS |
| 3 | 56.8 | 0x03 | FAIL |
| 4 | 63.5 | 0x01 | FAIL |
常见问题处理方案
-
超时时间偏差过大
- 检查ECU配置参数:
sysGetParameter("Diag::S3_Timeout"); // 读取实际配置值 - 使用示波器监控硬件唤醒信号
- 检查ECU配置参数:
-
会话状态未切换
- 添加诊断服务重试机制:
for(int i=0; i<3; i++) {output(DiagReq);if(testWaitForMessage(0x7E8, 1000)) break; }
- 添加诊断服务重试机制:
-
偶发性测试失败
- 增加预测试环境检查:
if(sysGetVariable("PowerVoltage") < 11.5) {testStepWarning("电压不稳定:%.1fV", sysGetVariable("PowerVoltage")); }
- 增加预测试环境检查:
操作建议:
- 测试前使用
sysSetParameter("Diag::DebugMode", 1)开启调试模式 - 配合CANoe的Graphics窗口可视化定时器状态
- 建议在-40°C、25°C、85°C三个温度点执行测试
- 完整测试需包含500次压力测试循环
将代码复制到CANoe Test Module后,通过以下步骤执行:
- 配置ECU工程文件加载诊断数据库
- 设置系统变量
Diag::Session的监控 - 运行测试用例并查看生成的HTML报告
遇到技术问题可在评论区留言,建议配合使用CANoe的实时曲线功能监控时间参数。
相关文章:
【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析②】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase02 作者:车端域控测试工程师 更新日期:2025年02月15日 关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-002测试用例 用例ID测试场景验证要点参考条款预期…...
前端新手必看:10 大 UI 组件库全面解析,快速搭建高质量 Web 应用」 「从零开始:Vue 和 React 最受欢迎的 UI 组件库入门指南」 「超实用!PC 端和移动端 UI 组件库推荐与实战
前端新手必看:10 大 UI 组件库全面解析,快速搭建高质量 Web 应用 目录 什么是 UI 组件库?为什么需要 UI 组件库?PC 端 UI 组件库推荐 Ant DesignElement UIVuetifyBootstrapVueiView (View UI)Quasar FrameworkMaterial-UI (MUI…...
【MySQL高级】17 - MySQL中常用工具
1. mysql 该mysql不是指mysql服务,而是指mysql的客户端工具。语法: mysql [options] [database]1.1 连接选项 参数 : -u, --username 指定用户名-p, --password[name] 指定密码-h, --hostname 指定服务器IP或域名-P, --por…...
【Linux】Linux 文件系统——有关 inode 不足的案例
ℹ️大家好,我是练小杰,今天周二了,明天星期三,还有三天就是星期五了,坚持住啊各位!!!😆 本文是对之前Linux文件权限中的inode号进行实例讨论,看到博客有错误…...
计算机视觉:卷积神经网络(CNN)基本概念(二)
第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络(附代码) 第五章࿱…...
【第7章:注意力机制与Transformer模型—7.4 NLP领域的BERT、GPT系列模型】
当你在2017年第一次听说Transformer时,可能不会想到这个模型会在短短三年内彻底改变NLP领域。想象一下,原本需要数周训练的翻译模型,现在用Transformer架构几天就能达到更好的效果;那些让程序员们头疼的梯度消失问题,突然变得不再重要。这一切的魔法钥匙,都藏在一个叫做&…...
[代码调试]安装Text2Image(stable diffusion)模型环境的踩坑记录
文章目录 一、xFormers版本问题1、先确认下自己torch版本所对应的cuda版本2.安装对应版本(1) 到对应官网下载包本地安装(2)代码安装 二、attn_mask尺寸错误三、diffusers四、Huggingface 配置基于stable diffusion预训练模型的环境,记录踩坑记录 一、xFormers版本问…...
大数据SQL调优专题——Flink执行原理
引入 上一篇我们了解了Spark,相比起MapReduce来说,它确实已经快了超级多了,但是人类的欲望是没有止境的,这也是推动人类进步的动力。 Flink就是为了满足实时响应的场景需求诞生的。 其实在Flink之前,实时处理其实已…...
Oracle 12c中在同一组列上创建多个索引
在数据库管理与优化领域,索引是提高查询性能的关键工具之一。然而,在某些情况下,单一类型的索引可能不足以满足所有查询的需求。Oracle 12c引入了一个强大的新特性:允许在同一组列上创建多个索引,但仅一个可见…...
线程安全的集合类
文章目录 多线程环境使⽤`ArrayList`线程不安全线程安全可以使用 `ReentrantLock` 或 `synchronized`来保护 `ArrayList` 的访问。使用同步包装器使用 `CopyOnWriteArrayList`**“写时复制”机制**多线程环境使⽤队列多线程环境使⽤哈希表HashtableConcurrentHashMapHashMap、H…...
【如何实现 JavaScript 的防抖和节流?】
如何实现 JavaScript 的防抖和节流? 前言 防抖(Debounce)和节流(Throttle)是 JavaScript 中优化高频事件处理的两种常用技术。它们可以有效减少事件处理函数的调用次数,提升性能并改善用户体验。本文将详…...
C#中File类的Copy()方法或FileInfo类的CopyTo()方法的参数overwrite取false和true的区别
当调用 System.IO.File.Copy 方法时,第三个参数 overwrite 控制着如果目标位置已经存在同名文件的情况下如何处理。 1、当 overwrite 设置为 true 在这种情况下,即使目标路径下已经有相同名称的文件,该方法也会无条件地覆盖现有的文件。这不…...
力扣 买卖股票的最佳时机
贪心算法典型例题。 题目 做过股票交易的都知道,想获取最大利润,就得从最低点买入,最高点卖出。这题刚好可以用暴力,一个数组中找到最大的数跟最小的数,然后注意一下最小的数在最大的数前面即可。从一个数组中选两个数…...
蚁剑(AutSword)的下载安装与报错解决
蚁剑(AutSword)的下载安装与报错解决 1.下载 唯一官方github下载地址 GitHub - AntSwordProject/AntSword-Loader: AntSword 加载器 2.安装 打开并且进入到下面的界面 下载需要的的版本 进行初始化 3.报错 出现下面的报错 4.解决方法 出现上面报错…...
【全栈开发】----Mysql基本配置与使用
本篇是在已下载Mysql的情况下进行的,若还未下载或未创建Mysql服务,请转到这篇: 2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易(保姆级)_mysql8.0.40下载安装教程-CSDN博客 本文对于mysql的操作均使用控制台sql原生代码…...
Spring Boot项目的基本设计步骤和相关要点介绍
以下是一个关于Spring Boot项目的基本设计步骤和相关要点介绍,我们以一个简单的示例应用——员工管理系统为例进行说明: 一、项目概述 员工管理系统旨在实现对公司员工信息的有效管理,包括员工基本信息录入、查询、更新以及删除等功能。通过Spring Boot框架来快速搭建后端…...
【Spring快速入门】不断更新...
一、Java基础 1、注解 1.3、自定义注解 springboot项目中自定义注解的使用总结、java自定义注解实战(常用注解DEMO)_springboot在类或者方法上加自定义注解-CSDN博客 同平台的新林。大佬就总结的很好,最近写得项目利用aop切面编程中的Aut…...
nodejs版本管理,使用 nvm 删除node版本,要删除 Node.js 的某个版本详细操作
要删除 Node.js 的某个版本并保持 Node Version Manager (nvm) 的管理整洁,可以按以下步骤操作: 步骤 1:查看已安装的 Node.js 版本 nvm ls这会列出你通过 nvm 安装的所有 Node.js 版本。输出类似于: -> v18.17.1v16.20…...
HTML之JavaScript DOM(document)编程处理事件
HTML之JavaScript DOM(document)编程处理事件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…...
5.【线性代数】—— 转置,置换和向量空间
五 转置,置换和向量空间 1. 置换矩阵2. 转置矩阵3. 对称矩阵4. 向量空间4.1 向量空间4.2 子空间 1. 置换矩阵 定义: 用于行互换的矩阵P。 之前进行ALU分解时,可能存在该行主元为0,要进行行互换,即PALU 性质࿱…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
