如何在 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);
}
这工作正常,但是由于 MyMessage
和 MySignal
在这里被静态引用(按名称),我必须实现 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
并注意不要为每个信号发送一条新消息以避免总线溢出。在我看来,为整个消息设置所有信号并在变化时发送它是一种更好的方式 仅当它不是循环的 时。循环消息中的信号更新大多数必须在下一个循环中发送。
我正在尝试使用 CANalyzer 的 COM 接口将 CAN 信号强制为给定值。由于没有发送 CAN 消息的 COM 方法,我正在使用 CAPL 实现一个解决方法:
void SendMySignal(int value) {
message MyMessage msg;
msg.MySignal = value;
output(msg);
}
这工作正常,但是由于 MyMessage
和 MySignal
在这里被静态引用(按名称),我必须实现 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
并注意不要为每个信号发送一条新消息以避免总线溢出。在我看来,为整个消息设置所有信号并在变化时发送它是一种更好的方式 仅当它不是循环的 时。循环消息中的信号更新大多数必须在下一个循环中发送。