Как остановить отправку PDU в FlexRay с помощью capl

В нашем случае у меня есть PDU FlexRay под названием TEMP, который заполняется в каждом цикле, и я хотел бы смоделировать тайм-аут для этого PDU, но у него нет бита обновления.

У меня есть панель, где я проверяю кнопку включения, чтобы решить, следует ли ее отправлять или нет.

frPdu FR::TEMP_Pdu;

on preStart {
  if (@FR_namespace::TEMP_Enablebutton)
  {
     FRSetSendPDU(TEMP_Pdu); 
  }
}

on frStartCycle * {
   if (@FR_namespace::TEMP_Enablebutton)
      FrUpdatePDU(TEMP_Pdu, 1, 1));
}

Независимо от того, на что я установил свою кнопку, PDU передается в каждом цикле.


person vakesz    schedule 12.12.2018    source источник
comment
Версия каноэ? Вы используете библиотеки IL? Какой вы используете? Вы должны знать, что PDU являются блоками пакетных данных; Это виртуализация физического фрейма. Следовательно, вы должны убедиться, что вы остановили также и фрейм, а не только PDU.   -  person VioletVynil    schedule 13.12.2018


Ответы (2)


FRUpdatePDU () не отправляет другой экземпляр PDU, он просто обновляет следующую итерацию данными из объекта frPDU, поскольку мы говорим о PDU статического кадра, как только VN начинает его отправлять, вы не можете остановить его индивидуально с помощью PDU контроль. введите описание изображения здесь

Фрейм и PDU Фрейм - это физический фрейм Flexray в сети. PDU - это виртуализация части (или всей) полезной нагрузки кадра. Аналогия: почтовый грузовик - это FlexRay Frame, а коробки в нем - PDU. Для почтовой службы (протокол Flexray - уровень OSI 1) важной единицей является сам грузовик, а для вас (клиента) - коробки в нем. Вас никогда не будет интересовать, на каком грузовике доставлены ваши вкусности в ящике, вас интересует только сам контент.

Когда вы вызываете FrUpdatePDU (), вы не только начинаете отправлять PDU, но также активируете (отправляете ненулевые кадры) его слот. Установив для кадра внизу ненулевой кадр, вы гарантируете (в случае статического кадра), что он будет автоматически отправляться циклически с этой точки, независимо от того, что вы хотите делать с PDU (грузовики все равно едут, даже если вы не хотите отправлять в них ящики).

Решение. Я полагаю, что у вас нет библиотек DLL IL, которые могли бы вам помочь, поэтому вы ограничены функциями, которые среда CANoe предоставляет в качестве общих функций IL FlexRay.

  1. Вам необходимо идентифицировать фрейм, несущий PDU.
  2. Вам также необходимо управлять фреймом с помощью frUpdateStatFrame ().

frframe FramefromDBCofTEMPPDU InstanceofFrameTemp;

на frStartCycle * {

if (@FR_namespace::TEMP_Enablebutton==1)

{

mframe.fr_flags=0x0;

frUpdateStatFrame(mframe);

TEMP_Pdu.byte(0xAA);

FrUpdatePDU(TEMP_Pdu, 1, 1));

}

else 

{

mframe.fr_flags=0x80;

frUpdateStatFrame(mframe);

}

}

Итак, на самом деле вам также нужно изменить рамку. Что касается флагов фреймов, ознакомьтесь с определением фреймов в справке.

введите описание изображения здесь

person VioletVynil    schedule 13.12.2018
comment
Спасибо, сработало. Также я хотел бы спросить, что мы можем только бросать коробки в почтовую машину (Рамку), но мы не можем установить, сколько их там будет. Вызвано отсутствие updatebit на ящиках (pdu). @VioletVynil - person vakesz; 13.12.2018
comment
Количество PDU, назначенных кадру, определяется во время предварительной компиляции в базе данных. Это называется PDU-сопоставлением, обычно в формате файлов fibex (xml), AUTOSAR (arxml). Таким образом, вы можете определить сколько угодно PDU для своего фрейма и сопоставить их, но это не так эффективно, некоторые ссылки будут отсутствовать. Обычно вы получаете файл fibex как результат работы основного инструмента конфигурации, который прекрасно интегрирует PDU, фреймы и настройки. Но вы все равно можете определить другие PDU и их биты обновления. Надеюсь, я ответил на ваш вопрос, я не уверен, что это именно то, что вы спросили. - person VioletVynil; 13.12.2018
comment
Nagyon szivesen :) - person VioletVynil; 14.12.2018

Я сам не использую Vector CANoe или CANalyzer, и общедоступной документации почти нет, поэтому я могу предложить только несколько общих советов по отладке:

  • Вы проверили, что @FR_namespace :: TEMP_Enablebutton имеет ожидаемое значение, т.е. что оно действительно ложно, когда вы выключаете кнопку? Вы можете добавить write () перед if () внутри "on frStartCycle", чтобы проверить это.
  • Этот вопрос выглядит примерно так: Отправка периодических сигналов CAN на нажатие кнопки с помощью CAPL и CANalyzer - они используют "on sysvar", чтобы реагировать на нажатие кнопки, возможно, вам нужно сделать что-то подобное. А именно: реагировать на нажатие кнопки, устанавливать переменную среды, проверять эту переменную в "on frStartCycle"
  • Поскольку общедоступной документации не так много, вы также можете попробовать спросить у сотрудников своей компании, возможно, есть люди, которые могут вам помочь.
person user766308    schedule 13.12.2018
comment
Моделирование сообщений CAN полностью отличается от расписания кадров Flexray. Расписание кадров Flexray IL работает иначе. - person VioletVynil; 13.12.2018
comment
Я попытался отладить его, изменения значений присутствуют в кнопке TEMP_Enablebutton. Также здесь не так много людей используют CAPL, но я говорил об этой проблеме с некоторыми из моих коллег, но они не знали, кроме этого. Но спасибо - person vakesz; 13.12.2018