0

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

variables
{
  message Battery_Traction Batt_msg;
}

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

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

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

跟踪.asc

我不确定可能是什么问题,如图所示,我设置的附加值仅发送一次。

4

2 回答 2

1

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

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

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

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

于 2018-12-07T10:06:23.357 回答
0

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

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

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

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

不幸的是,它们不能很好地配合使用,这意味着您需要先进的 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类对象的信号值属性。

于 2018-12-08T16:05:31.067 回答