CAPL Scripting - связь CAN C (прекратить передачу одного сообщения от DBC)

Я работаю над сценарием CAPL, который должен разрешать передачу всех сообщений по каналу CAN C и прекращать передачу одного конкретного сообщения из файла базы данных. Кто-нибудь может помочь с методом / функцией / кодом, который я могу использовать?

3 ответа

Решение

Ваш вопрос неопределенный, но я предполагаю, что вы переходите с одного канала CAN на другой. Например, от CAN C до CAN D (или от CAN 3 до CAN 4), чем вы могли бы сделать:

on message CAN3.0x7FF  // This would be that one ID that stops at some point
{
  message CAN4.0x7FF msg;
  msg = this;

  // Assuming you are receiving on CAN 3, and looking to transmit on CAN 4
  if(this.dir == rx)
  {
      // Declare a global variable that sets to 1 when you want it to stop
    if(MSG_STOP == 0)
       output(msg);
  }
}

on message CAN3.*
{

  message CAN4.* msg;
  msg = this;
  if (this.dir == rx)
  {
    output (msg);
  } 
}

AFAIK, единственный способ сделать это - отключить любую автоматическую передачу сообщений (например, через IG или сетевой IL) и передать все сообщения вручную из сценария CAPL в обратных вызовах таймера. Передача может быть выполнена с использованием output функция и в зависимости от того, какие критерии вы определяете, вы можете не вызывать output для любых сообщений, которые должны быть заблокированы.

Если вы используете уровень взаимодействия (IL) в своей имитации, и циклическое время файла DBC правильно настроено, есть некоторые функции CAPL, которые можно использовать для ввода ошибки, что позволит вам выборочно запускать / останавливать передачу определенных сообщений:

on sysvar Sys_m0x461_Send {
/**********************************************************
 * FAULT INJECTION Enable/Disable Msg Sending
 **********************************************************/
  if (@this) {
    ILFaultInjectionEnableMsg(Message0x461fromDBC);
  }
  else {
    ILFaultInjectionDisableMsg(Message0x461fromDBC);
  }
}

В примере, если системная переменная (может быть связана с элементом управления панели, например, флажок) равна '1', сообщение будет передаваться, как определено в DBC, в противном случае отправка сообщения останавливается.

Другие вопросы по тегам