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

devtools/2025/2/23 2:30:54/

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

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

TC11-008测试用例

用例ID测试场景验证要点参考条款预期结果
TC11-008多复位请求冲突处理连续发送3次复位请求§8.4.1仅首次请求生效,后续返回NRC=0x78

CAPL_10">以下是为TC11-008设计的增强型CAPL测试用例,包含时序控制与状态跟踪机制,包含执行流程图和工业级异常处理:

/*----------------------------------------------------------Title:TC11-008 多复位请求冲突处理验证 作者:车端域控测试工程师 日期:2025-02-17 
------------------------------------------------------------*/variables {// 通信参数 const long DiagReqID = 0x732;       // 诊断请求标识符 const long DiagResID = 0x733;       // 诊断响应标识符 const byte ResetSvc = 0x11;         // 复位服务ID const byte ResetSub = 0x01;         // 硬件复位子功能 const byte ExpectedNRC = 0x78;      // 预期否定响应码 // 测试控制参数 msTimer responseTimer;int requestCounter = 0;byte responseStatus[3];             // 存储三次响应状态 
}testcase TC11_008_MultiResetTest() 
{TestModuleTitle("TC11-008 多复位请求冲突验证");// ███ 阶段1:连续发送三次复位请求 ███ testStep("STEP1 发送三次复位请求(间隔150ms)");for(requestCounter=0; requestCounter<3; requestCounter++) {// 发送复位请求 message DiagReqID [CAN] {dlc = 2;byte(0) = ResetSvc;byte(1) = ResetSub;}output(this);// 启动响应监测窗口 setTimer(responseTimer, 300);while(getTimer(responseTimer) < 300) {if(TestWaitForMessage(DiagResID, 50)) {// 响应解析逻辑 if(this.byte(0) == 0x51) {responseStatus[requestCounter] = 1;  // 肯定响应 testAddLog("请求%d: 收到肯定响应", requestCounter+1);break;} else if(this.byte(0) == 0x7F && this.byte(1) == ResetSvc && this.byte(2) == ExpectedNRC) {responseStatus[requestCounter] = 2;  // 否定响应 testAddLog("请求%d: 收到NRC=0x%02X", requestCounter+1, ExpectedNRC);break;}}}// 超时处理 if(responseStatus[requestCounter] == 0) {responseStatus[requestCounter] = 3;      // 响应超时 testAddLog("请求%d: 响应超时", requestCounter+1);}// 请求间隔控制 testWait(150);}// ███ 阶段2:结果验证 ███ testStep("STEP2 响应结果验证");// 首次请求验证 if(responseStatus[0] == 1) {testStepPass("首次请求成功执行");} else {testStepFail("首次请求失败(状态码:%d)", responseStatus[0]);}// 后续请求验证 for(int i=1; i<3; i++) {if(responseStatus[i] == 2) {testStepPass("请求%d返回NRC=0x78", i+1);} else {testStepFail("请求%d异常(状态码:%d)", i+1, responseStatus[i]);}}// 综合判定 if(responseStatus[0]==1 && responseStatus[1]==2 && responseStatus[2]==2) {testCasePass("多复位冲突处理验证通过");} else {testCaseFail("冲突处理机制异常");}
}/*----------------------------------------------------------系统状态监控模块(扩展功能)
----------------------------------------------------------*/
on sysvar ECU::ResetStatus 
{if(@this::ResetStatus == 1) {testAddLog("ECU复位操作已触发");testAddCondition("复位持续时间:%dms", sysGetTimer(ECU_RESET_TIMER));}
}

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

Tester ECU 复位请求 肯定响应(0x51) 复位请求 NRC=0x78 复位请求 NRC=0x78 Tester ECU

关键参数说明表

参数名称示例值工程配置要点
请求间隔150ms需小于ECU复位执行时间
响应超时300ms覆盖ECU最大响应时间
NRC 0x78请求未响应ISO 14229-1标准定义
复位子功能0x01OEM定义的硬件复位类型

响应状态矩阵

