2016-04-06 73 views
1

我试图用CANalyzer的COM接口强制CAN信号给定值。由于没有COM方法发送CAN消息,我使用CAPL实现一种变通方法:如何在CAPL中动态(按字符串)访问CAN信号?

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

这工作得很好,但是因为MyMessageMySignal静态引用(按名称)在这里,我得实现N个功能以发送N个信号(或N路开关语句等)。有没有办法避免字符串消息中的麻烦和访问信号?这样的事情:

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

我也开放的替代解决方案,以防万一我错过了COM接口的东西。如果有一个解决方案只适用于CANoe,我可以向我的老板索要许可证,但我当然宁愿不要。

回答

1

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

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

你可以找到具体为:

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

并注意不要为每个信号发送一条新消息以避免总线过度泛滥。在我看来,设置全部信息的全部信号并且仅当其不是循环的时才发送。循环消息中的信号更新主要是必须在下一个周期发送。