【问题标题】:Sending cyclic message using CANoe - IL DLL使用 CANoe - IL DLL 发送循环消息
【发布时间】:2018-12-09 00:05:31
【问题描述】:

我有一个带有两个 CAN 节点和一个附加数据库的配置设置。我在两个节点上都添加了一个 CANOEILNLVECTOR.dll。通过添加这个 Dll 文件,我的所有消息都会循环发送,正如我在跟踪窗口中看到的那样。 现在我为消息中的信号设置一些值,例如:

variables
{
  message Battery_Traction Batt_msg;
}

on start
{
  Batt_msg.Isolation_Signal = 0x02; //0x02:On
  output(Batt_msg);
}

我在跟踪中看到的是:消息是循环的,但仅在第一个实例中,我上面设置的值出现在跟踪中。对于所有剩余时间,消息中的信号值设置为默认值。

如图所示,值 0x02 仅发送一次。

我不确定可能是什么问题,如图所示,我设置的附加值仅发送一次。

【问题讨论】:

    标签: can-bus capl canoe


    【解决方案1】:

    使用output 时,您将消息直接放到 CAN 总线上,但您不会更改(模拟)节点内部的值,因此交互层仍在发送旧值。

    您可以在交互层更改信号值,只需在信号名称前加上$ 并设置值即可。

    你的情况很可能是$Isolation_Signal = 0x02

    在正确的时间,以正确的循环时间在 CAN 总线上输出消息等将由交互层处理。

    【讨论】:

    • 我不确定要在哪里添加 $ 符号。您是否要求在 CAPL 脚本中添加 $ ?这将导致编译错误。我应该如何更改 IL 中的值?
    • 正如所说的“在信号名称前放一个 $”。只需从符号浏览器中拖放即可轻松获取信号名称。
    【解决方案2】:

    您有两种方法可以动态影响消息的值:IL DLL 和自定义消息发送。

    自定义消息发送是基本的方式,其中

    • 您定义消息例如:message Battery_Traction Batt_msg;
    • 你触发它的发送(输出函数)
    • 你设置了循环发送on timer Cycletimemsg1 {output(msg1);} 等等。

    IL DLL 为您完成这一切,无需您进行太多编码工作,但它们严重依赖您作为数据库链接到 CAN 通道的 dbc 设置和属性。

    不幸的是,它们不能很好地配合使用,这意味着您需要掌握它们的高级 CANoe 知识才能在同一环境中使用它们。您基本上通过发送显式消息绕过了您的 CANOEILNLVECTOR.dll。

    因此,如果您通过 IL 访问信号,您的代码应如下所示:

    variables
    {
     /*no need to define custom message object, they are already "known" to IL by dbc*/
    }
    
    on start
    {
      $Batt_msg::Isolation_Signal = 0x02; //0x02:On
     /*NO need for output either (IF YOUR MESSAGE IS defined Cyclic in dbc), */
    }
    

    如果您的信号未在$Batt_msg::Isolation_Signal 中识别,只需从 CAPL 浏览器的符号面板中拖放信号,并在其前面添加 $ 符号。

    通过美元 ($) 符号,您可以访问 dbsignal 类对象的信号值属性。

    【讨论】:

    • 是的,你说得对,IL dll 严重依赖 dbc 设置和属性。大多数时候我使用定时器来发送循环值,因为我看到我的数据库没有为消息定义循环属性(主要是事件周期性)。非常感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2021-10-06
    • 2012-05-24
    相关资源
    最近更新 更多