Как прекратить отправку PDU во FlexRay с помощью capl - PullRequest
0 голосов
/ 12 декабря 2018

В нашем случае у меня есть FlexRay PDU, называемый 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 передается каждый цикл.

Ответы [ 2 ]

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

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

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

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

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

  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);

}

}

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

enter image description here

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

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

  • Вы проверили, что @FR_namespace :: TEMP_Enablebutton имеетожидаемое значение, т. е. что оно действительно ложно при выключении кнопки?Вы можете добавить write () перед if () внутри "on frStartCycle", чтобы проверить это.
  • Этот вопрос выглядит примерно так: Отправка периодических CAN-сигналов при нажатии кнопок с использованием CAPL и CANalyzer - они используют «on sysvar» для реакции на нажатие кнопки, возможно, вам придется сделать что-то подобное.А именно: Реагируйте на нажатие кнопки, установите переменную окружения, проверьте эту переменную в "on frStartCycle"
  • Поскольку публичной документации не так много, вы также можете попробовать поискать внутри своей компании, возможно,некоторые люди вокруг вас, которые могут вам помочь.
...