我正在使用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有点无用
也许有人有个主意。 谢谢
答案 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文件中,我发现了本文档中未提及的属性值。