Основанная на уровне модель является моделью с явным образом запланированными подсистемами. Можно запланировать подсистему с периодическим уровнем выполнения путем определения параметра Sample time для блока Inport, соединенного с блоком Subsystem, блоком Subsystem или блоком в блоке Subsystem, где Шаг расчета может быть задан (например, блок Delay).
Используя Непрерывные блоки времени, такие как Интегратор не позволены блоки. Вместо этого используйте дискретное время эквивалентные блоки
Рассмотрите следующую модель с двумя атомарными блоками Subsystem. Subsystem1 умножает свой вход на 2, в то время как Subsystem2 умножает свой вход на 4.
Откройте диалоговое окно Inport 1. На вкладке Signal Attributes, набор Sample time к 0.2
.
Откройте диалоговое окно Inport 2. На вкладке Signal Attributes, набор Sample time к 0.4
.
Если основанная на уровне модель имеет несколько уровней, одно управление задачами не позволено. Установите флажок для параметра конфигурации 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; } |