ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase11
作者:车端域控测试工程师
更新日期:2025年02月18日
关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023
TC11-011测试用例
用例ID | 测试场景 | 验证要点 | 参考条款 | 预期结果 |
---|---|---|---|---|
TC11-011 | 复位服务参数越界检测 | 发送0x11 0x01 0xAA(非法参数) | §7.1.3 | 返回NRC=0x31(参数越界) |
以下是为TC11-011设计的增强型CAPL测试用例,包含参数边界检测与异常处理机制,包含执行流程图和工业级验证策略:
cpp
/*----------------------------------------------------------
Title:TC11-011 复位服务参数越界验证
作者:车端域控测试工程师
日期:2025-02-18
------------------------------------------------------------*/
variables {
// 诊断通信参数
const long DiagReqID = 0x732; // 诊断请求标识符
const long DiagResID = 0x733; // 诊断响应标识符
const byte ResetSID = 0x11; // ECU复位服务
const byte ResetSubFunc = 0x01; // 硬件复位子功能
const byte InvalidParam = 0xAA; // 非法参数值
const byte ExpectedNRC = 0x31; // 预期否定响应码
// 测试控制参数
msTimer responseTimer;
byte actualNRC = 0x00;
}
testcase TC11_011_ParameterBoundaryTest()
{
TestModuleTitle("TC11-011 复位服务参数越界验证");
// ███ 阶段1:构造非法请求 ███
testStep("STEP1 发送含非法参数的复位请求");
message DiagReqID [CAN] {
dlc = 3;
byte(0) = ResetSID; // 复位服务ID
byte(1) = ResetSubFunc; // 子功能号
byte(2) = InvalidParam; // 非法参数
}
output(this);
// ███ 阶段2:响应捕获与分析 ███
testStep("STEP2 验证否定响应");
setTimer(responseTimer, 500); // 设置500ms响应窗口
while(getTimer(responseTimer) < 500)
{
if(TestWaitForMessage(DiagResID, 100))
{
// 否定响应格式验证
if(this.byte(0) == 0x7F && // 否定响应标识
this.byte(1) == ResetSID && // 服务ID回显
this.byte(2) == ExpectedNRC)
{
actualNRC = this.byte(2);
testStepPass("收到预期NRC=0x%02X", ExpectedNRC);
break;
}
// 异常响应处理
else if(this.byte(0) == 0x7F)
{
actualNRC = this.byte(2);
testStepFail("收到错误NRC=0x%02X", actualNRC);
break;
}
}
}
// ███ 阶段3:综合结果判定 ███
testStep("STEP3 最终结果确认");
if(actualNRC == ExpectedNRC) {
testCasePass("参数越界检测机制正常");
} else if(actualNRC == 0x00) {
testCaseFail("ECU无响应");
} else {
testCaseFail("NRC异常(实际:0x%02X)", actualNRC);
}
}
/*----------------------------------------------------------
总线监控扩展模块(调试辅助)
----------------------------------------------------------*/
on message DiagResID
{
// 实时显示诊断响应
if(this.byte(0) == 0x7F) {
testAddLog("收到NRC=0x%02X @%dms",
this.byte(2), timeNow() - testGetStartTime());
}
}
流程图解(执行逻辑可视化)
Tester ECU 复位请求(0x11 0x01 0xAA) 参数有效性校验 NRC=0x31 验证响应码正确性 Tester ECU
关键参数说明表
参数名称 | 示例值 | 工程校准要点 |
---|---|---|
非法参数值 | 0xAA | 需覆盖OEM定义的参数范围 |
响应超时窗口 | 500ms | 需大于ECU最大处理时间2倍 |
否定响应格式 | 7F 11 31 | ISO 14229标准响应结构 |
参数校验机制 | 范围检查 | 需验证ECU参数表完整性 |
工业级增强功能
-
参数遍历测试
cppvoid ExecuteParamRangeTest() { // 扩展测试: // 1. 遍历所有非法参数值(0x00-0xFF) // 2. 边界值测试(0x00,0x01,0xFE,0xFF) // 3. 随机参数注入 }
-
ECU状态监控
cppon sysvar ECU::ParameterCheck { testAddLog("参数校验状态码:0x%02X", @this::ParameterCheck); }
-
压力测试扩展
cppvoid ExecuteStressTest() { // 可扩展: // 1. 连续发送100次非法请求 // 2. 混合合法/非法请求 // 3. 总线负载90%场景测试 }
测试执行说明
-
环境配置建议
ini[Diagnostic] P2Server_Max = 3000 P3Server_Timeout = 10000
-
结果判定矩阵
检查项 通过标准 验证方法 响应格式 7F 11 31三字节结构 报文解析 响应时间 ≤250ms 时间戳比对 ECU行为 未触发任何复位操作 电源监控 日志记录 记录非法参数访问事件 安全日志分析
调试技巧:
在
Write
窗口添加过滤条件快速定位关键报文:
bashid == 733h && (byte(0) == 7Fh || byte(0) == 51h)
使用
Graphic
窗口监控关键信号:
inisysvar::ECU::ResetAttempts sysvar::Diag::InvalidParamCount
添加总线触发条件捕获异常:
cppon message DiagResID { if(this.byte(0) == 0x7F && this.byte(2) != 0x31) { write("发现异常NRC: 0x%02X", this.byte(2)); break; } }