自适应地检索 CAN 通道的 sysVar BusLoad

Retrieving sysVar BusLoad for CAN channel adaptively

我正在为测试创建程序节点。该测试需要了解被测 CAN 通道的总线负载。除了检索相应通道的 sysVar 总线负载外,该测试几乎是完全自主的。我想这样做,以便我可以像这样检索 BusLoad 值:

正确的方法:

on message *{
      BusLoad = @_Statistics::CAN1::Busload;
}

我想要的:

on message *{
      BusLoad = @_Statistics::this.msgChannel::Busload;
}

我对 CAPL 非常陌生,所以任何帮助都将不胜感激,我不确定这是否可行。

谢谢! :)

你可能会想到这样的事情:

on message *{
  switch (this.can)
      {
        case 1:
          BusLoad = @_Statistics::CAN1::Busload;
          break;
        case 2:
          BusLoad = @_Statistics::CAN2::Busload;
          break;
        case 3:
          BusLoad = @_Statistics::CAN3::Busload;
          break;

        // and so on

        default:
          // what happens on default
          break;
      }
}

您可以通过名称访问系统变量。

试试这个(无法测试这个,我现在不在我的独木舟上):

on message * {
  char buffer[100], format[] = "CAN%d::Busload";

  snprintf(buffer, elcount(buffer), format, this.CAN);
  BusLoad = sysGetVariableInt("_Statistics", buffer);
}

sysGetVariableInt 允许将系统变量的名称指定为字符串。使用 snprintf 您可以 assemble 使用频道号的字符串。