Основанная на уровне модель является моделью с явным образом запланированными подсистемами. Можно запланировать подсистему с периодическим уровнем выполнения путем определения параметра Sample time для блока Inport, соединенного с блоком Subsystem, блоком Subsystem или блоком в блоке Subsystem, где Шаг расчета может быть задан (например, блок Delay).
Open a completed rate-based model
.
Используя Непрерывные блоки времени, такие как Интегратор не позволены блоки. Вместо этого используйте дискретное время эквивалентные блоки
Рассмотрите следующую модель с двумя атомарными блоками 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; } |