当前位置: 首页 > news >正文

【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑩】

ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase10

作者:车端域控测试工程师
更新日期:2025年02月18日
关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023

TC11-010测试用例

用例ID测试场景验证要点参考条款预期结果
TC11-010混合复位类型执行在扩展会话中交替请求不同复位类型§8.2.5各复位类型独立生效无冲突

以下是为TC11-010设计的工业级CAPL测试用例,包含多复位类型状态机验证,包含时序控制策略和异常处理机制:

/*----------------------------------------------------------Title:TC11-010 混合复位类型冲突验证 作者:车端域控测试工程师 日期:2025-02-18 
------------------------------------------------------------*/variables {// 通信参数 const long DiagReqID = 0x732;       // 诊断请求标识符 const long DiagResID = 0x733;       // 诊断响应标识符 const byte SessionCtrlSID = 0x10;   // 会话控制服务 const byte ResetSID = 0x11;         // ECU复位服务 // 复位类型配置(基于OEM规范)struct sResetType {byte subFunc;    // 子功能号 char* desc;      // 类型描述 dword delay;     // 预期执行时间 } resetTypes[3] = {{0x01, "硬件复位", 1200},{0x02, "钥匙复位", 800},{0x03, "软件复位", 500}};// 动态控制变量 msTimer sessionTimer;int currentResetIndex = 0;byte responseStatus[3];             // 0-未响应 1-成功 2-失败 
}testcase TC11_010_MixedResetTest() 
{TestModuleTitle("TC11-010 混合复位类型冲突验证");// ███ 阶段1:进入扩展会话 ███ testStep("STEP1 进入扩展诊断会话");message DiagReqID [CAN] {dlc = 2;byte(0) = SessionCtrlSID;byte(1) = 0x03;  // 扩展会话 }output(this);if(TestWaitForMessage(DiagResID, 200) && this.byte(0) == 0x50 && this.byte(1) == 0x03) {testStepPass("成功进入扩展会话");setTimer(sessionTimer, 5000);  // 会话保活计时 } else {testStepFail("会话建立失败");return;}// ███ 阶段2:交替执行复位操作 ███ testStep("STEP2 执行混合复位序列");for(currentResetIndex=0; currentResetIndex<3; currentResetIndex++){// 发送复位请求 message DiagReqID [CAN] {dlc = 2;byte(0) = ResetSID;byte(1) = resetTypes[currentResetIndex].subFunc;}output(this);// 响应处理窗口 if(TestWaitForMessage(DiagResID, 300)) {// 肯定响应验证 if(this.byte(0) == 0x51 && this.byte(1) == resetTypes[currentResetIndex].subFunc) {responseStatus[currentResetIndex] = 1;testAddLog("%s 执行成功", resetTypes[currentResetIndex].desc);// 等待复位完成 testWait(resetTypes[currentResetIndex].delay);// 重新激活会话 message DiagReqID [CAN] {dlc = 2;byte(0) = SessionCtrlSID;byte(1) = 0x03;}output(this);TestWaitForMessage(DiagResID, 200);}// 否定响应处理 else if(this.byte(0) == 0x7F && this.byte(1) == ResetSID) {responseStatus[currentResetIndex] = 2;testAddLog("%s 执行失败(NRC=0x%02X)", resetTypes[currentResetIndex].desc, this.byte(2));}}else {responseStatus[currentResetIndex] = 0;  // 超时 }// 操作间隔 testWait(300);}// ███ 阶段3:综合结果验证 ███ testStep("STEP3 验证独立生效性");int successCount = 0;for(int i=0; i<3; i++) {if(responseStatus[i] == 1) {testStepPass("%s 独立生效", resetTypes[i].desc);successCount++;} else {testStepFail("%s 状态异常(代码:%d)", resetTypes[i].desc, responseStatus[i]);}}if(successCount == 3) {testCasePass("所有复位类型独立生效");} else {testCaseFail("检测到%02d/03次冲突", successCount);}
}/*----------------------------------------------------------会话状态监控模块(关键扩展)
----------------------------------------------------------*/
on timer sessionTimer 
{testAddCondition("会话保活剩余时间:%.1fs", (5000 - getTimer(sessionTimer))/1000.0);// 每4秒发送TesterPresent if(getTimer(sessionTimer) % 4000 == 0) {message DiagReqID [CAN] {byte(0) = 0x3E;  // TesterPresent byte(1) = 0x00;}output(this);}
}

