Как вставить блок воспроизведения «на ключе» в CAPL - PullRequest
1 голос
/ 05 марта 2019

Мне интересно, возможно ли создать код CAPL, в котором, используя функцию «по ключу», пользователь может: - активировать режим воспроизведения (файл .asc) - активировать фильтр на нем - дополнительно активировать определенный сигнал (отсутствует в файлах asc) - отключить режим воспроизведения - деактивировать конкретный сигнал - активировать или деактивировать альтернативно конкретные сообщения и / или трассировку

Подробно, на данный момент я использую это:

/*@!Encoding:1252*/
variables // declaration of the specific messages I need
{
    message MESSAGE01 msg_MESSAGE01 ; 
    message MESSAGE02 msg_MESSAGE02 ;
}

on key 't' // here I'd need the activation of a replay block in .asc format with a filter on a specific message
{
// Really don't know how to insert here
}

on key 'd' // here I'd need the deactivation of a replay block in .asc format
{
// Really don't know how to insert here
}

on key 'p' // specific signals deactivation 
{
  msg_MESSAGE01.SIGNAL01= 0; // assign the value to the message
  msg_MESSAGE02.SIGNAL02 = 1; // assign the value to the message
  output(msg_MESSAGE01); //send the message to the CAN bus
  output(msg_MESSAGE02); //send the message to the CAN bus
  // output(output of the asc file); // if activated, I'd like to see in output all the messages of the .asc; if not, I'd like to see just those specific signals.
}

on key 'u' // specific signals deactivation
{
 // msg_MESSAGE01.SIGNAL01 = none; // here, I'd like to "unset" the value
  msg_MESSAGE02.SIGNAL02= 0;
  output(msg_MESSAGE01); 
  output (msg_MESSAGE02);
  // output(output of the asc file); // if activated, I'd like to see in output all the messages of the .asc; if not, I'd like to see just those specific signals.
}

Если не ясно, я могу лучше объяснить мою просьбу:)

Спасибо заранее ^^ Приветствия

1 Ответ

1 голос
/ 06 марта 2019

Добро пожаловать в StackOverflow!

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

Мне понадобитсяактивация / деактивация блока воспроизведения в формате .asc

variables
{
    char replayName[32] = "ibus_data";
}

on key 'b'
{
    replayStart( replayName);
}

on key 'e'
{
    replayStop( replayName);
}

on key 's'
{
    replaySuspend( replayName);
}

on key 'r'
{
    replayResume( replayName);
}

on key 'w'
{
    writeReplayState( replayName);
}

void writeReplayState( char name[])
{
    switch ( replayState( name))
    {
        case 0:
            write( "Replay Block %s is stopped", replayName);
            break;

        case 1:
            write( "Replay Block %s is running", replayName);
            break;
        case 2:
            write( "Replay Block %s is suspended", replayName);
            break;
        default:
            write( "Error: Replay Block %s has an unknown state!", replayName);
            break;
    };
}

Вам необходимо предварительно настроить файл воспроизведения, а для части фильтра требуется другое решение.Для получения дополнительной информации проверьте ссылку и этот пример: ReplayStart, ReplayStop, ReplaySuspend, ReplayResume, ReplayState

От: Обзор функций CAPL »Общие» Пример: ReplayStart, ReplayStop, ReplaySuspend, ReplayResume, ReplayState

специальные сигналы активации / деактивации

Одно «хакерское» решение, которое приходит мне в голову, это иметь систему флагов на месте.Конечно, некрасивое решение, вероятно, есть что-то лучшее под рукой.Попробуйте что-то вроде:

on message myMessage
{
    if (flag)
         output(myMessage)
}

on key 'u'
{
   flag ? 0 : 1  // short for: toggle the status of the flag
}

Пожалуйста, дайте мне знать, если это помогло.


Относительно этого куска кода:

on key 'p' // specific signals deactivation 
{
  msg_MESSAGE01.SIGNAL01= 0; // assign the value to the message
  msg_MESSAGE02.SIGNAL02 = 1; // assign the value to the message
  output(msg_MESSAGE01); //send the message to the CAN bus
  output(msg_MESSAGE02); //send the message to the CAN bus
}

Обратите внимание, что он выигралне делай, что ожидаешь.Вы просите отправить сообщение о действии клавиатуры пользователя.Если сообщение уже было установлено для циклического вывода, оно будет продолжать работать с часами, и на клавиатуре будет произведена дополнительная публикация.В противном случае сообщение будет опубликовано только один раз.

Предлагаемое решение работает с флагом в on message *, который, в свою очередь, работает как фильтр, блокируя сообщение и повторяя его, только если установлен флаг.

...