【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析④】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase04
作者:车端域控测试工程师
更新日期:2025年02月15日
关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023
TC10-004测试用例
| 用例ID | 测试场景 | 验证要点 | 参考条款 | 预期结果 |
|---|---|---|---|---|
| TC10-004 | 非法子功能码检测 | 发送0x10 0x04(无效子功能) | §7.3.2 | 返回NRC=0x12(子功能不支持) |
/*-------------------------------------------------------------------测试用例 TC10-004:非法子功能码检测 标准依据:ISO 14229-1 §7.3.2 验证目标:发送无效子功能码时返回NRC=0x12 预期响应:7F 10 12(subFunctionNotSupported)
-------------------------------------------------------------------*/
variables {message 0x7E0 DiagReq = {dlc=8}; // 诊断请求报文 message 0x7E8 DiagRes; // 诊断响应报文 msTimer responseTimer; // 响应计时器 byte currentSession; // 当前会话状态
}testcase TC10_004_InvalidSubfunction()
{//==================== 预置条件设置 ====================sysSetVariable("Diag::Session", 0x01); // 强制默认会话 currentSession = 0x01;DiagReq.dlc = 2; // 初始化DLC //==================== 测试步骤执行 ====================// 步骤1:发送非法子功能请求 DiagReq.byte(0) = 0x10; // 诊断会话控制服务 DiagReq.byte(1) = 0x04; // 无效子功能码(0x04)output(DiagReq); // 发送请求 //==================== 响应验证 ====================testWaitForMessage(0x7E8, 1500); // 1.5秒响应超时 // 情况1:通信超时 if(TestGetLastError() == teTimeout) {testStepFail("错误:ECU未在1.5秒内响应");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) == 0x12) { // NRC校验 testStepPass("收到预期NRC 0x12");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 %02X %02X", DiagRes.byte(0), DiagRes.byte(1), DiagRes.byte(2));}//==================== 后置清理 ====================// 发送有效请求恢复会话 DiagReq.byte(1) = 0x01; // 有效子功能码 output(DiagReq);testWaitForMessage(0x7E8, 1000); // 等待会话确认
}/*------------------------- 执行日志示例 -------------------------
[2025-02-15 11:16:32] TC10-004 测试启动
[2025-02-15 11:16:32] 当前会话状态:0x01
[2025-02-15 11:16:32] 发送请求: 10 04 @ 7E0
[2025-02-15 11:16:32] 收到响应: 7F 10 12 @ 7E8
[2025-02-15 11:16:32] 测试通过:子功能校验生效
[2025-02-15 11:16:33] 恢复默认会话成功
----------------------------------------------------------------*/
代码执行流程图
关键实现说明
- 三级响应验证体系
if(DiagRes.byte(0) == 0x7F && DiagRes.byte(1) == 0x10 && DiagRes.byte(2) == 0x12) {// 完整匹配否定响应
}
- 动态DLC适配机制
DiagReq.dlc = (this.msgChannel == CAN_CHANNEL_HSCAN) ? 3 : 2; // 根据总线类型调整
- 会话状态追踪器
on sysvar Diag::Session {currentSession = @this;write("会话状态变更记录:0x%02X @ %dms", currentSession, timeNow());
}
测试场景矩阵
| 测试用例 | 请求报文 | 预期响应 | 通过标准 |
|---|---|---|---|
| 有效子功能(0x01) | 10 01 | 50 01 | 不在此用例范围 |
| 无效子功能(0x04) | 10 04 | 7F 10 12 | 当前用例验证目标 |
| 边界值测试(0x00) | 10 00 | 7F 10 12 | 需额外测试用例覆盖 |
| 超范围值测试(0xFF) | 10 FF | 7F 10 12 | 需额外测试用例覆盖 |
增强型诊断功能
- 自动重试机制
// 添加重试逻辑(最多3次)
for(int i=1; i<=3; i++) {output(DiagReq);if(testWaitForMessage(0x7E8, 1000)) break;write("第%d次重试...", i);
}
- 总线干扰测试
// 注入干扰报文
message 0x555 Disturbance = {0xAA, 0xBB, 0xCC, 0xDD};
output(Disturbance); // 发送干扰帧
- 时序精确测量
// 精确记录响应时间
dword requestTime = timeNow();
testWaitForMessage(0x7E8, 1500);
dword responseTime = timeNow() - requestTime;
write("响应延迟:%dms", responseTime);
操作注意事项:
- 测试前确认ECU诊断数据库已加载最新版本
- 使用CANoe的
Trace窗口过滤7E0和7E8报文 - 建议执行以下扩展测试:
- 连续发送10次非法请求测试稳定性
- 在不同总线负载条件下(20%, 50%, 80%)重复测试
- 组合测试:先发送有效请求再发送无效请求
将代码集成到CANoe Test Module时需注意:
- 在
PreTest中执行环境检查:if(sysGetVariable("Diag::Session") != 0x01) {testReportWarning("预检查失败:ECU未处于默认会话"); } - 建议配合使用
testReportPicture记录关键测试步骤 - 完整测试需要包含至少10次边界值测试循环
相关文章:
【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析④】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase04 作者:车端域控测试工程师 更新日期:2025年02月15日 关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-004测试用例 用例ID测试场景验证要点参考条款预期…...
图论入门算法:拓扑排序(C++)
上文中我们了解了图的遍历(DFS/BFS), 本节我们来学习拓扑排序. 在图论中, 拓扑排序(Topological Sorting)是对一个有向无环图(Directed Acyclic Graph, DAG)的所有顶点进行排序的一种算法, 使得如果存在一条从顶点 u 到顶点 v 的有向边 (u, v) , 那么在排序后的序列中, u 一定…...
【CXX】2 CXX blobstore客户端说明
本示例演示了一个调用blobstore服务的C客户端的Rust应用程序。事实上,我们会看到两个方向的调用:Rust到C以及C到Rust。对于您自己的用例,您可能只需要其中一个方向。 示例中涉及的所有代码都显示在此页面上,但它也以可运行的形式提…...
HTTP相关面试题
HTTP/1.1、HTTP/2、HTTP/3 演变 HTTP/1.1 相比 HTTP/1.0 提高了什么性能? HTTP/1.1 相⽐ HTTP/1.0 性能上的改进: 使⽤长连接的⽅式改善了 HTTP/1.0 短连接造成的性能开销。⽀持管道(pipeline)网络传输,只要第⼀个请…...
关于XML映射器的基本问题
前言 XML 映射器是 MyBatis 中用于定义 SQL 语句及其与 Java 对象映射关系的 XML 文件。它通过 XML 配置将数据库操作与 Java 代码分离,使 SQL 语句更易维护和管理。 主要作用 定义 SQL 语句:在 XML 中编写 SQL 查询、插入、更新和删除操作。 映射结果…...
【MyBatis】预编译SQL与即时SQL
目录 1. 以基本类型参数为例测试#{ }与${ }传递参数的区别 1.1 参数为Integer类型 1.2 参数为String类型 2. 使用#{ }传参存在的问题 2.1 参数为排序方式 2.2 模糊查询 3. 使用${ }传参存在的问题 3.1 SQL注入 3.2 对比#{ } 与 ${ }在SQL注入方面存在的问题 3.3 预编译…...
Python--正则表达式
1. 日志打印与终端颜色控制 1.1 使用 loguru 打印日志 from loguru import loggerlogger.debug("调试信息") logger.info("普通信息") logger.warning("警告信息") logger.error("错误信息") logger.success("成功信息"…...
【java面试】线程篇
1.什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。 2.线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任…...
分布式光纤传感:为生活编织“感知密网”
分布式光纤测温技术虽以工业场景为核心,但其衍生的安全效益已逐步渗透至日常生活。 分布式光纤测温技术(DTS)作为一种先进的线型温度监测手段,近年来在多个领域展现了其独特的优势。虽然其核心应用场景主要集中在工业、能源和基础…...
cmake Qt Mingw windows构建
今天教大家怎么在windows构建qt应用使用cmd命令行,而不是一键通过QtCreator一键构建。首先我们用qtcreator创建一个模板程序(PS:记得在安装qt时要悬着mingw套件,如果安装太慢可以换源) 输入以下的命令: mkdir build …...
无人机信号调制技术原理
一、调制技术的必要性 频谱搬移:将低频的基带信号搬移到高频的载波上,便于天线辐射和传播。 信道复用: 利用不同的载波频率或调制方式,实现多路信号同时传输,提高信道利用率。 抗干扰: 通过选择合适的调…...
书评与笔记:《如何有效报告Bug》
文章目录 书评笔记核心原则1. 首要目标:让程序员亲眼看到问题2. 次要目标:详细描述问题3. 保持冷静,避免误操作4. 提供额外信息5. 清晰、准确地表达 实用建议不要自作聪明地诊断问题类比:看医生时的症状描述程序员的心理 总结 原文…...
3.【线性代数】——矩阵乘法和逆矩阵
三 矩阵乘法和逆矩阵 1. 矩阵乘法1.1 常规方法1.2 列向量组合1.3 行向量组合1.4 单行和单列的乘积和1.5 块乘法 2. 逆矩阵2.1 逆矩阵的定义2.2 奇异矩阵2.3 Gauss-Jordan 求逆矩阵2.3.1 求逆矩阵 ⟺ \Longleftrightarrow ⟺解方程组2.3.2 Gauss-Jordan求逆矩阵 1. 矩阵乘法 1.…...
[JVM篇]虚拟机性能监控、故障处理工具
虚拟机性能监控、故障处理工具 基础故障处理工具 jps(JVM Peocess Status Tool - 虚拟机进程状况工具) jstat(JVM Statistics Monitoring Too - 虚拟机统计信息监视工具) jinfo( Configuration info for Java - Java配置信息工具) jmap(Memory Map for…...
UniApp 中 margin 和 padding 属性的使用详解
margin 属性的作用与使用 margin 属性用于设置元素的外边距,也就是元素与其他元素之间的距离。它可以分别设置元素四个方向(上、右、下、左)的外边距,也支持使用简写形式来一次性设置多个方向的外边距。 <template><view…...
`fi` 是 Bash 脚本中用来结束 `if` 条件语句块的关键字
fi 是 Bash 脚本中 if 语句的结束标志,它用于结束一个 if 块。与其他编程语言(如 C、Java)中的 } 不同,Bash 使用 fi 来标识条件语句的结束。 语法示例: if [ condition ]; then# 如果条件为真时执行的代码echo &quo…...
cap2:1000分类的ResNet的TensorRT部署指南(python版)
《TensorRT全流程部署指南》专栏文章目录: cap1:TensorRT介绍及CUDA环境安装cap2:1000分类的ResNet的TensorRT部署指南(python版)cap3:自定义数据集训练ResNet的TensorRT部署指南(python版&…...
每日一题——把数字翻译成字符串
把数字翻译成字符串 题目描述示例示例1示例2 题解动态规划代码实现复杂度分析 总结 题目描述 有一种将字母编码成数字的方式:‘a’->1, ‘b’->2, … , ‘z’->26。 现在给一串数字,返回有多少种可能的译码结果。 数据范围:字符串…...
我们来学HTTP/TCP -- 三次握手?
三次握手 题记三次呼叫结语 题记 来,我们来演示下川普王和普京帝会面了 哎呦!你好你好,握手…哎嗨!侬好侬好,握手…欧嘿呦玛斯,握手… 抓狂啊!作孽啊!!! 不说人话啊! 关键的是,“三…...
多媒体软件安全与授权新范例,用 CodeMeter 实现安全、高效的软件许可管理
背景概述 Reason Studios 成立于 1994 年,总部位于瑞典斯德哥尔摩,是全球领先的音乐制作软件开发商。凭借创新的软件产品和行业标准技术,如 ReWire 和 REX 文件格式,Reason Studios 为全球专业音乐人和业余爱好者提供了一系列高质…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
