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

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

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

Примечание

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

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

  1. Откройте диалоговое окно Inport 1. На вкладке Signal Attributes, набор Sample time к 0.2.

  2. Откройте диалоговое окно Inport 2. На вкладке Signal Attributes, набор Sample time к 0.4.

  3. Если основанная на уровне модель имеет несколько уровней, одно управление задачами не позволено. Установите флажок для параметра конфигурации Treat each discrete rate as a separate task.

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

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

Параметр конфигурацииЯвным образом запланированные уровниТочки входа сгенерированного кода

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

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

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;
}