You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

功能请求场景下CAPL的testWaitForDiagResponse函数失效问题咨询

问题:功能请求场景下CAPL的testWaitForDiagResponse函数失效

问题现象

当使用功能地址发送诊断请求时,调用testWaitForDiagResponse后返回值u32Result为0(超时),但实际ECU已发送响应。

相关代码

diagRequest   STDS_RQ  Dummy_Req_Obj;
long u32RespCode;   
u32RespCode = diagSendRequest(Dummy_Req_Obj); // Send the request
if(0 == u32RespCode)
{
  u32RespCode = testWaitForDiagRequestSent(Dummy_Req_Obj,150000);
  if(u32RespCode == 0){...}
  if(u32RespCode == 1)
  {
    u32Result = testWaitForDiagResponse(Dummy_Req_Obj, 55);
    //u32Result is 0,but the ECU send response
    ...
  }
  ...
}

地址配置

  • 物理地址请求ID:7F1
  • 物理地址响应ID:7F9
  • 功能地址请求ID:7DF

原因分析

testWaitForDiagResponse默认匹配诊断对象绑定的响应ID。如果诊断数据库中Dummy_Req_Obj仅配置了物理地址响应ID(7F9),而功能地址请求对应的ECU响应ID应为7DF + 8 = 7E7,函数无法识别未绑定的响应ID,就会判定超时返回0。

解决方案

  1. 更新诊断数据库配置:
    在诊断数据库(.dbc/.cdb)中,给Dummy_Req_Obj添加功能地址对应的响应ID(7E7),让函数能匹配到功能请求的响应。

  2. 使用testWaitForDiagResponseMatching替代:
    该函数可直接指定要匹配的响应ID,无需依赖诊断对象的绑定配置,示例代码:

    // 显式指定匹配功能地址响应ID 0x7E7
    u32Result = testWaitForDiagResponseMatching(Dummy_Req_Obj, 0x7E7, 55);
    
  3. 确认请求地址模式:
    发送请求前显式设置功能地址,确保请求以功能模式发送:

    diagSetTargetAddress(Dummy_Req_Obj, 0x7DF); // 设置功能请求目标地址
    

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:00:59