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(参数越界) |
CAPL_10">以下是为TC11-011设计的增强型CAPL测试用例,包含参数边界检测与异常处理机制,包含执行流程图和工业级验证策略:
/*----------------------------------------------------------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());}
}
流程图解(执行逻辑可视化)
关键参数说明表
参数名称 | 示例值 | 工程校准要点 |
---|---|---|
非法参数值 | 0xAA | 需覆盖OEM定义的参数范围 |
响应超时窗口 | 500ms | 需大于ECU最大处理时间2倍 |
否定响应格式 | 7F 11 31 | ISO 14229标准响应结构 |
参数校验机制 | 范围检查 | 需验证ECU参数表完整性 |
工业级增强功能
-
参数遍历测试
void ExecuteParamRangeTest() {// 扩展测试:// 1. 遍历所有非法参数值(0x00-0xFF)// 2. 边界值测试(0x00,0x01,0xFE,0xFF)// 3. 随机参数注入 }
-
ECU状态监控
on sysvar ECU::ParameterCheck {testAddLog("参数校验状态码:0x%02X", @this::ParameterCheck); }
-
压力测试扩展
void ExecuteStressTest() {// 可扩展:// 1. 连续发送100次非法请求 // 2. 混合合法/非法请求 // 3. 总线负载90%场景测试 }
测试执行说明
-
环境配置建议
[Diagnostic] P2Server_Max = 3000 P3Server_Timeout = 10000
-
结果判定矩阵
检查项 通过标准 验证方法 响应格式 7F 11 31三字节结构 报文解析 响应时间 ≤250ms 时间戳比对 ECU行为 未触发任何复位操作 电源监控 日志记录 记录非法参数访问事件 安全日志分析
调试技巧:
- 在
Write
窗口添加过滤条件快速定位关键报文:id == 733h && (byte(0) == 7Fh || byte(0) == 51h)
- 使用
Graphic
窗口监控关键信号:sysvar::ECU::ResetAttempts sysvar::Diag::InvalidParamCount
- 添加总线触发条件捕获异常:
on message DiagResID {if(this.byte(0) == 0x7F && this.byte(2) != 0x31) {write("发现异常NRC: 0x%02X", this.byte(2));break;} }