【问题标题】:Assign Signal names dynamically from a String in CAPL从 CAPL 中的字符串动态分配信号名称
【发布时间】:2018-12-27 08:46:32
【问题描述】:

我有一个字符串,用于存储从 Excel 文件中提取的信号名称。 如果我有很多这样的信号,我想使用字符串动态分配信号的名称。

例如,如果我的 dbc 文件中有一个名为“speed”的信号,并且我有一个存储“speed”的字符串,则需要将信号“speed”的值设置为 100。

variable
{
    message BCM BCM;
    char signal[100]= "speed";
}

on message * 
{
    $signal= 100;
}

我得到的错误是:
错误:标识符“信号”没有信号类型。

有没有办法解决这个问题,让我可以通过某种方式将字符串转换为信号名称?

【问题讨论】:

    标签: capl canoe


    【解决方案1】:

    您正在像这样混合可变格式。唯一可以使用 $ 的对象是 dbSignal 类型。您需要的是一个类似 getSignal(dbSignal name); 的函数,但带有 char[] 参数。 遗憾的是,Vector 没有实现这样的解决方法,让您唯一的选择是通过测试用例参数传递信号字符串(如果您使用的是 XML 测试节点)。

    既然,我想你有太多,我建议你用另一种脚本语言编写一个脚本来构造 .can 文件本身的文本,用 excel 中的字符串填充 dbsignals 的位置,然后使用 .can 文件用于测试/模拟。

    【讨论】:

    • 您能否详细说明通过测试用例参数传递信号字符串?
    • 我现在没有安装CANoe,如果你没有找到明年我可以详细说明。我无法为您提供屏幕截图。但是您需要阅读 CANoe 帮助以获取有关 XML 测试节点的指南。无论如何,您也必须通过 xml 文件中的脚本以某种方式填充字符串。您的 xml capltestcase 定义将具有参数 dbsignal="YOURSTRING",然后您的测试用例将定义为 testcasename (dbsignal SigReferencefromParameter)。
    • 嗨 VioletVynil,我找到了一个函数:setSignal(char sigName[], float sigValue);。问题是此函数根本无法按预期工作,并引发如下错误:“系统 01-0083 SetSignal 已为信号 调用,但没有可用的信号驱动程序。”当我尝试使用 MessageName.SignalName = int value; 格式设置信号值时对于单个信号,它可以工作,但是使用 SetSignal 函数对同一单个信号执行相同的操作是行不通的。你能帮忙吗?
    • 是的。信号驱动程序通常是一个 dll。你用什么 dll 来模拟循环消息?
    • 嗨 VioletVynil,我将 IL 分配给了一个节点。作为添加的 IL 一部分的消息和信号没有引发错误,并且我成功传输了所需的信号值。唯一的问题仍然是添加所有节点,这将在 CANoe 的完整版中得到解决。我终于得到了想要的结果。感谢您的指导。如果我再次遇到任何问题,我会在这里与您联系。 :)
    猜你喜欢
    • 2018-04-07
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多