Как отправить несколько сообщений diagRequest в Vector CAPL?

В настоящее время я пишу код CAPL, который выполняется при нажатии кнопки. Он должен отправлять несколько диагностических запросов. Но CANoe всегда говорит мне, что может отправлять только один запрос за раз. Поэтому мне нужно отложить запросы. Функция diagSetRequestInterval не сработала. И поскольку это НЕ тестовый пример, testWaitForDiagResponse тоже не работает.


person Tim L.    schedule 22.08.2018    source источник


Ответы (2)


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

Поскольку вы не на тестовом узле, вы должны вернуть управление системе, т. Е. Ваша функция, которая выполнила diagSendRequest, должна завершиться, и вы будете ждать некоторых событий на шине, прежде чем продолжить (в противном случае симуляция остановится).

После обработки запроса вызывается on diagRequest .... Внутри этой процедуры события вы можете отправить следующий запрос и так далее.

Пример:

Вместо:

myFunction()
{
  diagRequest ECU.ProgrammingSession req1;
  diagRequest ECU.SecuritySeed req2:

  diagSendRequest(req1);
  diagSendRequest(req2);
}

Вы бы сделали что-то вроде этого:

myFunction()
{
  diagRequest ECU.ProgrammingSession req1;
  diagSendRequest(req1);
}

on diagResponse ECU.ProgrammingSession
{
  diagRequest ECU.SecuritySeed req2:
  diagSendRequest(req2);
}

Обработка тайм-аута - это отдельная тема, оставленная в качестве упражнения :-)

person M. Spiller    schedule 23.08.2018

Практически вы хотите реализовать несколько соединений TP одновременно в CANoe. Я предполагаю, что у вас есть только одно диагностическое описание в конфигурации диагностики / ISO TP, что позволяет одновременно использовать только 1 TP-соединение.

Вы можете реализовать несколько слоев диагностики в диагностическом ISO / TP на одном и том же коммуникационном канале сколько угодно, но с разными именами.

В узле моделирования вам нужно будет только объявить требуемый запрос с другим пространством имен, соответствующим одному из ранее созданных имен слоя diag.

Таким образом, вы можете виртуализировать соединение нескольких TP в UDS для среды CANoe.

ИЛИ вы не используете поддержку диагностического уровня CANoe, и вы создаете все сообщение с полезной нагрузкой UDS на своем канальном уровне (CAN, FR). Зависит от того, какой уровень канала передачи данных (CAN, FR) и сколько каналов связи с уровнем диагностики вы установили.

В Flexray, например, вы можете отправлять несколько запросов диагностики в одном цикле frschedule, если ваш frschedule предоставляет несколько frslots в динамическом сегменте, которые Diaglayer (или вы) можете использовать.

person VioletVynil    schedule 21.09.2018