从按钮发送信号值的 CAPL 代码

CAPL Code to send signal value from a button

我正在使用 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);
    }
}

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

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

要解决此问题,您可以创建一个系统变量,将其与按钮相关联(因此它是 0 = not pressed1 = 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)