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

时间:2018-08-22 12:17:48

标签: vector request diagnostics capl canoe

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

2 个答案:

答案 0 :(得分:0)

您必须等到请求处理完毕(通过目标的响应或超时)。

由于您不在,因此必须将控制权交还给系统,即,执行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);
}

超时处理是一个不同的主题,留作练习:-)

答案 1 :(得分:0)

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

您可以根据需要在同一ISO通道中的诊断ISO / TP中实现多个诊断层,但是可以使用不同的命名。

在模拟节点中,您仅需使用其他名称空间声明所需的请求即可,该名称空间对应于您先前创建的诊断层名称之一。

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

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

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