Основанная на уровне модель является моделью с явным образом запланированными подсистемами. Можно запланировать подсистему с периодическим уровнем выполнения путем определения параметра 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;
}
|