首页 > 解决方案 > CAPL 代码从按钮发送信号值

问题描述

我正在使用 CANoe 11.0 从按钮发送信号值。

我有来自 CAN db 的消息,其中包含 6 个信号,每个信号 8 位。该消息是循环的,但循环时间为 0 毫秒,因此,为了发送它,我发现我需要一个按钮。但到目前为止我尝试的一切都不起作用。

例如:

on message X
{
if (getValue(ev_button) == 1)
{
   X.signalname = (getValue(ev_signalvariable));
}
}

或者我尝试处理信号本身:

on signal Y
{
if (getValue(ev_button) == 1)
{
putValue(ev_signalY,this);
}
}

标签: caplcanoe

解决方案


您遇到的问题是由于回调。当在总线上更新或更新时on message,都会on signal发生回调。messagesignal

在您的代码中,如果您按下按钮,您希望更新信号,但前提是您首先检测到该信号已更新。你看到漏洞了吗?

要解决此问题,您可以创建一个系统变量,将其与按钮相关联(使其为0 = not pressedand 1 = pressed),然后使用on sysvar回调:

on sysvar buttonPressed
{
    // prepare message
    // send message
}

我假设您已经在message yourMessage某处拥有类似的东西,并且您知道来自 DBC 的信号的名称,并且 DBC 与您的配置相关联。所以你需要:

// prepare message
yourMessage.yourValue1 = <some value>
yourMessage.yourValue2 = <some other value>
// ...
// repeat for all relevant signals

接着

// send message
send(yourMessage)

推荐阅读