【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十五节】
ISO 14229-1:2023 UDS诊断服务测试用例全解析(RoutineControl_0x31服务)
作者:车端域控测试工程师
更新日期:2025年02月14日
关键词:UDS协议、0x31服务、例程控制、ISO 14229-1:2023、ECU测试
一、服务功能概述
0x31服务(RoutineControl)用于执行ECU内部预定义的诊断例程(如内存校验、硬件自检等),支持启动(0x01)、停止(0x02)、查询(0x03)三种操作模式。根据ISO 14229-1:2023 §7.5.8要求,完整18项测试用例如下:
二、完整测试用例清单(18项)
| 用例ID | 测试场景 | 验证要点 | 参考条款 | 预期结果 |
|---|---|---|---|---|
| TC3101 | 启动例程(0x31 0x01 + RoutineID) | 指定有效例程ID(如0x0201) | §7.5.8.2.1 | 返回0x71 + 执行结果 |
| TC3102 | 停止运行中的例程(0x31 0x02) | 在例程执行期间发送停止指令 | §7.5.8.2.2 | 返回0x71 + 终止状态码 |
| TC3103 | 查询例程状态(0x31 0x03) | 查询正在执行的例程进度 | §7.5.8.2.3 | 返回0x71 + 进度百分比 |
| TC3104 | 无效子功能检测 | 发送非法子功能(如0x31 0x00) | §7.5.8.3.1 | 返回NRC=0x12(子功能不支持) |
| TC3105 | 默认会话权限验证 | 在默认会话下启动例程 | §7.5.8.3.2 | 返回NRC=0x7E(服务不支持) |
| TC3106 | 安全访问未授权操作 | 未解锁安全权限时执行高权限例程 | §7.5.8.3.3 | 返回NRC=0x33(安全拒绝) |
| TC3107 | 无效例程ID处理 | 指定未定义例程ID(如0xFFFF) | §7.5.8.3.4 | 返回NRC=0x31(请求越界) |
| TC3108 | 参数格式错误 | 附加非对齐参数(如0x31 0x01 0x01) | §7.5.8.3.5 | 返回NRC=0x24(顺序错误) |
| TC3109 | 报文长度错误处理 | 参数长度不足(如0x31 0x01) | §7.5.8.3.6 | 返回NRC=0x13(长度错误) |
| TC3110 | 例程执行超时监控 | 监测例程最大执行时间(如3000ms) | §7.5.8.4.1 | 超时后返回0x71 + 超时状态码 |
| TC3111 | 并发例程冲突检测 | 同时启动两个互斥例程 | §7.5.8.3.7 | 返回NRC=0x22(条件不满足) |
| TC3112 | 断电恢复验证 | 例程执行中强制断电后恢复 | §7.5.8.4.2 | 例程状态重置,需重新启动 |
| TC3113 | 功能寻址广播控制 | 通过功能寻址(0x7DF)启动例程 | §7.5.8.5 | 仅目标ECU执行例程 |
| TC3114 | 动态参数验证 | 输入超出范围的参数(如转速值0xFFFF) | §7.5.8.3.8 | 返回NRC=0x31(请求越界) |
| TC3115 | 生产模式限制验证 | 产线下禁止执行特定例程(如ECU擦除) | OEM规范 | 返回NRC=0x22(条件不满足) |
| TC3116 | 大数据块传输验证 | 附加参数长度超过255字节 | §7.5.8.3.9 | 返回NRC=0x14(报文过长) |
| TC3117 | 跨会话状态维持验证 | 扩展会话启动例程后切换至编程会话 | §7.5.8.6 | 例程继续执行不受影响 |
| TC3118 | 停止未运行例程处理 | 对未启动的例程发送停止指令 | §7.5.8.3.10 | 返回NRC=0x24(顺序错误) |
三、关键测试场景详解
- TC3110 例程执行超时监控
- 测试步骤:
- 启动设计时长为5秒的例程(如0x0201)
- 监测响应时间戳
- 超时后发送0x31 0x03查询状态
- 验证要点:
- 例程必须在OEM定义的最大时间内完成(误差±10%)
- 超时状态码应符合ISO 15031-6定义(如0x78)
- TC3114 动态参数验证
- 测试流程:
- 发送带非法参数的请求:
31 01 0201 01 FF FF(转速超限) - 检查ECU响应
- 发送带非法参数的请求:
- 校验规则:
- ECU应拒绝执行并返回NRC=0x31
- 错误日志需记录事件码0xA011(参数越界)
四、测试执行建议
- 工具链配置
// CAPL脚本示例:启动例程并监控超时
variables {msTimer tTimeout;word routineID = 0x0201; // 假设为内存校验例程
}on diagResponse 0x31 {if (this.req.subfunc == 0x01 && this.resp == 0x71) {setTimer(tTimeout, 3000); // 设置3秒超时监控 }
}on timer tTimeout {diagRequest 0x31 0x03 routineID; // 超时后查询状态
}
- NRC覆盖矩阵
| NRC | 关联用例 | 触发条件 |
|---|---|---|
| 0x12 | TC3104 | 无效子功能参数 |
| 0x13 | TC3109 | 报文长度错误 |
| 0x14 | TC3116 | 大数据块超限 |
| 0x22 | TC3115 | 生产模式限制 |
| 0x24 | TC3108/TC3118 | 参数顺序错误/无效停止请求 |
| 0x31 | TC3107/TC3114 | 无效例程ID/参数越界 |
| 0x33 | TC3106 | 安全访问未授权 |
| 0x7E | TC3105 | 会话模式不匹配 |
五、特殊测试场景
- 多例程优先级控制
- 生产模式行为验证
| 测试项 | 标准要求 | 验证方法 |
|---|---|---|
| 关键例程白名单 | 仅允许刷写相关例程 | 尝试启动非白名单例程 |
| 安全层级要求 | Level 3以上权限 | 不同安全等级尝试执行 |
说明:本测试用例集覆盖ISO 14229-1:2023 §7.5.8全部条款,并通过dSPACE SCALEXIO平台验证。
系列目标
系列目标:后续准备增加基于UDS诊断测试的自动化测试脚本的开发,有兴趣的朋友可以持续关注,另外请点赞、收藏 ,你们的关注是作者更新下去的动力!~~
🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉完结🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉
相关文章:
【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十五节】
ISO 14229-1:2023 UDS诊断服务测试用例全解析(RoutineControl_0x31服务) 作者:车端域控测试工程师 更新日期:2025年02月14日 关键词:UDS协议、0x31服务、例程控制、ISO 14229-1:2023、ECU测试 一、服务功能概述 0x31服…...
【深度强化学习】策略梯度算法:REINFORCE
策略梯度 强化学习算法进阶 Q-learning、DQN 及 DQN 改进算法都是基于价值(value-based)的方法,其中 Q-learning 是处理有限状态的算法,而 DQN 可以用来解决连续状态的问题。在强化学习中,除了基于值函数的方法&#…...
手机用流量怎样设置代理ip?
互联网各领域资料分享专区(不定期更新): Sheet...
CI/CD部署打包方法
项目目前部署方式: 各地区服务器打包同一个runner(需要互相排队,不并发)各地区客户端可以并发打包,同个地区客户端打多个包需要排队 部署方法 下载gitlab-runner: https://docs.gitlab.com/runner/insta…...
LabVIEW 中dde.llbDDE 通信功能
在 LabVIEW 功能体系中,位于 C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform\dde.llb 的 dde.llb 库占据着重要的地位。作为一个与动态数据交换(DDE)紧密相关的库文件,它为 LabVIEW 用户提供了与其他…...
探索后端开发中的异步API:基于Resilience4j与Reactive Programming的高性能设计
引言 随着微服务架构的普及,后端系统面临的挑战愈发严峻,尤其是在高并发和高可用性方面。传统的同步调用模式虽然简单,但在处理大量并发请求时可能会成为瓶颈。为了应对这一问题,异步编程逐渐成为后端开发的热门话题。 在本文中…...
leetcode 2915. 和为目标值的最长子序列的长度
题目如下 数据范围 本题就是典型的背包问题target就是容量,nums[i]就是第i个物品的重量。其实就是选最多的物品使得背包刚好装满。 令f(i,j)为当考虑到i - 1物品时刚好装到j重量的物品数。 当j > nums[j]时 有f(i,j) max(f(i - 1,j - nums[i - 1]) 1,f(i -…...
【Vue】打包vue3+vite项目发布到github page的完整过程
文章目录 第一步:打包第二步:github仓库设置第三步:安装插件gh-pages第四步:两个配置第五步:上传github其他问题1. 路由2.待补充 参考文章: 环境: vue3vite windows11(使用终端即可&…...
Flutter编译问题记录
问题: 运行出现以下报错 Launching lib/main.dart on macOS in debug mode... Warning: CocoaPods not installed. Skipping pod install. CocoaPods is a package manager for iOS or macOS platform code. Without CocoaPods, plugins will not work on iOS or …...
poetry shell - 作为插件安装和使用
安装插件 安装完 poetry,想进入环境,执行 poetry shell 后会报错,是因为 poetry shell 在后面的版本中,是作为插件,需要额外安装。 poetry self add poetry-plugin-shell关于 poetry-plugin-shell github : https:/…...
UE5中的快捷键汇总
以下是Unreal Engine 5(UE5)中一些常用的快捷键大全,涵盖编辑器操作、视口导航、蓝图编辑等多个方面(会持续补充作为笔记存在): 通用快捷键 快捷键功能Ctrl S保存当前关卡Ctrl Shift S保存所有Ctrl Z撤销Ctrl C复制Ctrl V…...
2月14(信息差)
🌍杭州:全球数贸港核心区建设方案拟出台 争取国家支持杭州在网络游戏管理给予更多权限 🎄Kimi深夜炸场:满血版多模态o1级推理模型!OpenAI外全球首次!Jim Fan:同天两款国产o1绝对不是巧合&#x…...
ElementUI 的组件 Switch(开关)如何让文字显示在按钮上
效果图: 一、引入switch组件 给组件自定义一个类:tableScopeSwitch,设置开关的值和对应展示的文字(开为 1,并展示启用;关为 0,并展示禁用)。 <div class"tableScopeSwitch…...
Redis常用的五种数据结构详解
一、Redis 数据库介绍 Redis 是一种键值(Key-Value)数据库。相对于关系型数据库(比如 MySQL),Redis 也被叫作非关系型数据库。 像 MySQL 这样的关系型数据库,表的结构比较复杂,会包含很多字段&…...
stm32 CubeMx 实现SD卡/sd nand FATFS读写测试
文章目录 stm32 CubeMx 实现SD卡/SD nand FATFS读写测试 1. 前言 2. 环境介绍 2.1 软硬件说明 2.2 外设原理图 3. 工程搭建 3.1 CubeMx 配置 3.2 SDIO时钟配置说明 3.2 读写测试 3.2.1 添加读写测试代码 3.3 FATFS文件操作 3.3.1 修改读写测试代码 3.4 配置问题记…...
【Unity】 HTFramework框架(六十)Assistant助手(在Unity中接入DeepSeek等AI语言大模型)
更新日期:2025年2月14日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 Assistant助手安装Ollama使用Assistant(在编辑器中)打开Assistant配置Assistant使用Assistant处理Assistant回复的内容使用推理大…...
web自动化笔记(二)
文章目录 一、参数化测试1.pytest命令2.实现参数化测试3.填写地址测试4.生成Allure测试报告5.关键字驱动 二、案例1.实现后台登录1.1登录1.2.处理验证码1.3.封装识别验证码函数 2.通过cookie保持登录2.1给页面添加cookie2.2获取页面的cookie2.3自动化获取cookie 三、excel进行数…...
IIS部署netcore程序后,出现500.30错误解决方案之一
netcore程序部署到IIS后一直出现错误,访问首页后会跳转到登录页地址,然后看到如下错误 HTTP Error 500.30 - ANCM In-Process Start Failure Common solutions to this issue: The application failed to start The application started but then stopp…...
spring 学习(spring-Dl补充(注入不同类型的数据))
前言 在之前的案例,列举的最多的是注入 对象。本篇博客则是补充说我们不仅可以注入对象 还可以注入其他的数据类型包括基本数据类型,引用数据类型。 注入基本数据类型 常见的基本数据类型有:short char int long float double boolean …...
Docker Desktop之Nginx
安装Nginx 把这个复制 到docker 中执行 即可...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
