【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析③】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase03
作者:车端域控测试工程师
更新日期:2025年02月15日
关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023
TC10-003测试用例
| 用例ID | 测试场景 | 验证要点 | 参考条款 | 预期结果 |
|---|---|---|---|---|
| TC10-003 | 编程会话安全校验 | 未通过安全访问时禁止进入编程会话 | §7.4.2 | 返回NRC=0x33(安全访问拒绝) |
/*-------------------------------------------------------------------测试用例 TC10-003:编程会话安全校验 标准依据:ISO 14229-1 §7.4.2 验证目标:未通过安全访问时禁止进入编程会话 预期响应:NRC=0x33(securityAccessDenied)
-------------------------------------------------------------------*/
variables {message 0x7E0 DiagReq = {dlc=8}; // 诊断请求报文 message 0x7E8 DiagRes; // 诊断响应报文 msTimer securityTimer; // 安全状态监测计时器 byte currentSession; // 当前会话状态跟踪 byte securityLevel; // 安全访问级别
}testcase TC10_003_ProgrammingSessionSecurity()
{//==================== 预置条件设置 ====================// 强制重置诊断会话和安全状态 sysSetVariable("Diag::Session", 0x01); // 默认会话 sysSetVariable("Security::Unlocked", 0); // 安全锁状态 currentSession = 0x01;securityLevel = 0x00;// 验证初始状态 if(sysGetVariable("Diag::Session") != 0x01) {testStepAbort("初始化失败:ECU未处于默认会话");}//==================== 测试步骤执行 ====================// 步骤1:直接尝试进入编程会话 DiagReq.byte(0) = 0x10; // 诊断会话控制服务 DiagReq.byte(1) = 0x02; // 编程会话 DiagReq.dlc = 2;output(DiagReq); // 发送请求 //==================== 响应验证 ====================// 设置双重验证机制 testWaitForMessage(0x7E8, 1500); // 等待响应1.5秒 // 情况1:未收到任何响应 if(TestGetLastError() == teTimeout) {testStepFail("错误:ECU未响应请求");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) == 0x33) { // 验证NRC代码 testStepPass("收到预期NRC 0x33");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", DiagRes.byte(0));}//==================== 后置清理 ====================// 发送默认会话恢复请求 DiagReq.byte(1) = 0x01; // 子功能:默认会话 output(DiagReq);testWaitForMessage(0x7E8, 1000); // 等待会话恢复确认
}/*------------------------- 执行日志示例 -------------------------
[2025-02-15 10:35:12] TC10-003 测试启动
[2025-02-15 10:35:12] 当前会话状态:0x01
[2025-02-15 10:35:12] 发送请求: 10 02 @ 7E0
[2025-02-15 10:35:12] 收到响应: 7F 10 33 @ 7E8
[2025-02-15 10:35:12] 测试通过:安全访问拒绝机制生效
[2025-02-15 10:35:13] 恢复默认会话成功
----------------------------------------------------------------*/
代码执行流程图
关键实现说明
- 三重状态验证机制
// 状态同步检查
if(sysGetVariable("Diag::Session") != 0x01 || sysGetVariable("Security::Unlocked") != 0) {testStepAbort("预置条件不满足");
}
- 动态DLC管理
DiagReq.dlc = 2 + (this.msgChannel == CAN_CHANNEL_HSCAN ? 1 : 0); // 自动适应总线类型
- 安全状态实时监控
on sysvar Security::Unlocked {securityLevel = @this;write("安全状态变更:%s", securityLevel ? "解锁" : "锁定");
}
测试用例验证矩阵
| 测试场景 | 预期响应 | 通过标准 |
|---|---|---|
| 未解锁直接请求编程会话 | 7F 10 33 | 收到精确NRC代码 |
| 安全解锁后请求编程会话 | 50 02 | 不在此用例测试范围 |
| 异常报文长度 | 7F 10 13 | 需其他用例覆盖 |
| 物理层通信中断 | 超时无响应 | 检测通信故障 |
增强型错误处理方案
- 安全校验旁路检测
// 连续三次尝试检测安全机制
for(int i=0; i<3; i++) {output(DiagReq);if(DiagRes.byte(0) == 0x50) {testReportPicture("安全漏洞", "紧急:安全机制失效!");break;}
}
- 总线负载压力测试
// 在50%总线负载下测试
setBusLoad(CAN1, 50.0);
testWaitForTimeout(5000); // 持续5秒压力测试
- 温度边界测试
// 需配合环境箱使用
if(sysGetVariable("Env::Temperature") < -40) {testStepWarning("低温环境测试:%.1f°C", sysGetVariable("Env::Temperature"));
}
操作指南:
- 使用CANoe的Diagnostic Console验证当前安全状态
- 通过Trace窗口过滤
7E0和7E8报文 - 建议配合CAPL的
testReportAddComment添加测试备注 - 完整测试需包含以下步骤:
- 冷启动测试
- 电压暂降测试(9-16V)
- 快速上下电循环测试
测试代码可直接集成到CANoe Test Module中,运行时需注意:
- 禁用其他可能修改会话状态的测试用例
- 确保ECU诊断数据库版本为最新
- 建议在测试前执行ECU完整复位操作
遇到NRC 0x33以外的响应时,建议使用以下工具诊断:
- CANoe的Service Viewer
- Wireshark抓包分析
- ECU标定工具检查安全配置
相关文章:
【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析③】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase03 作者:车端域控测试工程师 更新日期:2025年02月15日 关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-003测试用例 用例ID测试场景验证要点参考条款预期…...
Vivado生成edif网表及其使用
介绍如何在Vivado中将模块设为顶层,并生成相应的网表文件(Verilog文件和edif文件),该过程适用于需要将一个模块作为顶层设计进行综合,并生成用于其他工程中的网表文件的情况。 例如要将fpga_top模块制作成网表给其它工…...
Win10环境借助DockerDesktop部署大数据时序数据库Apache Druid
Win10环境借助DockerDesktop部署最新版大数据时序数据库Apache Druid32.0.0 前言 大数据分析中,有一种常见的场景,那就是时序数据,简言之,数据一旦产生绝对不会修改,随着时间流逝,每个时间点都会有个新的…...
mac 意外退出移动硬盘后再次插入移动硬盘不显示怎么办
第一步:sudo ps aux | grep fsck 打开mac控制台输入如下指令,我们看到会出现两个进程,看进程是root的这个 sudo ps aux|grep fsck 第二步:杀死进程 在第一步基础上我们知道不显示u盘的进程是:62319,我们…...
力扣动态规划-32【算法学习day.126】
前言 ###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!! 习题 1.完全平方数 题目链接:279. 完全…...
【算法进阶详解 第一节】树状数组
【算法进阶详解 第一节】树状数组 前言树状数组基础树状数组原理树状数组能够解决的问题 树状数组提高树状数组区间加,区间和操作二维树状数组 树状数组应用树状数组区间数颜色树状数组二维偏序 前言 树状数组在算法竞赛中十分常见,其能解决二维数点&am…...
【苍穹外卖】学习
软件开发整体介绍 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程, 以及软件开发过程中涉及到的岗位角色,角色的分工、职责, 并了解软件开发中涉及到的三种软件环境。那么这一小节,我们将从 软件开发流程、角色…...
Python常见面试题的详解8
1. 变量作用域和查找规则(LEGB) 作用域层级: Local:函数内部作用域 Enclosing:闭包函数外层作用域 Global:模块全局作用域 Built-in:内置命名空间 查找顺序:L → E → G → B关…...
Deepseek R1模型本地化部署与API实战指南:释放企业级AI生产力
摘要 本文深入解析Deepseek R1开源大模型的本地化部署流程与API集成方案,涵盖从硬件选型、Docker环境搭建到模型微调及RESTful接口封装的完整企业级解决方案。通过电商评论分析和智能客服搭建等案例,展示如何将前沿AI技术转化为实际生产力。教程支持Lin…...
node.js + html调用ChatGPTApi实现Ai网站demo(带源码)
文章目录 前言一、demo演示二、node.js 使用步骤1.引入库2.引入包 前端HTML调用接口和UI所有文件总结 前言 关注博主,学习每天一个小demo 今天是Ai对话网站 又到了每天一个小demo的时候咯,前面我写了多人实时对话demo、和视频转换demo,今天…...
sql语言语法的学习
sql通用语法 sql分类 DDL(操作数据库和表) 操作数据库 操作表_查询 操作表_创建 举例: 操作表_删除 操作表_修改 DML(增删改表中数据) DML添加数据 DML删除数据 DML修改数据 DQL 单表查询 基础查询 条件查询 案例演示: 排序查询 聚合函数 分组查询…...
力扣 最长递增子序列
动态规划,二分查找。 题目 由题,从数组中找一个最长子序列,不难想到,当这个子序列递增子序列的数越接近时是越容易拉长的。从dp上看,当遍历到这个数,会从前面的dp选一个最大的数加上当前数,注意…...
【linux】在 Linux 服务器上部署 DeepSeek-r1:70b 并通过 Windows 远程可视化使用
【linux】在 Linux 服务器上部署 DeepSeek-r1:70b 并通过 Windows 远程可视化使用 【承接商业广告,如需商业合作请+v17740568442】 文章目录 【linux】在 Linux 服务器上部署 DeepSeek-r1:70b 并通过 Windows 远程可视化使用个人配置详情一、安装ollama二、下载deepseek版本…...
visutal studio 2022使用qcustomplot基础教程
编译 下载,2.1.1版支持到Qt6.4 。 拷贝qcustomplot.h和qcustomplot.cpp到项目源目录(Qt project)。 在msvc中将它俩加入项目中。 使用Qt6.8,需要修改两处代码: L6779 # if QT_VERSION > QT_VERSION_CHECK(5, 2, …...
Linux:线程概念、理解、控制
目录 一、认识线程 1.认识线程V1 2.认识线程V2 3.认识线程V3 4.认识线程V4 5.认识线程V5 二、线程控制 1.前言 2.创建线程 3.线程等待 4.线程终止 5.线程分离 三、线程理解 一、认识线程 1.认识线程V1 借用大多数计算机教材的话,线程是进程的一个执行…...
Postman如何流畅使用DeepSeek
上次写了一篇文章是用chatBox调用api的方式使用DeepSeek,但是实际只能请求少数几次就不再能给回响应。这回我干脆用最原生的方法Postman调用接口请求好了。 1. 通过下载安装Postman软件 postman下载(https://pan.quark.cn/s/c8d1c7d526f3),包含7.0和10…...
K8S下载离线安装包所需文件
下载相关文件 官网下载地址集合https://kubernetes.io/zh-cn/releases/download/ 下载相关镜像 官网镜像描述 所有 Kubernetes 容器镜像都被部署到 registry.k8s.io 容器镜像仓库。 容器镜像支持架构registry.k8s.io/kube-apiserver:v1.32.0amd64, arm, arm64, ppc64le, …...
探索Hugging Face:开源AI社区的核心工具与应用实践
引言:AI民主化的先锋 在自然语言处理(NLP)领域,Hugging Face已成为开源社区的代名词。这个成立于2016年的平台,通过提供易用的工具和丰富的预训练模型库,彻底改变了开发者使用和部署AI模型的方式。截至202…...
【操作系统】深入理解Linux物理内存
物理内存的组织结构 我们平时所称的内存也叫随机访问存储器也叫 RAM 。RAM 分为两类: 一类是静态 RAM( SRAM ),这类 SRAM 用于 CPU 高速缓存 L1Cache,L2Cache,L3Cache。其特点是访问速度快,访…...
npm 私服使用介绍
一、导读 本文主要介绍 npm 私服的使用,至于 npm 私服搭建的过程,可以看本人之前的文章《Docker 部署 verdaccio 搭建 npm 私服》 二、前置条件 npm私服地址:http://xxx.xxx.xxx.xxx:port/ 三、本地 npm 源切换 使用nrm,可以方…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...
