如何在 Vector CAPL 中发送多个 diagRequest 消息?

How to send multiple diagRequest messages in Vector 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连接。我假设您在 Diagnostic/ISO TP 配置中只有一个 Diagnostic Description,这样您一次只能使用 1 个 TP 连接。

您可以在同一通信通道上的诊断 ISO/TP 中实施多个诊断层,只要您愿意,但命名方式不同。

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

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

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

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