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

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

Примечание

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

Рассмотрите следующую модель с двумя атомарными блоками 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;
}