【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析④】
ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase04
作者:车端域控测试工程师
更新日期:2025年02月17日
关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023
TC11-004测试用例
| 用例ID | 测试场景 | 验证要点 | 参考条款 | 预期结果 |
|---|---|---|---|---|
| TC11-004 | 无效子功能码检测 | 发送0x11 0xFF(保留值) | §7.1.2 | 返回NRC=0x12(子功能不支持) |
/*----------------------------------------------------------------*/
/* 测试用例ID : TC11-004 */
/* 测试项名称 : 无效子功能码检测 */
/* 测试依据 : §7.1.2 */
/* 验证目标 : 返回NRC=0x12(子功能不支持) */
/* 作者 : 车端域控测试工程师 */
/* 创建日期 : 2025-02-17 */
/* 版本历史 : V1.0 - 初始版本 */
/*----------------------------------------------------------------*/variables
{// 诊断协议参数 const long DiagReqID = 0x732; // 诊断请求ID const long DiagResID = 0x733; // 诊断响应ID const byte InvalidSubFuncReq[2] = {0x11, 0xFF}; // 无效子功能请求 const byte ExpectedNRC = 0x12; // 预期否定响应码 // 状态监控 msTimer responseTimer;int serviceValidationPassed = 0;
}testcase TC11_004_InvalidSubfunctionCheck()
{TestModuleTitle("TC11-004 无效子功能码检测");// 阶段1:发送无效子功能请求 testStep("发送0x11服务+0xFF子功能");message DiagReqID [CAN] {dlc = 2;byte(0) = InvalidSubFuncReq[0]; // 服务ID byte(1) = InvalidSubFuncReq[1]; // 子功能码 }output(this);// 阶段2:响应验证 testWaitForTimeout(500); // 总测试窗口500ms setTimer(responseTimer, 200); // 设置响应超时 while(1) {if(TestWaitForMessage(DiagResID, 50)) {// 否定响应基础验证 if(this.byte(0) == 0x7F && this.byte(1) == InvalidSubFuncReq[0]) {// NRC专项验证 if(this.byte(2) == ExpectedNRC) {testStepPass("收到预期NRC=0x%02X", ExpectedNRC);serviceValidationPassed = 1;break;}else {testStepFail("收到错误NRC=0x%02X", this.byte(2));}}// 意外肯定响应处理 else if(this.byte(0) == 0x51) {testStepFail("检测到非法服务支持");}}// 超时处理 if(getTimer(responseTimer) >= 200) {testStepFail("响应超时未收到");break;}}// 最终判定 if(serviceValidationPassed) {testCasePass("无效子功能码验证成功");}
}/*--------------------------------------------------------------增强型响应跟踪模块
--------------------------------------------------------------*/
on message DiagResID
{// 实时记录所有诊断响应 if(this.byte(0) == 0x7F) {testAddLog("收到否定响应 - SID:0x%02X NRC:0x%02X", this.byte(1), this.byte(2));}
}on timer responseTimer
{testAddCondition("响应等待时间:%dms", getTimer(responseTimer));
}
测试架构深度解析
- 三阶段验证流程
-
关键技术实现
-
精准服务识别:
if(this.byte(0) == 0x7F && this.byte(1) == InvalidSubFuncReq[0]) -
动态超时控制:
setTimer(responseTimer, 200); // 200ms严格响应窗口 while(getTimer(responseTimer) < 200) { ... } -
多重防护机制:
// 同时检测: // 1. 响应报文结构 // 2. 服务ID匹配 // 3. 特定NRC码 -
异常处理矩阵
| 异常类型 | 检测方式 | 处理措施 |
|----------------|---------------------------|----------------------------|
| 无效NRC码 | 字节偏移量验证 | 记录具体错误码 |
| 非法服务支持 | 0x51肯定响应检测 | 标记协议违规 |
| 总线静默 | 200ms超时机制 | 终止测试流程 |
| 数据长度异常 | DLC值校验 | 触发格式错误警报 | -
扩展验证建议
-
参数化测试扩展:
struct SubfunctionTestSet {byte serviceID = 0x11;byte invalidSubfunc = 0xFF;byte expectedNRC = 0x12;dword timeout = 200; }; -
边界值测试扩展:
void ExecuteBoundaryTests() {// 可测试:// 0x00 - 保留值边界 // 0x7F - 最大标准值 // 0x80 - 扩展子功能边界 } -
服务矩阵验证:
void CheckServiceMatrix(byte serviceID) {// 验证服务支持矩阵的完整性 }
工程实践指南
-
环境配置要求
| 配置项 | 规格要求 |
|----------------|-------------------------------|
| 测试工具 | CANoe 15.0+(带Diagnostics) |
| 硬件接口 | VN1630/VN8970 |
| ECU供电 | 可编程电源(9-16V) |
| 协议版本 | UDS 1.4.0 | -
关键指标分析
| 验证维度 | 合格标准 | 测量方法 |
|----------------|---------------------------|------------------------|
| 响应时间 | ≤150ms | 示波器触发测量 |
| NRC一致性 | 100%返回0x12 | 自动化脚本验证 |
| 错误检测率 | 非法请求拒绝率100% | 压力测试统计 |
| 协议合规性 | 符合ISO14229-1要求 | 协议分析仪检测 | -
执行注意事项
- 测试前确保ECU处于默认会话模式
- 禁用其他可能修改诊断状态的测试用例
- 建议在ECU冷启动后立即执行
- 避免与刷写操作测试并行执行
- 关联测试建议
- 配合TC07-015(有效子功能边界值测试)
- 结合TC09-018(非法服务ID检测)
- 关联TC12-007(诊断服务支持矩阵验证)
调试技巧:
- 在
Write Window设置过滤器:id==733h && byte(0)==7Fh- 使用
Graphics窗口绘制NRC分布图- 启用
Diagnostic Event Viewer跟踪服务交互- 添加
Test Coverage监控点:testAddCoverage("SVC-0x11", "Subfunction validation"); testAddCoverage("NRC-0x12", "Subfunction not supported");
相关文章:
【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析④】
ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase04 作者:车端域控测试工程师 更新日期:2025年02月17日 关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-004测试用例 用例ID测试场景验证要点参考条款预期结果TC…...
llama.cpp将sensor格式的大模型转化为gguf格式
前言 ollama本地只能导入gguf格式的大模型文件,将safetensors 文件转化为gguf格式。需要使用 llama.cpp 这个开源工具。以下是使用 llama.cpp 转换 .safetensors 格式模型到 .gguf 格式的详细步骤: 1. 首先克隆并编译 llama.cpp: 克隆项目 git clone https://gi…...
Fastgpt学习(5)- FastGPT 私有化部署问题解决
1.☺ 问题描述: Windows系统,本地私有化部署,postgresql数据库镜像日志持续报错" data directory “/var/lib/postgresql/data” has invalid permissions ",“ DETAIL: Permissions should be urwx (0700) or urwx,gr…...
【Linux AnolisOS】配置Linux固定ip地址。然后在Windows上连接使用linux中docker容器里的redis和nacos。
1.关于将虚拟机ip地址更改为静态地址 ,跟着下面这个视频搞的,不想看文章的可以看视频。 第四章-07-配置Linux固定IP地址哔哩哔哩bilibili 当用的centos9 视频里让我们打开网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 但是我打开时…...
Linux应用之构建命令行解释器(bash进程)
目录 1.分析 2.打印输入提示符 3.读取并且处理输入字符串 4.创建子进程并切换 5.bash内部指令 6.完整代码 1.分析 当我们登录服务器的时候,命令行解释器就会自动加载出来。接下来我们就。在命令行中输入指令来达到我们想要的目的。 我们在命令行上输入的…...
挪车小程序挪车二维码php+uniapp
一款基于FastAdminThinkPHP开发的匿名通知车主挪车微信小程序,采用匿名通话的方式,用户只能在有效期内拨打车主电话,过期失效,从而保护车主和用户隐私。提供微信小程序端和服务端源码,支持私有化部署。 更新日志 V1.0…...
DockerDesktop更改默认的磁盘镜像地存储位置
DockerDesktop更改默认的磁盘镜像地存储位置 文章目录 DockerDesktop更改默认的磁盘镜像地存储位置1. 默认存储位置2. 新建一个目录3. 将磁盘镜像存储位置改为新建的目录下 1. 默认存储位置 2. 新建一个目录 如:D:\DiskImagelocationData 3. 将磁盘镜像存储位置改为…...
[数据结构]顺序表详解
目录 一.线性表 二.顺序表 2.1概念及结构 1. 静态顺序表:使用定长数组存储元素。 2. 动态顺序表:使用动态开辟的数组存储。 2.1按需申请 2.2 接口实现:增删查改 SeqList.h: SeqList.c: test.c 一.线性表 线性表 ( line…...
GO语言的安装以及第一个Go语言程序
1. Go语言的安装与设置 官网:golang.org 国内下载:https://studygolang.com/dl 国内镜像:https://goproxy.cn/ 2. GOland的安装 Go 1.13 及以上(推荐) 打开你的终端并执行 $ go env -w GO111MODULEon $ go env -w GOPROXYhttps://goproxy.cn,direc…...
SpringBoot速成(12)文章分类P15-P19
1.新增文章分类 1.Postman登录不上,可以从头registe->login一个新的成员:注意,跳转多个url时,post/get/patch记得修改成controller类中对应方法上写的 2.postman运行成功: 但表中不更新:细节有问题: c是…...
notepad++右键菜单不见了
卸载时没点击完成,又重新安装了一个,最终导致了一些bug,导致右键没有notepad菜单。 解决方式: 新建一个register.reg文件,加入以下代码,然后双击执行即可 代码说明:Open with Notepad 是右…...
Spring 接入 DeepSeek
引入依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency>2.yml配置 spring:ai:openai:api-key: sk-xxxxx // 填写自己申请的keybase-url: http…...
开题报告——基于Spring Boot的社区居民健康管理平台的设计与实现
关于本科毕业设计(论文)开题报告的规定 为切实做好本科毕业设计(论文)的开题报告工作,保证论文质量,特作如下规定: 一、开题报告是本科毕业设计(论文)的必经过程,所有本科生在写作毕业设计(论文)之前都必须作开题报告。 二、开题报告主要检验学生对专业知识的驾…...
(leetcode42 前缀后缀最值)接雨水
记忆化:打比方说前缀和 dp数组每个值代表了某一段计算过程 直接取值无需再计算就是记忆化 问题的核心思路 为了计算每个位置能接住多少水,我们需要知道在每个位置上方的水的容量。假设位置 i 是某个柱子的底部,要计算它能接多少水ÿ…...
SpringBoot+uniApp日历备忘录小程序系统 附带详细运行指导视频
文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.日历渲染代码:2.保存备忘录代码:3.删除备忘录代码: 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootuniApp框架开…...
分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现
分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现 目录 分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现MFO-LSSVM飞蛾扑火算法优化最小二…...
Linux 和 Windows 区别
1. 文件组织 (1)目录结构 Linux:采用**单一根目录(/)**结构,所有文件和设备都挂载在这个目录下。 典型目录: /home/(用户目录)/etc/(配置文件)/bin/(系统可执行文件)/dev/(设备文件)/mnt/(挂载点)Windows:采用多个驱动器(C:\, D:\),每个分区是一个独立的…...
Android - Handler使用post之后,Runnable没有执行
问题:子线程创建的Handler。如果 post 之后,在Handler.removeCallbacks(run)移除了,下次再使用Handler.postDelayed(Runnable)接口或者使用post时,Runnable是没有执行。导致没有收到消息。 解决办法:只有主线程创建的…...
vscode通过ssh连接服务器实现免密登录+删除
文章目录 参考: 1、 vscode通过ssh连接服务器实现免密登录删除(吐血总结)...
Redis未授权访问漏洞原理
redis未授权访问漏洞 目录 redis未授权访问漏洞一、Redis介绍二、redis环境安装三、漏洞原理四、漏洞复现4.1 webshell提权4.2redis写入计划任务反弹shell4.3 ssh key免密登录4.4 Redis基于主从复制的RCE方式 五、Redis加固建议 一、Redis介绍 Redis,全称为Remote …...
喜报!博睿数据案例获经观传媒“2024年度数字转型创新案例”!
本文已在“经观”APP中发表,点击下方文章链接查看原文: 2024科技创变纪:创新破局 变量启新 近日,经济观察报“2024年度卓越创新实践案例”榜单评选结果正式公布。博睿数据选送的案例“从零到一:可观测体系建设的探索…...
【从0做项目】Java搜索引擎(4)——性能优化~烧脑~~~
本篇文章将对项目搜索引擎(1)~(3)进行性能优化,包括测试,优化思路,优化前后对比 目录 一:文件读取 二:实现多线程制作索引 1:代码分析 2:代码…...
什么是网络安全审计?网络安全审计的作用...
网络安全审计通过对网络数据的采集、分析、识别,实时动态监测通信内容、网络行为和网络流量,发现和捕获各种敏感信息、违规行为,实时报警响应,全面记录网络系统中的各种会话和事件,实现对网络信息的智能关联分析、评估…...
目前(2025年2月)计算机视觉(CV)领域一些表现优异的深度学习模型
按任务类型分类介绍: 图像分类 CoCa:结合对比学习和生成学习,通过对比损失对齐图像和文本嵌入,并使用标题生成损失预测文本标记。它在图像分类、跨模态检索和图像描述等任务中表现出色,且仅需极少的任务特定微调。 P…...
【核心算法篇十三】《DeepSeek自监督学习:图像补全预训练方案》
引言:为什么自监督学习成为AI新宠? 在传统监督学习需要海量标注数据的困境下,自监督学习(Self-Supervised Learning)凭借无需人工标注的特性异军突起。想象一下,如果AI能像人类一样通过观察世界自我学习——这正是DeepSeek图像补全方案的技术哲学。根据,自监督学习通过…...
【详解】神经网络的发展历程
在人工智能与机器学习的漫长演进史中,神经网络一直扮演着引领创新的关键角色。从最早的生物学启发到当代“深度学习”浪潮,神经网络的发展历程波澜壮阔。随着计算机硬件水平的提升与海量数据的激增,神经网络不仅在学术界受到高度关注…...
【Linux专栏】find命令+同步 实验
Linux & Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.实验背景 需要把一个目录中所有文件,按照目录把某个时间点之前的同步到一个盘中,之后的同步备份到另一个盘中,实现不同时间段的备份。 本次实现目标:把common文件夹中 2025年之后的含文件夹…...
【弹性计算】虚拟机云服务器
虚拟机云服务器 1.云计算技术概述2.虚拟机云服务器2.1 功能特点2.2 适用场景 “计算” 位居弹性计算的三大件之首,也是弹性计算的主题词。在公共云上,计算产品不仅有既基础又重要的 虚拟机云服务器,而且包含了近年来为了满足用户的多样化需求…...
C++ 中的public、private 和 protected
在 C 里,public、private 和 protected 是用于控制类成员(属性和方法)访问权限的访问修饰符。合理使用这些访问修饰符能实现数据封装和信息隐藏,增强代码的安全性和可维护性。下面详细介绍它们的特性和用法。 public(…...
vite配置scss全局变量
vite配置scss全局变量 创建单独文件variable.scss在其中定义变量 vite.config.ts中配置 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path// https://vite.dev/config/ export default defineConfig({plugins: [vue()],resolve:…...
