【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,可以方…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
