使用CAPL和dbc信号值发送消息

时间:2017-05-03 13:24:25

标签: can-bus capl canoe

我正在使用CAPL模拟测试环境进行一些小测试,我在发送消息或更具体的设置值时遇到问题。

我可以用$ SignalName读取信号值,我也可以设置这样的信号值。

如果我使用此代码发送消息,则消息数据始终为0:

on key 't'
{
  message MessageName msg;
  setSignal(SignalName,i);
  write("Value: %d",i);
  outport(msg);
}

Witch因为我认为消息对象用于发送你可以通过msg.byte()

访问的字节而有所作为。

我知道我可以通过msg.SignalName在消息中设置信号,但这似乎不是正确的方法。我认为应该有一种方法来发送消息,并且消息中包含的所有信号都设置为SetSignal()函数设置的值。否则,SetSignal Funktion有点无用

也许有人有个主意。 谢谢

2 个答案:

答案 0 :(得分:0)

我使用的是CANalyzer 8.2版,我没有选择使用SetSignal(信号,值)功能。通过访问消息选择器来设置信号值似乎是一种合理的方法。但是你使用了函数outport!您需要使用输出函数来传输消息。

on key 't' {
  message MessageName msg;
  msg.signal1 = value1;
  output(msg);
}

对于此方法,必须配置数据库,以便消息msg包含所有必需的信号(signal1)。

如果要将所有信号值设置为数据库中配置的起始值,请使用以下函数:

setSignalStartValues(message msg);

答案 1 :(得分:0)

您可以设置一个交互层,该层将处理分配给节点的CAN数据库(DBC文件)中定义的消息。交互层将需要数据库中的某些属性来定义如何发送消息。如果尚不存在,则可能必须添加这些属性。如果未按预期发送Tx消息,请检查属性。

如果您想自己实现(并完全控制)消息的发送,则函数output()很有用。

除了使用SetSignal()之外,还可以使用$SignalName = value;

写入信号

请参阅此支持说明

https://kb.vector.com/entry/468/

或直接

https://kb.vector.com/upload_551/file/SN-IND-1-011_InteractionLayer(1).pdf

您可能不得不猜测和尝试一下。在客户提供的DBC文件中,我发现了本文档中未提及的属性值。