我有一个带有两个CAN节点和一个附加数据库的配置设置。我已将CANOEILNLVECTOR.dll添加到两个节点。通过添加此Dll文件,我在跟踪窗口中看到的所有消息都是循环发送的。 现在,我为消息中的信号设置一些值,例如:
variables
{
message Battery_Traction Batt_msg;
}
on start
{
Batt_msg.Isolation_Signal = 0x02; //0x02:On
output(Batt_msg);
}
我在跟踪中看到的是:该消息是循环的,但仅对于第一个实例,我上面设置的值出现在跟踪中。对于所有其余时间,消息中的信号值设置为默认值。
如图像值0x02所示,仅发送一次。
我不确定是什么问题,因为我设置的图像附加值仅发送了一次。
答案 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 类对象的信号值属性。