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