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

时间:2018-12-07 09:21:33

标签: can-bus capl canoe

我有一个带有两个CAN节点和一个附加数据库的配置设置。我已将CANOEILNLVECTOR.dll添加到两个节点。通过添加此Dll文件,我在跟踪窗口中看到的所有消息都是循环发送的。 现在,我为消息中的信号设置一些值,例如:

variables
{
  message Battery_Traction Batt_msg;
}

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

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

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

Trace.asc

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

2 个答案:

答案 0 :(得分:0)

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

您只需在信号名称前放置$并设置值即可在交互层中更改信号值。

在您的情况下,很可能是$Isolation_Signal = 0x02

在正确的时间,正确的循环时间等条件下在CAN总线上输出消息将由交互层处理。

答案 1 :(得分:0)

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

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

  • 您定义消息,例如:message Battery_Traction Batt_msg;
  • 您触发其发送(输出功能)
  • 您设置了循环发送on timer Cycletimemsg1 {output(msg1);} 等等。

IL DLL 可以为您完成所有这些工作,而无需您付出太多的编码工作,但是它们非常依赖您已将数据库链接到CAN通道的dbc设置和属性< / em>。

不幸的是,它们不能很好地配合使用,这意味着您需要它们具有先进的CANoe知识才能在相同的环境中使用它们。通过发送显式消息,您基本上可以绕开CANOEILNLVECTOR.dll的工作。

因此,如果您通过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 类对象的信号值属性。