#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
обработчика событий, получить значение сигнала и временную метку изменения и реализовать свою логику, используя эту информацию.