【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诊断测试的自动化测试脚本的开发,有兴趣的朋友可以持续关注,另外请点赞、收藏 ,你们的关注是作者更新下去的动力!~~
🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉完结🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