流程图解(执行逻辑可视化)

进入扩展会话
发送0x11 0x01
等待1200ms
发送0x11 0x02
等待800ms
发送0x11 0x03
等待500ms
结果验证

关键参数说明表

参数名称示例值工程校准要点
会话保活周期5000ms需小于ECU会话超时时间
复位执行延迟类型相关根据OEM标定值调整
操作间隔300ms需覆盖总线负载高峰期
TesterPresent周期4000ms维持会话的最小间隔

响应状态矩阵

复位类型预期结果失败模式示例
硬件复位立即执行系统未实际断电
钥匙复位点火周期复位未检测到钥匙信号
软件复位应用层重启部分进程未终止

工业级增强功能

  1. 复位深度检测

    // 通过系统变量验证复位层级 
    on sysvar ECU::ResetLevel {testAddLog("当前复位深度:%d级", @this::ResetLevel);
    }
    
  2. 混合负载测试

    void ExecuteStressTest() {// 可扩展:// 1. 随机顺序执行复位类型 // 2. 叠加总线负载(70%-90%)// 3. 电源波动模拟 
    }
    
  3. 时序校验逻辑

    // 验证响应时序合规性 
    if(getTimer(responseTimer) < 200) {testAddCondition("响应时间:%dms", getTimer(responseTimer));
    }
    

测试执行说明

  1. 环境配置建议

    [Diagnostic]
    P2Server_Timeout = 3000 
    P2Client_Timeout = 5000 
    
  2. 结果判定标准

    检查项合格标准验证方法
    会话保持100%维持扩展会话日志分析
    复位独立性各类型执行成功率100%状态机验证
    时序符合性误差≤±15%示波器测量

专家调试技巧:

  1. Write窗口添加过滤条件:
    id==733h && (byte(0)==51h || byte(0)==7Fh)
    
  2. 使用Graphic窗口监控信号:
    sysvar::ECU::PowerStatus 
    sysvar::Diag::ActiveSession 
    
  3. 添加总线触发条件:
    on message DiagResID {if(this.byte(0) == 0x7F) break;
    }
    

相关文章:

【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑩】

ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase10 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月18日 关键词&#xff1a;UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-010测试用例 用例ID测试场景验证要点参考条款预期结果TC…...

Android WindowContainer窗口结构

Android窗口是根据显示屏幕来管理&#xff0c;每个显示屏幕的窗口层级分为37层&#xff0c;0-36层。每层可以放置多个窗口&#xff0c;上层窗口覆盖下面的。 要理解窗口的结构&#xff0c;需要学习下WindowContainer、RootWindowContainer、DisplayContent、TaskDisplayArea、T…...

从零到一实现微信小程序计划时钟:完整教程

在本教程中&#xff0c;我们将一起实现一个微信小程序——计划时钟。这个小程序的核心功能是帮助用户添加任务、设置任务的时间范围&#xff0c;并且能够删除和查看已添加的任务。通过以下步骤&#xff0c;我们将带你从零开始实现一个具有基本功能的微信小程序计划时钟。 项目…...

moveable 一个可实现前端海报编辑器的 js 库

目录 缘由-胡扯本文实验环境通用流程1.基础移动1.1 基础代码1.1.1 data-* 解释 1.2 操作元素创建1.3 css 修饰1.4 cdn 引入1.5 js 实现元素可移动1.6 图片拖拽2.缩放3.旋转4.裁剪 懒得改文案了&#xff0c;海报编辑器换方案了&#xff0c;如果后面用别的再更。 缘由-胡扯 导火…...

wangEditor 编辑器 Vue 2.0 + Nodejs 配置

