0

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

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

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

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

女巫有点意思,因为我认为消息对象旨在用于发送字节,您可以通过 msg.byte() 访问

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

也许有人有一个想法。谢谢

4

2 回答 2

2

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

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

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

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

setSignalStartValues(message msg);
于 2017-09-29T08:26:32.037 回答
1

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

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

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

请参阅此支持说明:

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

您可能需要进行一些猜测和实验。在客户提供的 DBC 文件中,我发现了本文档中未提及的属性值。

于 2018-11-22T15:06:02.210 回答