0

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

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

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

任何人都可以建议另一个 CAPL 函数来完成相同的工作减去测试模块,或者建议一种实用的方法来实现这一点?

4

1 回答 1

1

在模拟期间允许测试模块“等待”。

不允许所有其他节点或功能等待,因为这会阻止模拟。基本上,模拟调用 CAPL 函数并等待函数返回。在函数返回之前,不会处理总线上的任何事件。

有一个事件处理程序在成功发送诊断请求时调用。因此,您必须通过使用将代码分解为发送请求

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;
}
于 2019-03-22T10:34:25.047 回答