我正在寻找CAPL中的一个函数,它提供与上面提到的函数相同的功能。
此函数用于等待诊断请求是否成功发送的确认。传入的参数是DiagRequest对象和特定的等待时间。如果在此时间段结束时未收到确认,则返回与超时对应的错误代码。另一个错误代码也指失败的其他原因,如协议错误等。
我对这个已建立的"TestWaitForDiagRequestSent“函数的主要问题是,它只能在测试用例结构中使用,该结构可以通过CANoe中的模拟设置中的CAPL、XML或.NET测试模块来实现。我需要实现相同的功能,而不必使用测试模块。
有没有人能推荐另一个不含Test Modules的CAPL函数来做同样的工作,或者建议一个实现这一目标的实用方法?
发布于 2019-03-22 18:34:25
允许测试模块在模拟期间“等待”。
所有其他节点或功能都不允许等待,因为这会阻塞模拟。基本上,模拟调用CAPL-function并等待,直到函数返回。在函数返回之前,不会处理总线上的任何事件。
有一个事件处理程序,当诊断请求成功发送时将调用该事件处理程序。因此,您必须将代码分解为发送请求,方法是使用
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;
}https://stackoverflow.com/questions/55296954
复制相似问题