如何在矢量 CAPL 中发送多个诊断请求消息?



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

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

由于您不在测试节点中,因此您必须将控制权交还给系统,即您的函数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);
}

超时处理是一个不同的主题,并作为练习保留:-(

您实际上希望在 CANoe 中同时实现多个 TP 连接。我假设您在诊断/ISO TP 配置中只有一个诊断说明,它允许您一次只能使用 1 个 TP 连接。

您可以在同一通信通道上的诊断 ISO/TP 中实现多个诊断层,但名称不同。

在模拟节点中,您只需使用不同的命名空间声明所需的请求,该命名空间对应于您之前创建的诊断层名称之一。

这样,您就可以在 UDS 中为 CANoe 环境虚拟化多个 TP 连接。

或者,您不使用 CANoe 的诊断层支持,而是在数据链路层(CAN、FR(上使用 UDS 有效负载构造整个消息。 取决于哪种数据链路层(CAN,FR(以及您设置了多少个具有诊断层的通信通道。

例如,在 Flexray 中,如果您的 frschedule 在动态段中提供了多个 frslot 供 Diaglayer(或您(使用,则可以在同一 frcycle 中发送多个诊断请求。

最新更新