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

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

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

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

TC11-001测试用例

用例ID测试场景验证要点参考条款预期结果
TC11-001硬复位功能验证发送0x11 0x01请求硬复位§8.2.1收到0x51 0x01响应,ECU重启后进入默认会话
/*----------------------------------------------------------------*/
/* 测试用例ID      : TC11-001                                     */
/* 测试项名称      : 硬复位功能验证                               */
/* 测试依据        : §8.2.1                                       */
/* 验证目标        : 收到0x51 0x01响应,ECU重启后进入默认会话     */
/* 作者            : 车端域控测试工程师                          */
/* 创建日期        : 2025-02-16                                   */
/* 版本历史        : V1.0 - 初始版本                              */
/*----------------------------------------------------------------*/variables 
{// 总线参数 const long ReqID = 0x732;  // 请求报文ID const long ResID = 0x733;  // 响应报文ID const byte HardResetReq[2] = {0x11, 0x01}; // 硬复位请求 const byte ExpectedRes[2] = {0x51, 0x01};  // 预期响应 // 状态跟踪 int responseReceived = 0;msTimer resetMonitorTimer;byte postResetSessionStatus;
}testcase TC11_001_HardResetValidation()
{TestModuleTitle("TC11-001 硬复位功能验证");// 步骤1:发送硬复位请求 testStep("发送硬复位指令");message ReqID [CAN] {dlc = 2;byte(0) = HardResetReq[0];byte(1) = HardResetReq[1];}output(this);// 步骤2:等待响应(带200ms超时)testWaitForTimeout(200);if(TestWaitForMessage(ResID, 50)) {// 验证基础响应 if(this.byte(0) == ExpectedRes[0] && this.byte(1) == ExpectedRes[1]) {testStepPass("收到正确基础响应");responseReceived = 1;// 启动复位监控计时器 setTimer(resetMonitorTimer, 1500);  // 1.5秒复位周期 }else {testStepFail("响应错误,收到:0x%02X 0x%02X", this.byte(0), this.byte(1));}}else {testStepFail("响应超时未收到");}// 步骤3:验证复位后状态 if(responseReceived){testStep("监测ECU复位状态");// 等待复位完成 while(getTimer(resetMonitorTimer) < 1500) {if(TestGetSignal(ECU_Operational) == 1) break;testWait(10);}// 发送会话状态查询 message ReqID [CAN] {dlc = 2;byte(0) = 0x10;  // 诊断会话控制 byte(1) = 0x01;  // 默认会话 }output(this);// 检查会话响应 if(TestWaitForMessage(ResID, 100)) {postResetSessionStatus = this.byte(1);if(postResetSessionStatus == 0x01) {testStepPass("成功进入默认会话");testAddCondition("ECU完整复位验证通过");}else {testStepFail("会话状态异常,当前状态:0x%02X", postResetSessionStatus);}}else {testStepFail("会话状态查询超时");}}
}on timer resetMonitorTimer 
{testStepInterrupt("ECU复位超时,最大等待时间1.5秒");
}on message ResID 
{// 实时捕获所有响应消息 if(this.byte(0) == 0x7F && this.byte(1) == 0x11) {testStepFail("收到否定响应码:0x%02X", this.byte(2));}
}

测试架构设计说明

  1. 三层验证体系
