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

【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析①】

ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase01

作者:车端域控测试工程师
更新日期:2025年02月14日
关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023

TC10-001测试用例

用例ID测试场景验证要点参考条款预期结果
TC10-001默认会话激活ECU上电后自动进入默认会话§7.2.1收到0x50 0x01响应
/*-------------------------------------------------------------------测试用例 TC10-001:默认会话激活验证 标准依据:ISO 14229-1:2023 §7.2.1 验证目标:ECU上电后自动进入默认会话模式 测试条件:ECU完成完整启动流程 
-------------------------------------------------------------------*/
variables {message 0x7E0 DiagReq = {dlc=8};  // 诊断请求报文 message 0x7E8 DiagRes;           // 诊断响应报文 msTimer ecuBootTimer;            // ECU启动计时器 
}testcase TC10_001_DefaultSessionActivation() 
{//==================== 测试初始化 ====================sysResetECU();                   // 强制ECU断电重启 setTimer(ecuBootTimer, 2000);    // 设置ECU启动等待计时器 //==================== 等待ECU启动 ====================write("等待ECU完成启动初始化...");waitUntil(timeout(3000) || TimerExpired(ecuBootTimer)) {if(TimerExpired(ecuBootTimer)) {write("ECU启动完成");}}//==================== 发送诊断请求 ====================DiagReq.byte(0) = 0x10;          // 诊断会话控制服务 DiagReq.byte(1) = 0x01;          // 子功能:默认会话 DiagReq.dlc = 2;                 // 设置有效数据长度 output(DiagReq);                 // 发送物理层请求 //==================== 响应验证 ====================testWaitForMessage(0x7E8, 1000); // 等待响应超时1秒 if(TestGetLastError() == teTimeout) {testStepFail("错误:未收到ECU响应");return;}if(DiagRes.byte(0) == 0x50 &&    // 验证肯定响应 DiagRes.byte(1) == 0x01)      // 确认当前会话模式 {testStepPass("收到正响应 0x50 0x01");write("测试通过:默认会话已激活");}else if(DiagRes.byte(0) == 0x7F) // 处理否定响应 {testStepFail("收到否定响应 NRC 0x%02X", DiagRes.byte(2));}else {testStepFail("无效响应: [%02X %02X]", DiagRes.byte(0), DiagRes.byte(1));}
}/*------------------------- 执行日志示例 ------------------------- 
[2025-02-14 23:25:12] TC10-001 测试启动 
[2025-02-14 23:25:12] ECU复位操作执行成功 
[2025-02-14 23:25:14] ECU启动完成 
[2025-02-14 23:25:14] 发送请求: 10 01 @ 7E0 
[2025-02-14 23:25:14] 收到响应: 50 01 @ 7E8 
[2025-02-14 23:25:14] 测试通过:默认会话已激活 
----------------------------------------------------------------*/

代码执行流程图

测试系统 ECU 硬件复位信号 执行启动初始化 启动完成(2秒后) 发送10 01诊断请求 响应50 01 验证响应数据 测试系统 ECU

关键实现说明

  1. ECU复位机制
sysResetECU();  // 调用CAPL内置函数模拟硬件复位 
setTimer(ecuBootTimer, 2000);  // 设置ECU启动超时保护 
  1. 三级响应验证逻辑
if(DiagRes.byte(0) == 0x50) {// 肯定响应验证 
} else if(DiagRes.byte(0) == 0x7F) {// 否定响应处理 
} else {// 异常响应处理 
}
  1. 增强的错误处理
testWaitForMessage(0x7E8, 1000);  // 设置响应超时监控 
if(TestGetLastError() == teTimeout) {// 处理通信故障 
}

代码特性说明

功能模块实现说明
ECU复位控制使用标准API模拟完整断电重启过程
启动时序控制2000ms定时器确保ECU完成初始化
报文构造器动态设置DLC长度,符合ISO-TP规范
响应验证器支持正响应、否定响应、异常响应三种情况处理
诊断状态跟踪通过系统变量实时监控会话状态

