1

我正在尝试使用 CANalyzer 的 COM 接口将 CAN 信号强制为给定值。由于没有发送 CAN 消息的 COM 方法,我正在使用 CAPL 实现一种解决方法:

void SendMySignal(int value) {
  message MyMessage msg;
  msg.MySignal = value;
  output(msg);
}

这很好用,但是由于MyMessage这里MySignal是静态引用(按名称),我必须实现 N 个函数才能发送 N 个信号(或 N 路 switch 语句等)。有没有办法避免麻烦并通过字符串访问消息中的信号?像这样的东西:

void SendSignal(int MessageID, char SignalName, int value)

如果我错过了 COM 接口中的某些内容,我也愿意接受替代解决方案。如果有一个只适用于 CANoe 的解决方案,我可以向我的老板索要许可证,但我当然更愿意没有。

4

1 回答 1

2

有这样的功能,但仅限于测试节点使用

long setSignal(char signalName[], double aValue);

您可以在以下位置找到详细信息:

CAPL 功能概述 » 测试功能集/信号访问 » SetSignal 特殊用例:在测量开始之前信号未知

并注意不要为每个信号发送一条新消息,以避免总线过载。在我看来,为整个消息设置所有信号并仅在它不是循环时发送它是一种更好的风格。循环消息中的信号更新大多必须在下一个循环中发送。

于 2016-04-19T09:43:07.957 回答