Yes
No
通过
失败
指令发送层
响应验证层
响应正确?
复位监控层
失败分析
状态确认层
会话验证
成功记录
异常定位
  1. 关键技术实现

  2. 双阶段验证机制:

    • 第一阶段验证基础响应格式
    • 第二阶段验证物理复位效果
  3. 实时状态监控:

    // ECU运行状态跟踪 
    while(getTimer(resetMonitorTimer) < 1500) {if(TestGetSignal(ECU_Operational) == 1) break;testWait(10);  // 10ms轮询间隔 
    }
    
  4. 否定响应处理:

    on message ResID 
    {if(this.byte(0) == 0x7F && this.byte(1) == 0x11) {testStepFail("收到否定响应码:0x%02X", this.byte(2));}
    }
    
  5. 异常处理设计

  • 四级超时保护:

    监控阶段超时时间处理措施
    基础响应等待50ms标记通信故障
    整体测试窗口200ms终止测试流程
    ECU复位监控1500ms触发硬件异常报警
    会话状态查询100ms记录状态检测失败
  • 错误代码映射:

    // 常见否定响应码参考 
    const byte NRC_Table[8] = {0x11, // ServiceNotSupported 0x12, // SubFunctionNotSupported 0x22, // ConditionsNotCorrect 0x31, // RequestOutOfRange 0x72, // GeneralProgrammingFailure 0x93, // VoltageTooHigh 0x94, // VoltageTooLow 0xFD  // CybersecurityVerificationFailed 
    };
    
  1. 扩展性设计

  2. 参数化配置接口:

    // 可通过外部XML注入参数 
    diagService HardResetService {Request  : 0x11 0x01 Response : 0x51 0x01 Timeout  : 200 
    }
    
  3. 多场景支持:

    • 电压突变场景(12V→0→12V)
    • 看门狗复位场景
    • 异常断电恢复场景
  4. 自动化校验扩展:

    // 可添加内存校验函数 
    long ValidateMemoryState(byte memoryArea)
    {// 实现内存区域校验逻辑 return CheckSum(memoryArea);
    }
    

工程实践建议

  1. 环境配置要求:

    • CANoe版本:12.0 SP0以上
    • 硬件接口:VN1640A或更高规格
    • 测试模式:需连接真实ECU供电系统
  2. 执行注意事项:

    • 建议在ECU完成完整启动流程后执行
    • 避免与其他诊断服务并行执行
    • 需要配置电源监控模块
  3. 结果分析要点:

    关键指标正常范围异常处理措施
    复位响应时间50-150ms检查ECU固件版本
    电压跌落幅度≤5% Vnom验证电源线路阻抗
    重启耗时800-1200ms分析启动初始化流程
    内存校验差异值0x00000000检查EEPROM写入保护
  4. 关联测试建议:

    • 结合TC11-002(软复位验证)
    • 配合TC09-005(异常供电测试)
    • 关联TC15-007(看门狗复位测试)

高级调试技巧:建议在Trace中过滤[TEST]标签,配合使用CAPL的TestNode视图观察状态迁移,同时启用CANoe的ECU Reset Monitor插件进行物理层监控。

相关文章:

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

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

Discuz! X3.5 根目录权限设置

在 Discuz! X3.5 中,根目录的权限设置是确保网站安全性和功能正常运行的关键。如果权限设置不当,可能会导致文件无法访问、安全问题(如文件被篡改)或功能异常。以下是关于 Discuz! X3.5 根目录权限设置的详细说明和建议: 1. 根目录位置 Discuz! X3.5 的根目录通常是网站的…...

建筑兔零基础自学python记录22|实战人脸识别项目——视频人脸识别(下)11

这次我们继续解读代码&#xff0c;我们主要来看下面两个部分&#xff1b; 至于人脸识别成功的要点我们在最后总结~ 具体代码学习&#xff1a; #定义人脸名称 def name():#预学习照片存放位置path M:/python/workspace/PythonProject/face/imagePaths[os.path.join(path,f) f…...

React之旅-02 创建项目

创建React项目&#xff0c;常用的方式有两种&#xff1a; 官方提供的脚手架&#xff0c;官网&#xff1a;https://create-react-app.dev/。如需创建名为 my-app 的项目&#xff0c;请运行如下命令&#xff1a; npx create-react-app my-app 使用Vite包&#xff0c;官网&…...

uniapp 滚动尺

scale组件代码&#xff08;部分class样式使用到了uview1.0的样式&#xff09; <template><view><view class"scale"><view class"pointer u-flex-col u-col-center"><u-icon name"arrow-down-fill" size"26&qu…...

Redux中间件redux-thunk和redux-saga的具体区别是什么?

Redux 中间件是增强 Redux 功能的重要工具&#xff0c;redux-thunk 和 redux-saga 是两个常用的中间件&#xff0c;它们在处理异步操作和副作用时提供了不同的方式和理念。以下是两者的具体区别&#xff1a; 1. 概念与设计理念 redux-thunk 简洁&#xff1a;redux-thunk 是一…...

Windows 启动 SSH 服务

