capl - 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);
}
}
解决方案
您遇到的问题是由于回调。当在总线上更新或更新时on message
,都会on signal
发生回调。message
signal
在您的代码中,如果您按下按钮,您希望更新信号,但前提是您首先检测到该信号已更新。你看到漏洞了吗?
要解决此问题,您可以创建一个系统变量,将其与按钮相关联(使其为0 = not pressed
and 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)
推荐阅读
- unity3d - 在边界距离达到统一后销毁克隆的预制件
- kotlin - 如何在我的单元测试中使用`com.jetbrains.env.PyEnvTestCase`?
- css - 背景过滤器在 Safari 上不起作用(大多数时候)
- javascript - 为什么在使用对象的计算属性时要使用方括号?
- python - 新列保持格式化 xlwings
- sql - Microsoft SQL Server "OPENDATASOURCE" Unicode 阿拉伯语
- android - 在 Android 中绘制圆角矩形
- docker - 如何使用 Ansible docker_swarm 添加主节点
- arrays - 检查一个人是否比 C 中的另一个人大 100 天
- c++ - C++ 标准库中的确定性