CAPL 函数的替代 "TestWaitForDiagRequestSent"

Alternative to CAPL Function "TestWaitForDiagRequestSent"

我正在寻找 CAPL 中提供与上述函数相同功能的函数。

此函数用于等待诊断请求是否发送成功的确认。传入的参数是 DiagRequest 对象和特定的等待时间。如果在此期间结束时未收到确认,则它 returns 对应于超时的错误代码。另一个错误代码也指其他失败原因,例如协议错误等。

我对这个已建立的 "TestWaitForDiagRequestSent" 函数的主要问题是,它只能在测试用例结构中使用,要么通过 CAPL、XML 或模拟中的 .NET 测试模块实现在 CANoe 中设置。我需要实现相同的功能,而不必使用测试模块。

任何人都可以建议另一个 CAPL 函数来完成相同的工作但不包括测试模块,或者建议一种实现此目的的实用方法?

在模拟期间允许测试模块"wait"。

不允许所有其他节点或功能等待,因为这会阻止模拟。基本上,模拟调用 CAPL 函数并等待函数 returns。在函数 returns.

之前,不会处理总线上的任何事件

有一个事件处理程序在成功发送诊断请求时调用。 因此,您必须使用

将代码分解为发送请求
diagSendRequest(req)

并在使用

成功发送后做出反应
on diagRequestSent <service>
{
  ...
}

为了对未成功响应的请求做出反应,您可以使用计时器并相应地设置全局变量,或者可能是系统变量。

应该执行类似于以下内容的操作。

variables
{
  timer requestTimer;
  int sentSuccessfully;
}

void sendRequest()
{
  ....
  sentSuccessfully = 0;
  diagSendRequest(req);
  setTimer(requestTimer, <timeout>);

}

on diagRequestSent ....
{
  sentSuccessfully = 1;
  cancelTimer(requestTimer);
}

on requestTimer 
{
  sentSuccessfully = -1;
}