Скрипт CAPL получает сообщение один раз

У меня есть требование, согласно которому каждый сигнал внутри кадра будет отправлен при инициализации ECU с начальным значением. поэтому мне нужно зафиксировать это значение с помощью CAPL. Я сделал следующее: я определил переменную следующим образом:

first_reception = 0 ;

а затем внутри события сообщения я получаю начальное значение, если эта переменная равна нулю, и сохраняю его в системной переменной, а затем устанавливаю first_reception на 1:

{

 if (first_reception == 0 )
 {
   @sysvar::mymsg::signal_initialValue = this.signal;
   first_reception = 1;

 }

}

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


person ASayed    schedule 23.04.2020    source источник
comment
почему бы вам не создать конфигурацию с тестовыми примерами в ней, по одному тесту для каждого сигнала. Тестовый пример будет ждать сигнала один раз, проверять значение и быть либо пройден, либо не пройден, в любом случае он будет выполнен и никогда не будет запускаться снова. Затем запустите все тестовые примеры с запуска моделирования, чтобы получить значения инициализации.   -  person Daemon Painter    schedule 25.04.2020


Ответы (1)


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

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

Затем избавьтесь от first_reception и просто:

if (yoursysvar == -999)
{
    // set your sysvar to new value
    // you'll never enter the if again
}
person Daemon Painter    schedule 25.04.2020