【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;
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/70276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是Scaling Laws(缩放定律);DeepSeek的Scaling Laws

什么是Scaling Laws(缩放定律) Scaling Laws(缩放定律)在人工智能尤其是深度学习领域具有重要意义,以下是相关介绍及示例: 定义与内涵 Scaling Laws主要描述了深度学习模型在规模(如模型参数数量、训练数据量、计算资源等)不断扩大时,模型性能与这些规模因素之间的…

大一计算机的自学总结:前缀树(字典树、Trie树)

前言 前缀树&#xff0c;又称字典树&#xff0c;Trie树&#xff0c;是一种方便查找前缀信息的数据结构。 一、字典树的实现 1.类描述实现 #include <bits/stdc.h> using namespace std;class TrieNode { public:int pass0;int end0;TrieNode* nexts[26]{NULL}; };Tri…

【存储中间件API】MySQL、Redis、MongoDB、ES常见api操作及性能比较

常见中间件api操作及性能比较 ☝️ MySQL crud操作✌️ maven依赖✌️ 配置✌️ 定义实体类✌️ 常用api ☝️ Redis crud操作✌️ maven依赖✌️ 配置✌️ 常用api ☝️ MongoDB crud操作✌️ maven依赖✌️ 配置文件✌️ 定义实体类✌️ MongoDB常用api ☝️ ES crud操作 ⭐️…

51单片机入门_10_数码管动态显示(数字的使用;简单动态显示;指定值的数码管动态显示)

接上篇的数码管静态显示&#xff0c;以下是接上篇介绍到的动态显示的原理。 动态显示的特点是将所有位数码管的段选线并联在一起&#xff0c;由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选&#xff…

C++入门《类和对象》之《运算符重载》详解|成员函数重载/非成员函数重载

C 中&#xff0c;运算符重载是一种特殊的函数&#xff0c;它允许程序员为自定义的数据类型&#xff08;如类和结构体&#xff09;重新定义运算符的行为&#xff0c;使得这些运算符能够像处理内置数据类型一样处理自定义类型的数据。下面将从多个方面详细讲解 C 里的运算符重载。…

Salesforce 检索Layout的设定

做了许多Object&#xff0c;却想不起来怎么设置我的Listview的项目了。 問題&#xff1a; salesforce 最近参照したオブジェクト 表示項目を変更したいですが、「検索レイアウト」の選択メニューが該当オブジェクトのオブジェクトマネージャーから出てないです。 解決方法&am…

SECS/GEM300应用案例参考

GEM300 是一种用于半导体制造领域的通信协议标准&#xff0c;主要用于支持 300mm 晶圆制造的自动化生产。以下是 GEM300 的一些具体应用案例&#xff1a; 1. 半导体设备集成 设备制造商的应用&#xff1a;广州金南瓜科技有限公司通过 GEM300 SDK&#xff0c;帮助国内多个半导体…

win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统&#xff0c;报错&#xff1a;Operating System not found 二、原因分析 国产系统&#xff0c;需要注意的点&#xff1a; 需要看你的系统类…

情书网源码 情书大全帝国cms7.5模板

源码介绍 帝国cms7.5仿《情书网》模板源码&#xff0c;同步生成带手机站带采集。适合改改做文学类的网站。 效果预览 源码获取 情书网源码 情书大全帝国cms7.5模板

C语言题目:链表数据求和操作

题目描述 读入10个复数&#xff0c;建立对应链表&#xff0c;然后求所有复数的和。 输入格式 无 输出格式 无 样例输入 1 2 1 3 4 5 2 3 3 1 2 1 4 2 2 2 3 3 1 1 样例输出 2323i 代码功能概述 createNode 函数&#xff1a; 创建一个包含 10 个复数节点的链表。 每个…

STM32 ADC介绍(硬件原理篇)

目录 背景 AD转换器 采样与保持 量化 编码 AD转换器转换原理 DA转换原理 AD转换原理 1.逐次逼近型AD转换器 2.并联比较型AD转换器 编码器 同步D触发器和边沿D触发器 基本RS触发器 同步RS触发器 同步D触发器 边沿型D触发器&#xff08;维持-阻塞D触发器&#xff…

公网远程家里局域网电脑过程详细记录,包含设置路由器。

由于从校内迁居小区,校内需要远程控制访问小区内个人电脑,于是早些时间刚好自己是电信宽带,可以申请公网ipv4不需要花钱,所以就打电话直接申请即可,申请成功后访问光猫设备管理界面192.168.1.1,输入用户名密码登录超管(密码是网上查下就有了)设置了光猫为桥接模式,然后…

流行编程语言全解析:优势、应用与短板

Python&#xff1a; 优势 Python 以其简洁、易读的语法闻名&#xff0c;新手能快速上手。丰富的库和框架&#xff0c;能极大地提高开发效率。 适用领域 数据科学与分析&#xff1a;处理和分析大规模数据集&#xff0c;进行数据可视化。典型示例&#xff1a;Google 用 Pytho…

统信服务器操作系统V20 1070A 安装docker新版本26.1.4

应用场景&#xff1a; 硬件/整机信息&#xff1a;x86平台、深信服超融合平台 OS版本信息&#xff1a;统信V20 1070a 1.获取docker二进制包 链接: https://pan.baidu.com/s/1SukBlra0mQxvslTfFakzGw?pwd5s5y 提取码: 5s5y tar xvf docker-26.1.4.tgz groupadd docker ch…

在 Vue 3 中使用 Lottie 动画:实现一个加载动画

在现代前端开发中&#xff0c;动画是提升用户体验的重要元素之一。Lottie 是一个流行的动画库&#xff0c;它允许我们使用 JSON 文件来渲染高质量的动画。本文将介绍如何在 Vue 3 项目中集成 Lottie 动画&#xff0c;并实现一个加载动画效果。 如果对你有帮助请帮忙点个&#x…

【Spring】Spring配置文件

目录 ​什么是配置文件&#xff1f; 配置文件的作用 SpringBoot配置文件 配置文件格式 配置文件的优先级 properties配置文件说明 properties基本语法 读取配置文件 properties缺点 yml配置文件说明 yml基本语法 使用yml连接数据库 yml配置不同数据类型及null 注意…

蓝桥杯篇---实时时钟 DS1302

文章目录 前言特点简介1.低功耗2.时钟/日历功能3.32字节的额外RAM4.串行接口 DS1302 引脚说明1.VCC12.VCC23.GND4.CE5.I/O6.SCLK DS1302 寄存器1.秒寄存器2.分钟寄存器3.小时寄存器4.日寄存器5.月寄存器6.星期寄存器7.年寄存器8.控制寄存器 DS1302 与 IAP25F2K61S2 的连接1.CE连…

Dubbo:高效的分布式服务框架

引言 在当今互联网应用的快速发展中&#xff0c;微服务架构已经成为一种主流的设计模式&#xff0c;它将一个大型单体应用拆分成多个小型、松耦合的服务。Dubbo 作为一款由阿里巴巴开源的 RPC 服务框架&#xff0c;专门为解决分布式系统中服务通信和治理的问题而设计。本文将深…

Visual Studio Code使用ai大模型编成

1、在Visual Studio Code搜索安装roo code 2、去https://openrouter.ai/settings/keys官网申请个免费的配置使用

【Javascript Day18】

目录 标签事件绑定的属性参数 阻止默认行为 dialog的实现及组织冒泡&#xff08;捕获&#xff09;传递 基于冒泡的事件委托 键盘事件的事件源对象信息 JS的自动触发操作 标签事件绑定的属性参数 <!-- 标签上的事件绑定&#xff0c;事件源对象通过 关键字event传递 --…