Отправка циклического сообщения с использованием CANoe - IL DLL - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть настройка конфигурации с двумя узлами CAN и подключенной базой данных.Я добавил CANOEILNLVECTOR.dll для обоих узлов.При добавлении этого файла Dll все мои сообщения отправляются циклически, как я вижу в окне трассировки.Теперь я установил некоторое значение для сигнала в сообщении, например:

variables
{
  message Battery_Traction Batt_msg;
}

on start
{
  Batt_msg.Isolation_Signal = 0x02; //0x02:On
  output(Batt_msg);
}

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

Как видно на изображении, значение 0x02 отправляется только один раз.

Trace.asc

Я не уверен, в чем может быть проблема, так какувиденное на картинке прикрепленное значение, установленное мной, отправляется только один раз.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

У вас есть два способа динамически влиять на значение вашего сообщения: библиотеки DLL и отправка пользовательских сообщений.

Обычная отправка сообщения - это основной способ, где

  • вы определяете сообщение, например: message Battery_Traction Batt_msg;
  • вы запускаете его отправку( выход функция)
  • вы настроили циклическую отправку on timer Cycletimemsg1 {output(msg1);} и т. Д.

IL DLL делают все это дляВы без особых усилий по кодированию с вашей стороны, но они в значительной степени зависят от настроек и атрибутов dbc, которые вы связали в качестве базы данных с вашим каналом CAN .

К сожалению, они не очень хорошо играют вместе, а это значит, что вам нужны передовые ноу-хау CANoe для их использования в одной и той же среде.Вы в основном обошли ваши CANOEILNLVECTOR.dll, работающие, отправив явное сообщение.

Таким образом, ваш код, если вы обращаетесь к своему сигналу через IL, должен выглядеть так:

variables
{
 /*no need to define custom message object, they are already "known" to IL by dbc*/
}

on start
{
  $Batt_msg::Isolation_Signal = 0x02; //0x02:On
 /*NO need for output either (IF YOUR MESSAGE IS defined Cyclic in dbc), */
}

Если ваш сигнал необозначенный на $Batt_msg::Isolation_Signal, просто перетащите сигнал с панели символов браузеров CAPL и добавьте знак $ перед ним.

Через знак доллара ($) вы получаете доступ к атрибуту значения сигнала объектов класса dbsignal .

0 голосов
/ 07 декабря 2018

При использовании output вы помещаете сообщение непосредственно на шину CAN, но не изменяете значение внутри вашего (имитируемого) узла, поэтому уровень взаимодействия все еще отправляет старое значение.

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

В вашем случае наиболее вероятно $Isolation_Signal = 0x02

Выводсообщение на шине CAN в нужное время, с правильным временем цикла и т. д. будет обрабатываться уровнем взаимодействия.

...