从按钮发送信号值的 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);
}
}
您遇到的问题是由于回调。当 message
或 signal
在总线上更新时,on message
和 on signal
回调都会发生。
在您的代码中,您希望在按下按钮时更新信号,但前提是您首先检测到该信号已更新。看到漏洞了吗?
要解决此问题,您可以创建一个系统变量,将其与按钮相关联(因此它是 0 = not pressed
和 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)
我正在使用 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);
}
}
您遇到的问题是由于回调。当 message
或 signal
在总线上更新时,on message
和 on signal
回调都会发生。
在您的代码中,您希望在按下按钮时更新信号,但前提是您首先检测到该信号已更新。看到漏洞了吗?
要解决此问题,您可以创建一个系统变量,将其与按钮相关联(因此它是 0 = not pressed
和 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)