首页 > 解决方案 > 如何在 Vector CAPL 中发送多个 diagRequest 消息?

问题描述

我目前正在编写一些在单击按钮时执行的 CAPL 代码。它应发送多个诊断请求。但 CANoe 总是告诉我,它一次只能发送一个请求。所以我需要延迟请求。该diagSetRequestInterval功能不起作用。而且由于它不是测试用例,因此testWaitForDiagResponse也不起作用。

标签: requestdiagnosticscaplcanoe

解决方案


您必须等到请求被处理(通过来自目标的响应或超时)。

由于您不在测试节点中,您必须将控制权交还给系统,即您的功能diagSendRequest将结束,您等待总线上的某些事件发生后再继续(否则模拟将停止)。

一旦请求被处理on diagRequest ...,就会被调用。在这个事件过程中,你可以发送下一个请求等等。

例子:

代替:

myFunction()
{
  diagRequest ECU.ProgrammingSession req1;
  diagRequest ECU.SecuritySeed req2:

  diagSendRequest(req1);
  diagSendRequest(req2);
}

你会做这样的事情:

myFunction()
{
  diagRequest ECU.ProgrammingSession req1;
  diagSendRequest(req1);
}

on diagResponse ECU.ProgrammingSession
{
  diagRequest ECU.SecuritySeed req2:
  diagSendRequest(req2);
}

超时处理是一个不同的主题,作为练习:-)


推荐阅读