常见问题处理

  1. ECU未响应情况

    • 检查物理层连接
    • 验证ECU诊断地址配置
    • 确认ECU软件版本支持诊断服务
  2. 收到无效响应码

    • 使用CAPL的testReportPicture功能截图报文交互
    • 检查ECU诊断协议栈配置
    • 确认测试脚本与服务ID匹配
  3. 偶发通信超时

    • 增加testWaitForMessage等待时间
    • 添加重试机制:
      for(int i=0; i<3; i++) {output(DiagReq);if(!testWaitForMessage(0x7E8, 1500)) continue;break;
      }
      

注意事项:

  1. 测试前需确认ECU处于出厂默认状态
  2. 建议配合CANoe的Trace窗口实时监控报文
  3. 该代码需要CANoe 12 SP0及以上版本支持
  4. 完整测试报告可通过testReportGenerate函数生成

将本代码复制到CANoe的Test Module中即可直接运行,测试结果会自动记录在测试报告中。如果对CAPL编程有更多疑问,欢迎在评论区留言讨论。

相关文章:

【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析①】

ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase01 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月14日 关键词&#xff1a;UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-001测试用例 用例ID测试场景验证要点参考条款预期…...

A与B组件自动对齐与组装,无映射直接补偿。

网上针对组装的从视觉到控制动作,要不就是收费,要不就是简单介绍。这么详细的比较难找~ 手下留情,不喜勿喷! Show time~ 分步解决方案: 标定阶段(Calibration) 9点张氏标定(每个位置A1、A2、B1、B2): 使用机械手在相机视野内沿Z字形路径移动,覆盖9个点(XY方…...

QT 读写锁

一、概述 1、读写锁是一种线程同步机制&#xff0c;用于解决多线程环境下的读写竞争问题。 2、读写锁允许多个线程同时获取读锁&#xff08;共享访问&#xff09;&#xff0c;但只允许一个线程获取写锁&#xff08;独占访问&#xff09;。 3、这种机制可以提高并发性能&…...

C++ 的时间库之二:Ratio

从现在开始&#xff0c;我们开始介绍 C 风格的时间处理&#xff0c;在这之前&#xff0c;首先要介绍std::ratio。因为 C 的 chrono库中的时间段&#xff08;duration&#xff09;定义离不开std::ratio&#xff0c;不了解std::ratio&#xff0c;就很难理解duration的定义。 1 st…...

使用小雅xiaoya/Emby正确的观看电影电视剧的姿势

最近有很多小伙伴来咨询关于小雅Emby全家桶的使用问题&#xff0c;最常见的就是在Emby上搜索出来资源之后&#xff0c;点击播放会提示【播放错误】&#xff0c;当前没有兼容的流。 这可把很多小伙伴给急坏了……于是找到小白咨询。 嗯……怎么说呢&#xff1f;小白并不喜欢看电…...

Java状态机

目录 1. 概念 2. 定义状态机 3. 生成一个状态机 4. 使用 1. 概念 在Java的应用开发里面&#xff0c;应该会有不少的人接触到一个业务场景下&#xff0c;一个数据的状态会发生多种变化&#xff0c;最经典的例子例如订单&#xff0c;当然还有像用户的状态变化&#xff08;冻结…...

【Pandas】pandas Series isin

Pandas2.2 Series Computations descriptive stats 方法描述Series.align(other[, join, axis, level, …])用于将两个 Series 对齐&#xff0c;使其具有相同的索引Series.case_when(caselist)用于根据条件列表对 Series 中的元素进行条件判断并返回相应的值Series.drop([lab…...

通过VSCode直接连接使用 GPT的编程助手

GPT的编程助手在VSC上可以直接使用 选择相应的版本都可以正常使用。每个月可以使用40条&#xff0c;超过限制要付费。 如下图对应的4o和claude3.5等模型都可以使用。VSC直接连接即可。 配置步骤如下&#xff1a; 安装VSCODE 直接&#xff0c;官网下载就行 https://code.vis…...

一种最常见的js加密解密

前言 在前端开发的广袤天地中&#xff0c;你是否遭遇过一些看似“乱码”般的代码&#xff0c;根本无从下手理解&#xff1f;这其实很可能是被 _0x处理过的代码。_0x就像一位神秘的“化妆师”&#xff0c;能把原本清晰的代码改头换面。今天&#xff0c;我就来分享如何破解这些被…...

【Python爬虫(4)】揭开Python爬虫的神秘面纱:基础概念全解析

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…...

SMOJ 一笔画/洛谷 P7171 COCI 2020/2021 #3 Selotejp 题解

1.一笔画 题意 给出 n 行 m 列的点阵&#xff0c;每个点是一个字符&#xff1a; “.” 或 “#” &#xff0c;其中“#”表示该点是障碍物。 现在小毛的问题是&#xff1a; 他最少要画多少笔才能把点阵里所有的“.”都覆盖完毕&#xff08;被小毛画到的点就会被覆盖&#xff…...

【Java学习】继承

一、继承 子类继承父类&#xff0c;子类这个类变量的引用在原有的指向子类自己类变量空间的原有访问权限上&#xff0c;增加上了父类类变量空间的访问权限&#xff0c;此时子类类变量指向的空间变为了原来子类类变量空间加上父类类变量空间&#xff0c;此时子类类变量空间就变成…...

计时器任务实现(保存视频和图像)

下面是一个简单的计时器任务实现&#xff0c;可持续地每秒保存一幅图像&#xff0c;也可持续地每60秒保存一个视频&#xff0c;图像和视频均以当前时间命名&#xff1a; TimerTask类的实现如下&#xff1a; class TimerTask { public:TimerTask(const std::string& path):…...

树莓百度百科能否揭开成都树莓集团的神秘面纱?

树莓百度百科作为大众获取信息的重要渠道&#xff0c;在一定程度上为人们了解树莓集团提供了窗口&#xff0c;但要完全揭开其神秘面纱&#xff0c;仍存在一定局限性。 从树莓百度百科上&#xff0c;我们能获取到关于树莓集团的基本信息&#xff0c;如公司的成立时间、法定代表人…...

【如何看懂数据手册和原理图】

【如何看懂数据手册和原理图】 文章目录 【如何看懂数据手册和原理图】1.数据手册1.1去哪里看&#xff1f;1.2需要注意的 2.支路3.回路4.网孔5.电路定理&#xff1a;基尔霍夫定律**集总参数电路** 抽象理想化5.1基尔霍夫电流定律 (KCL)5.2基尔霍夫电压定律 (KVL)5.3总结 6.读懂…...

SQL 优化工具使用之 explain 详解

一、导读 对于大部分开发人员来说&#xff0c;平常接触的无非就是增删改查这些基本操作&#xff0c;创建存储过程&#xff0c;视图等等都是 DBA 该干的活&#xff0c;但是想要把这些基本操作写的近乎完美也是一件难事。 而 explain 显示了 MySQL 如何使用索引来处理 select 语…...

深度解析Unity3D渲染管线:网格、材质与GPU渲染的协同逻辑

在3D实时渲染领域&#xff0c;网格&#xff08;Mesh&#xff09;、材质&#xff08;Material&#xff09;和GPU渲染三者构成了虚拟世界的基石。它们如同乐高积木的零件&#xff0c;通过精确的协作&#xff0c;最终在屏幕上呈现出复杂的视觉场景。本文将从技术原理、协作机制到性…...

POI优化Excel录入

57000单词原始录入时间258S 核心代码: List<Word> wordBookList ExcelUtil.getReader(file.getInputStream()).readAll(Word.class);if (!CollectionUtil.isEmpty(wordBookList)) {for (Word word : wordBookList) {//逐条向数据库中插入单词wordMapper.insert(word);}…...

实时图像与视频超分辨率:高效子像素卷积网络(ESPCN)解析

文章目录 概要理论知识操作实操环境配置基础命令格式&#xff1a;效果示例 概要 超分辨率系列论文阅读卷1&#xff1a;Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network PDF网址&#xff1a;https://arxiv.org/…...

QT--对话框的切换

文章目录 前言一、主窗口ui二、创建子窗口三、步骤1.主界面------>子页面2.子界面------>主页面 四、总结 前言 之前我们学了qt中最重要的东西–信号和槽 我们现在实现这样一个demo&#xff0c;程序启动后弹出主界面&#xff0c;点击主界面的按钮弹出子窗口&#xff0c;…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...