使用 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 对象信号值属性。
我有一个包含两个 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 对象信号值属性。