Извлечение sysVar BusLoad для CAN-канала адаптивно - PullRequest
0 голосов
/ 11 октября 2019

Я создаю программный узел для теста. Тест требует знания нагрузки на шину тестируемого канала CAN. Тест является почти полностью автономным, за исключением получения загрузки шины sysVar для соответствующего канала. Я хочу сделать так, чтобы я мог получить значение BusLoad следующим образом:

Правильный путь:

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

Что я хочу:

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

Я чрезвычайноновичок в CAPL, поэтому любая помощь будет оценена, я не уверен, если это вообще возможно.

Спасибо! :)

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Вы можете получить доступ к системным переменным по имени.

Попробуйте это (не смог проверить это, в настоящее время я не в сети от моего CANoe):

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

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

sysGetVariableInt позволяет указатьимя системной переменной в виде строки. С помощью snprintf вы можете собрать строку, используя номер канала.

0 голосов
/ 15 октября 2019

Вы можете подумать о чем-то вроде этого:

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;
      }
}
...