资料 Vue2.0 版本的安装&#xff1a;https://www.wangeditor.com/v5/for-frame.html#%E4%BD%BF%E7%94%A8上传图片配置&#xff1a;https://www.wangeditor.com/v5/menu-config.html#%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87 安装步骤 1.安装界面基础部分 <!-- 富文本编辑器…...

DeepSeek R1生成图片总结2(虽然本身是不能直接生成图片,但是可以想办法利用别的工具一起实现)

DeepSeek官网 目前阶段&#xff0c;DeepSeek R1是不能直接生成图片的&#xff0c;但可以通过优化文本后转换为SVG或HTML代码&#xff0c;再保存为图片。另外&#xff0c;Janus-Pro是DeepSeek的多模态模型&#xff0c;支持文生图&#xff0c;但需要本地部署或者使用第三方工具。…...

x86平台基于Qt+opengl优化ffmpeg软解码1080P视频渲染效率

一般的在arm嵌入式平台&#xff0c;大多数板子都要硬解码硬件渲染的框架&#xff0c;使用即可。 在x86下比较麻烦了。 优化的思路一共有以下几个方面&#xff0c; 1. 软解码变成硬解码 2. 将YUV转QImage的操作转移到GPU 3. QWidget渲染QImage变成opengGL渲染AVFrame 这三点…...

机器学习入门-读书摘要

先看了《深度学习入门&#xff1a;基于python的理论和实践》这本电子书&#xff0c;早上因为入迷还坐过站了。。 因为里面的反向传播和链式法则特别难懂&#xff0c;又网上搜了相关内容进行进一步理解&#xff0c;参考的以下文章&#xff08;个人认为都讲的都非常好&#xff0…...

前端【技术方案】重构项目

1. 明确重构目标 优化性能 减少页面加载时间降低资源占用 提升代码可维护性 更规范的代码风格更清晰的代码结构更明确的模块设计 扩展功能 为项目添加新功能改进现有功能 2. 评估项目现状 审查代码 全面检查现有代码&#xff0c;找出代码中的问题&#xff0c;如代码冗余、耦合…...

大语言模型简史:从Transformer(2017)到DeepSeek-R1(2025)的进化之路

2025年初&#xff0c;中国推出了具有开创性且高性价比的「大型语言模型」&#xff08;Large Language Model — LLM&#xff09;DeepSeek-R1&#xff0c;引发了AI的巨大变革。本文回顾了LLM的发展历程&#xff0c;起点是2017年革命性的Transformer架构&#xff0c;该架构通过「…...

RabbitMQ服务异步通信

消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1. 消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一步都可能导致消息丢失&#xff0c;常见的丢失原因包括&#xff1a; 发送时丢失&#xff1a; 生…...

Python常见面试题的详解7

1. 内置的数据结构有哪几种 Python 中有多种内置的数据结构&#xff0c;主要分为以下几种&#xff1a; 1.1 数值类型 整数&#xff08;int&#xff09;&#xff1a;用于表示整数&#xff0c;没有大小限制。例如&#xff1a;1, -5, 100。浮点数&#xff08;float&#xff09;…...

Django REST Framework (DRF) 中用于构建 API 视图类解析

Django REST Framework (DRF) 提供了丰富的视图类&#xff0c;用于构建 API 视图。这些视图类可以分为以下几类&#xff1a; 1. 基础视图类 这些是 DRF 中最基础的视图类&#xff0c;通常用于实现自定义逻辑。 常用类 APIView&#xff1a; 最基本的视图类&#xff0c;所有其…...

Huatuo热更新--安装HybridCLR

1.自行安装unity编辑器 支持2019.4.x、2020.3.x、2021.3.x、2022.3.x 中任一版本。推荐安装2019.4.40、2020.3.26、2021.3.x、2022.3.x版本。 根据你打包的目标平台&#xff0c;安装过程中选择必要模块。如果打包Android或iOS&#xff0c;直接选择相应模块即可。如果你想打包…...

读书笔记 - 修改代码的艺术

读书笔记 - 修改代码的艺术 第 1 章 修改软件第 2 章 带着反馈工作系统变更方式反馈方式遗留代码修改方法 第 3 章 感知和分离伪协作程序模拟对象 第 4 章 接缝模型接缝 第 5 章 工具自动化重构工具单元测试用具 第 6 章 时间紧迫&#xff0c;但必须修改新生方法&#xff08;Sp…...

