0

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

4

3 回答 3

1

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

于 2016-05-12T17:56:56.723 回答
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);
  } 
}
于 2016-05-31T19:34:16.973 回答
0

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

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

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

于 2017-12-21T17:11:58.197 回答