Как получить доступ к CAN-сигналам динамически (по строке) в CAPL?

Я пытаюсь заставить сигналы CAN к заданным значениям, используя интерфейс COM CANalyzer. Поскольку для отправки CAN-сообщений нет COM-метода, я использую обходной путь, используя CAPL:

void SendMySignal(int value) {
  message MyMessage msg;
  msg.MySignal = value;
  output(msg);
}

Это работает нормально, однако, так как MyMessage а также MySignal здесь ссылки статически (по имени), мне нужно будет реализовать N функций, чтобы можно было отправлять N сигналов (или оператор N-way switch и т. д.). Есть ли способ избежать хлопот и получить доступ к сигналам внутри сообщения по строке? Что-то вроде этого:

void SendSignal(int MessageID, char SignalName, int value)

Я также открыт для альтернативных решений в случае, если я что-то пропустил в интерфейсе COM. Если есть решение, которое работает только для CANoe, я могу попросить моего босса о лицензии, но, конечно, я бы предпочел обойтись без него.

1 ответ

Решение

Такая функция есть, но она ограничена для использования только в тестовых узлах

long setSignal(char signalName[], double aValue);

Вы можете найти детали в:

Обзор функций CAPL "Тестовый набор функций / доступ к сигналу" Особый вариант использования SetSignal: сигнал неизвестен до начала измерения

и постарайтесь не отправлять для каждого сигнала новое сообщение, чтобы избежать переполнения шины. На мой взгляд, лучше установить все сигналы для всего сообщения и отправлять его при изменении только тогда, когда оно не циклично. Обновления сигналов в циклических сообщениях в основном должны отправляться в следующем цикле.

Другие вопросы по тегам