CAPL: Как мне получить временную метку сообщения, содержащего имя сигнала?

#can-bus #capl #canoe

#can-bus #capl #каноэ

Вопрос:

Я уверен, что это намного проще, чем я пытаюсь представить, но…

В CAPL я пытаюсь вывести временную метку для сигналов, которые имеют определенное значение:

 on signal_update XXX
{ 
   if ($XXX == 42) {
      message * msg  = { DLC = 15 };
  
      getThisMessage(msg, 15);
  
      write("Time: %f", messageTimeNS(msg));
   }
}
  

Итак, учитывая обновление сигнала, как мне получить содержащее сообщение и его временную метку? (Кстати, ‘DLC = 15’ — это просто максимальное значение, которое компилятор позволил мне включить. Я не уверен в правильном значении.)

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

1. Вам нужно само сообщение или достаточно временной метки?

2. Прямо сейчас, просто временная метка. Это такая же «необходимость» для вывода, как и для меня понимание программирования на CAPL и того, какая информация доступна различным обработчикам. Другой подход, который, по моему мнению, мог бы сработать, заключался бы в том, чтобы перехватить сообщение, содержащее signel (там существует временная метка!), и распаковать сообщение, чтобы получить сигналы, но я пока не видел, как это сделать.

Ответ №1:

Вы всегда можете получить текущее время моделирования, используя

 timeNowNS();
  

пока вы находитесь в on signal_update ... блоке, возвращаемое время — это время, которое вызвало выполнение обработчика событий; в данном случае, когда было получено сообщение, содержащее интересующий сигнал.

Время моделирования не изменится во время выполнения обработчиков событий.

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

1. Да. Это то, что я искал. Спасибо!