Windows 启动 SSH 服务 一、OpenSSH Server 安装 以 Win10 系统为例 打开设置 -> 系统 -> 可选功能 在 添加的功能 查看是否安装了 OpenSSH 服务 或者 OpenSSH Server 如果没有安装&#xff0c;找到 系统->添加可选功能 -> 查看功能->搜索 OpenSSH 服务 ->…...

rust笔记1-学习资料推荐

学习Rust的Trait、生命周期和模式确实需要一些时间&#xff0c;尤其是当这些概念在其他语言中不常见时。以下是一些学习资料和建议&#xff0c;帮助你更好地理解这些概念&#xff1a; 1. 官方文档与书籍 《The Rust Programming Language》&#xff08;俗称“The Book”&…...

MySQL 的存储引擎有哪些?它们之间有什么区别? MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别? MySQL 的索引类型有哪些?

MySQL 的存储引擎有哪些&#xff1f;它们之间有什么区别&#xff1f; 先来回顾以下我们业务场景下一般的数据库访问的过程应用——>server层 ——>存储引擎层——>磁盘 官网描述&#xff1a; InnoDB: MySQL 8.4 中的默认存储引擎。 InnoDB 是事务安全&#xff08;符…...

【Linux探索学习】第二十六弹——进程通信:深入理解Linux中的进程通信

Linux探索学习&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 在Linux操作系统中&#xff0c;进程通信&#xff08;IPC&#xff09;是操作系统的一项核心功能&#xff0c;用于在不同进程之间交换数据或…...

netcore https配置

一、生成证书 1. 安装 OpenSSL 如果尚未安装 OpenSSL&#xff0c;可以通过以下命令安装&#xff1a;Ubuntu/Debian:sudo apt update sudo apt install openssl CentOS/RHEL:sudo yum install openssl 2. 生成私钥 使用以下命令生成私钥文件&#xff08;private.key&#xff09…...

遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…...

rtcwake - Linux下定时唤醒计算机

rtcwake 是一个用于通过实时时钟&#xff08;RTC&#xff09;唤醒计算机的工具。它常用于在 Linux 系统中设置计算机在指定时间自动唤醒或关闭。以下是对命令 rtcwake -m off -s ${sleep_time} 的详细解析&#xff1a; 命令解析 bash复制 rtcwake -m off -s ${sleep_time} 1…...

使用vscode调试transformers源码

简要介绍如何使用vscode调试transformers源码 以源码的方式安装transformers&#xff08;官方手册为Editable install&#xff09; 优先参考官方手册 git clone https://github.com/huggingface/transformers.git cd transformers pip install -e .以下展示transformers/exa…...

LeetCode39

LeetCode39 目录 题目描述示例思路分析代码段代码逐行讲解复杂度分析总结的知识点整合总结 题目描述 给定一个无重复元素的整数数组 candidates 和一个目标整数 target&#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复选…...

sql not in 优化

sql优化 1、not in 的优化 not in和not exists不会命中索引&#xff0c;可以优化为通过left join实现&#xff1b; 例如要查询存在于a表但不存在与b表的数据&#xff0c;比较容易理解的sql写法&#xff1a; SELECT * FROM table_a WHERE id NOT IN (SELECT aid FROM table_b)…...

同花顺C++面试题及参考答案

对 C 和 C++ 哪个更熟悉? 在编程语言的学习与实践中,我对 C++ 更为熟悉。C 语言作为一门经典的编程语言,以其高效、灵活和接近硬件的特性,在系统编程、嵌入式开发等领域占据着重要地位。它提供了丰富的底层操作能力,如指针操作、内存管理等,为开发者直接控制计算机资源提…...

PostgreSQL 添加索引导致崩溃,参数调整需谨慎--文档未必完全覆盖场景

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;共2720人左右 1 …...

【Linux Redis】关于用docker拉取Redis后,让虚拟机运行起来redis,并使得其可以连接到虚拟机外的navicat。

步骤一&#xff1a;拉取Redis镜像 docker pull redis 这个命令会下载最新版本的Redis镜像到你的本地Docker仓库中。你也可以指定一个具体的版本号&#xff0c;例如docker pull redis:6.2.6&#xff0c;来拉取特定版本的Redis镜像。 如果拉取遇到问题请参考【Linux AnolisOS】关…...

