2016-04-06 2 views
1

Я пытаюсь заставить сигналы CAN к заданным значениям использовать COM-интерфейс CANalyzer. Поскольку нет COM метода для отправки сообщений CAN, я реализую обходной путь с помощью CAPL:Как получить доступ к CAN-сигналам динамически (по строкам) в 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 Обзор функций »Test Feature Set/Signal Доступ »SetSignal Специальный пример использования: Сигнал не известен перед началом измерений

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