如何在 CAPL 中动态(通过字符串)访问 CAN 信号?

How to access CAN signals dynamically (by string) in CAPL?

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

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

这工作正常,但是由于 MyMessageMySignal 在这里被静态引用(按名称),我必须实现 N 函数才能发送 N 信号(或 N -way switch语句等)。有没有办法通过字符串避免消息中的麻烦和访问信号?像这样:

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

如果我遗漏了 COM 界面中的某些内容,我也愿意接受其他解决方案。如果有只适用于 CANoe 的解决方案,我可以向我的老板申请许可证,但我当然宁愿没有。

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

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

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

CAPL Function Overview » Test Feature Set / Signal Access » SetSignal Special Use Case: Signal is not known before Measurement Start

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