请求序号预期状态失败场景示例
1肯定响应(0x51)ECU未执行复位
2NRC=0x78返回其他NRC或超时
3NRC=0x78错误响应或系统崩溃

工业级增强功能

  1. 复位状态跟踪

    // 通过系统变量监控实际复位动作 
    on sysvar ECU::PowerStatus {if(@this::PowerStatus == 0x02) {testAddLog("ECU进入重启流程");}
    }
    
  2. 压力测试扩展

    void ExecuteStressTest() {// 可扩展:// 1. 连续发送10次复位请求 // 2. 随机间隔测试(50-500ms)// 3. 混合其他服务请求 
    }
    
  3. 时序校验逻辑

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

专家调试技巧:

  1. Graphics窗口添加观测信号:
    ECU::ResetStatus 
    sysvar::DiagResponseTime 
    
  2. 使用Diagnostic Console设置过滤条件:
    filter.id = 0x733 && (payload[0] == 0x51 || payload[0] == 0x7F)
    
  3. 添加总线监测断点:
    break if (this.id == 0x733 && this.byte(0) == 0x7F)
    

http://www.ppmy.cn/devtools/160819.html

相关文章

GO语言的安装以及第一个Go语言程序

1. Go语言的安装与设置 官网:golang.org 国内下载:https://studygolang.com/dl 国内镜像:https://goproxy.cn/ 2. GOland的安装 Go 1.13 及以上&#xff08;推荐&#xff09; 打开你的终端并执行 $ go env -w GO111MODULEon $ go env -w GOPROXYhttps://goproxy.cn,direc…

2025.2.16机器学习笔记:TimeGan文献阅读

2025.2.9周报 一、文献阅读题目信息摘要Abstract创新点网络架构一、嵌入函数二、恢复函数三、序列生成器四、序列判别器损失函数 实验结论后续展望 一、文献阅读 题目信息 题目&#xff1a; Time-series Generative Adversarial Networks会议&#xff1a; Neural Information…

一周学会Flask3 Python Web开发-Debug模式开启

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 默认情况&#xff0c;项目开发是普通模式&#xff0c;也就是你修改了代码&#xff0c;必须重启项目&#xff0c;新代码才生效&…

ubuntu 创建交换分区 或者扩容交换分区

1. 检查现有的交换空间 sudo swapon --show 2. 禁用现有的交换空间 sudo swapoff /swapfile 3. 删除旧交换分区 sudo rm /swapfile 4. 重新创建交换文件 sudo fallocate -l 16G /swapfile 5. 设置交换文件权限 sudo chmod 600 /swapfile 6. 将文件设置为交换空间 sudo mks…

Windows PyCharm的python项目移动存储位置后需要做的变更

项目使用的venv虚拟环境&#xff0c;因此项目移动存储位置后需要重新配置python解释器的位置&#xff0c;否则无法识别&#xff0c;若非虚拟环境中运行&#xff0c;则直接移动后打开即可&#xff0c;无需任何配置。 PyCharm版本为2021.3.3 (Professional Edition)&#xff0c;其…

如何生成Junit报告

JUnit 报告文件是测试框架生成的一种标准测试结果格式&#xff0c;通常以 XML 文件的形式存储&#xff0c;包含测试套件运行的详细信息。测试工具和框架会在测试执行后生成这些报告文件&#xff0c;具体过程如下&#xff1a; 生成 JUnit XML 报告的过程 测试框架的支持: 许多测…

vue非组件的初学笔记

1.创建Vue实例&#xff0c;初始化渲染的核心 准备容器引包创建Vue实例new Vue() el用来指定控制的盒子data提供数据 2.插值表达式 作用利用表达式插值&#xff0c;将数据渲染到页面中 格式{{表达式}} 注意点 表达式的数据要在data中存在表达式是可计算结果的语句插值表达式…

AWS Lambda自动化部署流程指南

本文详细介绍从代码开发到AWS Lambda部署的完整自动化流程。 一、流程概览 © ivwdcwso (ID: u012172506) 1.1 流程图 #mermaid-svg-K7NI3p8n1wqwExc1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-K7NI3p8…