Как непрерывно отслеживать сигнал CAN с помощью CAPL?

#c #c #can-bus #capl

#c #c #can-bus #capl

Вопрос:

Существует сигнал с именем ‘A’, который имеет значение от 0 до 20 для указанного события. Сигнал будет сброшен на 0 после того, как он досчитает до 20. Интервал времени между каждым появлением составляет 20 мс. Мне нужно отслеживать этот сигнал A 200 раз. Всякий раз, когда счетчик пропускает значение, скажем, например: 0,1,4,5 ..20, мне нужно сохранить этот конкретный экземпляр. Есть ли способ сделать это? Есть ли в CAPL какие-либо команды для отслеживания значения сигнала счетчика A при его изменении.?

Комментарии:

1. Не могли бы вы показать, что вы сделали до сих пор?

2. @M.Spiller Его еще не разработали. Помогут ли эти команды testWaitForMessage и getSignal?

3. Итак, вы разрабатываете код для тестового узла (вы упоминаете testWaitForMessage)? Или ваш код должен выполняться в узле моделирования / измерения? Вы не упоминаете об этом в своем вопросе.

4. Извините @M.Spiller , я забыл упомянуть. Да, я разрабатываю этот код для тестового узла.

Ответ №1:

При запуске в тестовом узле доступно несколько методов для реагирования на сигналы.

Все их имена начинаются с testWaitForSignal . Вы можете просто проверить документацию CANoe для получения подробной информации.

Для вашего конкретного варианта использования вы могли бы использовать

 testWaitForSignalMatch(<signal>, <expectedValue>, 20)
  

Вызов вернется не позднее, чем через 20 мс. Возвращаемое значение будет либо равно 1 , что означает , что сигнал имел ожидаемое значение в течение 20 мс, либо 0 , что означает , что сигнал не имел ожидаемого значения в течение 20 мс.


При запуске в узле моделирования / измерения нет возможности ждать, так как это заблокировало бы симуляцию.

Что вы можете сделать в этих узлах, так это создать обработчик событий, подобный

 on signal_change <signal>
  

В этом обработчике событий вы можете получить доступ к значению сигнала с помощью $<signal> .

Текущую временную метку можно получить с помощью вызова timeNowNS() .

Используя эту информацию, вы могли бы реализовать свою логику в узле моделирования.

Комментарии:

1. Спасибо, все работает. Есть ли какой-либо способ сделать то же самое в режиме моделирования / измерения?

2. Для нетестовых узлов нет возможности ждать , так как ожидание заблокировало бы симуляцию. Что вы можете сделать в этих узлах, так это отреагировать на изменения сигнала с помощью on signal_change обработчика событий, получить значение сигнала и временную метку изменения и реализовать свою логику, используя эту информацию.