CAPL脚本 - CAN C通信(停止从DBC发送一条消息)

问题描述 投票:0回答:3

我正在研究一个CAPL脚本,它必须允许所有消息在CAN C通道上传输,并停止从数据库文件传输一个特定的消息。任何人都可以帮助我可以使用的方法/功能/代码?

can-bus capl
3个回答
1
投票

你的问题很模糊,但我假设你是从一个CAN频道转到另一个。例如,CAN C到CAN D(或CAN 3到CAN 4),你可以做到:

on message CAN3.0x7FF  // This would be that one ID that stops at some point
{
  message CAN4.0x7FF msg;
  msg = this;

  // Assuming you are receiving on CAN 3, and looking to transmit on CAN 4
  if(this.dir == rx)
  {
      // Declare a global variable that sets to 1 when you want it to stop
    if(MSG_STOP == 0)
       output(msg);
  }
}

on message CAN3.*
{

  message CAN4.* msg;
  msg = this;
  if (this.dir == rx)
  {
    output (msg);
  } 
}

1
投票

AFAIK,实现此目的的唯一方法是禁用任何消息的自动传输(例如,通过IG或网络IL),并在计时器回调中手动从CAPL脚本传输所有消息。可以使用output函数完成传输,并根据您定义的任何条件,您可以选择不为任何应阻止的消息调用output


0
投票

如果在模拟中使用交互层(IL),并且正确配置了DBC文件循环时间,则可以使用一些CAPL函数进行故障注入,这将允许您有选择地启动/停止传输某些消息:

on sysvar Sys_m0x461_Send {
/**********************************************************
 * FAULT INJECTION Enable/Disable Msg Sending
 **********************************************************/
  if (@this) {
    ILFaultInjectionEnableMsg(Message0x461fromDBC);
  }
  else {
    ILFaultInjectionDisableMsg(Message0x461fromDBC);
  }
}

在该示例中,如果系统变量(可以链接到面板控件,例如复选框)等于'1',则消息将按照DBC中的定义进行传输,否则消息发送停止。

© www.soinside.com 2019 - 2024. All rights reserved.