Создайте модель, основанную на скорости

Модель, основанная на скорости, является моделью с явно запланированными подсистемами. Можно запланировать подсистему с периодической частотой выполнения, задав параметр Sample time для блока Inport, соединенного с блоком Subsystem, блоком Subsystem или блоком внутри блока Subsystem, где Шаг расчета можно задать (для примера, блок Delay).

Чтобы открыть завершенную модель, основанную на скорости, см. ex_rate_based_model.

Примечание

Использование Непрерывных временных блоков, таких как блоки Интегратора, не разрешено. Вместо этого используйте блоки, эквивалентные дискретному времени

Рассмотрим следующую модель с двумя атомарными блоками Subsystem. Subsystem1 умножает свой вход на 2, а Subsystem2 умножает его вход на 4.

  1. Откройте диалоговое окно Inport 1. На вкладке Signal Attributes установите Sample time равным 0.2.

  2. Откройте диалоговое окно Inport 2. На вкладке Signal Attributes установите Sample time равным 0.4.

  3. Если модель, основанная на скорости, имеет несколько скоростей, одна задача не разрешена. Установите флажок для параметр конфигурации <reservedrangesplaceholder0>.

Многозадачная и многоскоростная модель для генерации кода

Выбор однозадачного и многозадачного и односкоростного и многоскоростного управляет точками входа в сгенерированном коде.

Параметр конфигурацииЯвно запланированные тарифыСгенерированные коды

Однозадачность

Односкоростной

Subsystem1

Subsystem2

Одна функция точки входа вызывается периодически каждые 0,2 секунды

void model_component_step(void)
{
   model_component_Y.Out1 = 2.0 * model_component_U.In1;
   model_component_Y.Out2 = 4.0 * model_component_U.In2;
}

Однозадачность

Мультискоростной

Subsystem1

Subsystem2

Одна функция точки входа вызывается периодически каждые 0,2 секунды, счетчик расписания в функции определяет, какие скорости выполняются в какие шаги расчета.

void model_component_step(void)
{
   model_component_Y.Out1 = 2.0 * model_component_U.In1;
   if (model_component_M->Timing.TaskCounters.TID[1] == 0) {
       model_component_Y.Out2 = 4.0 * model_component_U.In2;
   }
   rate_scheduler();
}

Многозадачность

Односкоростной

Subsystem1

Subsystem2

Одна функция точки входа, тот же код, что и однозадачная с одной скоростью. Не пример использования, но код генерируется без ошибки

Многозадачность

Мультискоростной

Subsystem1

Subsystem2

Две функции точки входа одна вызывается периодически каждые 0,2 секунды, а другая - периодически каждые 0,4 секунды. Скорости выполняются с использованием приоритетную схему упреждающей многозадачности. Более быстрые скорости присваиваются более высоким приоритетам и, таким образом, выполняются первыми.

void model_component_step0(void)
{
   model_component_Y.Out1 = 2.0 * model_component_U.In1;
}

void model_component_step1(void)
{
   model_component_Y.Out2 = 4.0 * model_component_U.In2;
}