使用 CANoe 发送循环消息 - IL DLL

Sending cyclic message using CANoe - IL DLL

我有一个包含两个 CAN 节点和一个附加数据库的配置设置。我在两个节点上都添加了 CANOEILNLVECTOR.dll。通过添加这个 Dll 文件,我的所有消息都被循环发送,正如我在跟踪 window 中看到的那样。 现在我为消息中的信号设置一些值,例如:

variables
{
  message Battery_Traction Batt_msg;
}

on start
{
  Batt_msg.Isolation_Signal = 0x02; //0x02:On
  output(Batt_msg);
}

我在跟踪上看到的是:消息是循环的,但只有在第一个实例中,我上面设置的值才会出现在跟踪中。对于所有其余时间,消息中的信号值设置为默认值。

如图所示,值 0x02 仅发送一次。

我不确定是什么问题,因为我设置的图像附加值只发送一次。

当使用 output 时,您将消息直接放到 CAN 总线上,但您没有更改(模拟)节点内部的值,因此交互层仍在发送旧值。

您可以在交互层更改信号值,只需在信号名称前加上$并设置值即可。

你的情况很有可能 $Isolation_Signal = 0x02

在正确的时间在CAN总线上输出消息,以正确的周期时间等将由交互层处理。

您有两种方法可以动态影响消息的值:IL DLL 和自定义消息发送。

自定义消息发送是基本方式,其中

  • 您定义消息例如:message Battery_Traction Batt_msg;
  • 你触发它的发送(输出函数)
  • 你设置了循环发送on timer Cycletimemsg1 {output(msg1);} 等等。

IL DLL 正在为您完成这一切,您无需付出太多编码工作,但它们 严重依赖于您链接的 dbc 设置和属性作为您的 CAN 通道 的数据库。

不幸的是,它们不能很好地协同工作,这意味着您需要掌握它们的高级 CANoe 知识才能在同一环境中同时使用它们。您基本上通过发送显式消息绕过了您的 CANOEILNLVECTOR.dlls 工作。

因此,如果您通过 IL 访问信号,您的代码应该如下所示:

variables
{
 /*no need to define custom message object, they are already "known" to IL by dbc*/
}

on start
{
  $Batt_msg::Isolation_Signal = 0x02; //0x02:On
 /*NO need for output either (IF YOUR MESSAGE IS defined Cyclic in dbc), */
}

如果您的信号未在 $Batt_msg::Isolation_Signal 处识别,只需从 CAPL 浏览器的符号面板中拖放信号,然后在其前面添加 $ 符号。

通过美元 ($) 符号,您可以访问 dbsignal class 对象信号值属性。