Python常见面试题的详解8

1. 变量作用域和查找规则&#xff08;LEGB&#xff09; 作用域层级&#xff1a; Local&#xff1a;函数内部作用域 Enclosing&#xff1a;闭包函数外层作用域 Global&#xff1a;模块全局作用域 Built-in&#xff1a;内置命名空间 查找顺序&#xff1a;L → E → G → B关…...

【含文档+PPT+源码】基于微信小程序的校园志愿者管理系统的设计与实现

项目介绍 本课程演示的是一款 基于微信小程序的校园志愿者管理系统的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…...

LED灯闪烁实验:实验介绍

文章目录 1 实验目标2 工具链2.1 硬件2.2 软件 3 实验流程 1 实验目标 本实验结合Matlab/Simulink工具链和STM工具链&#xff0c;实现STM32开发板上的LED灯闪烁功能。 2 工具链 2.1 硬件 STM32F103C8T6最小系统板 STM32F103C8T6最小系统板是基于STM32F103C8T6微控制器的开发…...

亲测Windows部署Ollama+WebUI可视化

一. Ollama下载 登录Ollama官网(Ollama)点击Download进行下载 如果下载很慢可用以下地址下载&#xff1a; https://github.com/ollama/ollama/releases/download/v0.5.7/OllamaSetup.exe 在DeepSeek官网上&#xff0c;你可以直接点击【model】 到达这个界面之后&#xff0c;…...

代码随想录-- 第一天图论 --- 岛屿的数量

99 统计岛屿的数量 c 99. 岛屿数量 #include <iostream> #include <vector> #include <queue>using namespace std;struct MGraph {int numVertices, numEdges;vector<vector<int>> Edge; };int dir[4][2] {{1, 0}, {0, 1}, {-1, 0}, {0, -1}…...

Docker 部署 Nacos (图文并茂超详细)

部署 Nacos ( Docker ) [Step 1] : 拉取 Nacos 镜像 docker pull nacos/nacos-server:v2.1.1[Step 2] : 创建目录 ➡️ 创建容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器 # 创建目录 mkdir -p /data/nacos/{conf,logs,data}# 创建容器 docker run -p 8848:8848 --name …...

petalinux高版本设置自动登录和开机自启动配置

petalinux-config -c rootfs 依次选择 Image Features -> serial-autologin-root 这是配置 进来就是root权限 创建并安装名为 myapp-init 的新建应用程序 petalinux-create -t apps --template install -n myapp-init --enable 编辑 project-spec/meta-user/recipes-…...

MySQL 的存储引擎简介

使用show engines可以查看安装的MySQL的引擎相关信息 MySQL 的引擎不止这么多&#xff0c;这只是安装的这个版本有的引擎。可以看到&#xff0c;只有 InnoDB 支持事务&#xff0c;其他的引擎都是不支持事务的。 说几个我了解的比较多的引擎&#xff1a; InnoDB InnoDB 是MyS…...

《Operating System Concepts》阅读笔记:p34-p40

《Operating System Concepts》学习第 7 天&#xff0c;p34-p40 总结&#xff0c;总计 7 页。 一、技术总结 1.virtualization(虚拟化) (1)定义 A technology for abstracting the hardware of a single computer into several different execution environments, thereby …...

嵌入式0xDEADBEEF

在嵌入式系统中&#xff0c;0xDEADBEEF 是一个常见的“魔数”&#xff08;magic number&#xff09;&#xff0c;通常用于调试和内存管理。它的含义和用途如下&#xff1a; 1. 调试用途 未初始化内存的标记&#xff1a;在调试时&#xff0c;0xDEADBEEF 常用于标记未初始化或已…...

“深入浅出”系列之QT:(10)Qt接入Deepseek

项目配置&#xff1a; 在.pro文件中添加网络模块&#xff1a; QT core network API配置&#xff1a; 将apiUrl替换为实际的DeepSeek API端点 将apiKey替换为你的有效API密钥 根据API文档调整请求参数&#xff08;模型名称、温度值等&#xff09; 功能说明&#xff1a; 使…...