Модель на основе скорости - это модель с явно запланированными подсистемами. Можно запланировать подсистему с периодической скоростью выполнения, указав параметр Sample time для блока Inport, подключенного к блоку Subsystem, блоку Subsystem или блоку в блоке Subsystem, где может быть указано время Sample (например, блок Delay).
Чтобы открыть законченную модель на основе скорости, см. раздел ex_rate_based_model.
Примечание
Использование непрерывных временных блоков, таких как блоки интегратора, не допускается. Вместо этого используйте дискретные блоки, эквивалентные по времени
Рассмотрим следующую модель с двумя атомарными блоками подсистемы. Subsystem1 умножает свой вход на 2, в то время как Subsystem2 умножает свой вход на 4.

Откройте диалоговое окно «Ввод 1». На вкладке Signal Attributes установите для параметра Sample time значение 0.2.
Откройте диалоговое окно Inport 2. На вкладке Signal Attributes установите для параметра Sample time значение 0.4.
Если модель на основе скорости имеет несколько скоростей, одиночная постановка задач не допускается. Установите флажок для параметра конфигурации Рассматривать каждую дискретную скорость как отдельную задачу.
Выбор однозадачности в отличие от многозадачности и многоскоростности управляет точками входа в сгенерированном коде.
| Параметр конфигурации | Явно запланированные тарифы | Сгенерированные точки ввода кода |
|---|---|---|
Однозадачность
| Односкоростной 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;
}
|