Альтернатива функции CAPL "TestWaitForDiagRequestSent" - PullRequest
0 голосов
/ 22 марта 2019

Я ищу функцию в CAPL, которая обеспечивает ту же функциональность, что и вышеупомянутая функция.

Эта функция используется для ожидания подтверждения о том, был ли диагностический запрос успешно отправлен или нет.Передаваемые параметры - это объект DiagRequest и определенный период ожидания.Если в конце этого периода подтверждение не получено, возвращается код ошибки, соответствующий тайм-ауту.Другой код ошибки также относится к другим причинам сбоя, например, к ошибке протокола или тому подобному.

Моя основная проблема с этой установленной функцией «TestWaitForDiagRequestSent» заключается в том, что ее можно использовать только в структуре тестового набора, реализованной с помощью тестового модуля CAPL, XML или .NET в Simulation Setup в CANoe.Мне нужно реализовать ту же функциональность, не используя тестовые модули.

Может ли кто-нибудь предложить другую функцию CAPL, которая выполняет ту же работу, за исключением тестовых модулей, или предложить практические средства для достижения этой цели?

1 Ответ

0 голосов
/ 22 марта 2019

Тестовым модулям разрешено "ждать" во время симуляции.

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

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

diagSendRequest(req)

и отреагировать на успешную отправку с помощью

on diagRequestSent <service>
{
  ...
}

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

Должно быть что-то похожее на следующее.

variables
{
  timer requestTimer;
  int sentSuccessfully;
}

void sendRequest()
{
  ....
  sentSuccessfully = 0;
  diagSendRequest(req);
  setTimer(requestTimer, <timeout>);

}

on diagRequestSent ....
{
  sentSuccessfully = 1;
  cancelTimer(requestTimer);
}

on requestTimer 
{
  sentSuccessfully = -1;
}
...