【Go并发编程】Goroutine 调度器揭秘:从 GMP 模型到 Work Stealing 算法

每天一篇Go语言干货&#xff0c;从核心到百万并发实战&#xff0c;快来关注魔法小匠&#xff0c;一起探索Go语言的无限可能&#xff01; 在 Go 语言中&#xff0c;Goroutine 是一种轻量级的并发执行单元&#xff0c;它使得并发编程变得简单高效。而 Goroutine 的高效调度机制是…...

c# -01新属性-模式匹配、弃元、析构元组和其他类型

文章目录 **学习摘抄分享**模式匹配概述Null 检查类型测试比较离散值关系模型多个输入ObServation列表模式弃元元组和对象析构利用switch的模式进行匹配对于out的方法调用独立弃元析构元组和其他类型元组方法一方法二方法三方法四使用弃元元组的元素使用弃元的用户定义类型解构…...

同步异步日志系统-日志落地模块的实现

功能&#xff1a;将格式化完成后的日志消息字符串&#xff0c;输出到指定的位置 扩展&#xff1a;支持同时将日志落地到不同的位置 位置分类&#xff1a; 1.标准输出 2.指定文件&#xff08;时候进行日志分析&#xff09; 3.滚动文件&#xff08;文件按照时间/大小进行滚动…...

LabVIEW 天然气水合物电声联合探测

天然气水合物被认为是潜在的清洁能源&#xff0c;其储量丰富&#xff0c;预计将在未来能源格局中扮演重要角色。由于其独特的物理化学特性&#xff0c;天然气水合物的探测面临诸多挑战&#xff0c;涉及温度、压力、电学信号、声学信号等多个参数。传统的人工操作方式不仅效率低…...

类型通配符上限

主函数 package typeWildcardTop;import java.util.ArrayList;public class typeWildcardTopTest {/**/public static void main(String[] args) { // test1();test2();}/*测试showList接收ArrayList类型 ArrayList接收各种类型参数创建animals cats mincats集合 传入s…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...

Android屏幕刷新率与FPS(Frames Per Second) 120hz

Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数&#xff0c;单位是赫兹&#xff08;Hz&#xff09;。 60Hz 屏幕&#xff1a;每秒刷新 60 次&#xff0c;每次刷新间隔约 16.67ms 90Hz 屏幕&#xff1a;每秒刷新 90 次&#xff0c;…...

使用ch340继电器完成随机断电测试

前言 如图所示是市面上常见的OTA压测继电器&#xff0c;通过ch340串口模块完成对继电器的分路控制&#xff0c;这里我编写了一个脚本方便对4路继电器的控制&#xff0c;可以设置开启时间&#xff0c;关闭时间&#xff0c;复位等功能 软件界面 在设备管理器查看串口号后&…...

生信服务器 | 做生信为什么推荐使用Linux服务器?

原文链接&#xff1a;生信服务器 | 做生信为什么推荐使用Linux服务器&#xff1f; 一、 做生信为什么推荐使用服务器&#xff1f; 大家好&#xff0c;我是小杜。在做生信分析的同学&#xff0c;或是将接触学习生信分析的同学&#xff0c;<font style"color:rgb(53, 1…...

[electron]预脚本不显示内联script

script-src self 是 Content Security Policy (CSP) 中的一个指令&#xff0c;它的作用是限制加载和执行 JavaScript 脚本的来源。 具体来说&#xff1a; self 表示 当前源。也就是说&#xff0c;只有来自当前网站或者当前页面所在域名的 JavaScript 脚本才被允许执行。"…...

Kafka深度解析与原理剖析

文章目录 一、Kafka核心架构原理1. **分布式协调与选举**2. **ISR、OSR与HW机制**3. **高性能存储设计**4. **刷盘机制 (Flush)**5. **消息压缩算法**二、高可用与消息可靠性保障1. **数据高可用策略**2. **消息丢失场景与规避**3. **顺序消费保证**三、Kafka高频面试题精析1. …...