exponenta event banner

Планирование на основе времени и создание кода

Примеры соображений по времени

Модели Simulink ® работают с одним или несколькими примерами времени. Продукт Simulink обеспечивает значительную гибкость при создании многоскоростных систем, то есть систем с более чем одной выборкой времени. Однако эта же гибкость позволяет создавать модели, для которых генератор кода не может генерировать код реального времени для выполнения в многозадачной среде. Чтобы многоскоростные модели работали так, как ожидалось, в режиме реального времени (т.е. чтобы дать правильные ответы), иногда необходимо изменить модель или дать команду механизму Simulink изменить модель. Как правило, изменения включают размещение блоков Rate Transition между блоками с неравным временем выборки. В следующих разделах рассматриваются проблемы, которые необходимо решить для использования многоскоростной модели в многозадачной среде. Подробное обсуждение времени выборки, включая переходы скорости, см. в разделах Что такое время выборки?, Времена выборки в подсистемах, Времена выборки в системах, Разрешение переходов скорости и связанные с этим темы.

Режимы задания

Существует два режима выполнения для модели с фиксированным шагом: однозадачность и многозадачность. Эти режимы доступны только для решателей с фиксированным шагом. Чтобы выбрать режим выполнения, выберите параметр конфигурации модели Рассматривать каждую дискретную скорость как отдельную задачу. При выборе этого параметра для многоскоростной модели применяется многозадачное выполнение. При сбросе этого параметра применяется однозадачное выполнение.

Примечание

Многоскоростная модель, использующая многозадачность, не может ссылаться на многоскоростную модель, использующую однозадачность.

Выполнение моделей в системе реального времени может быть выполнено с помощью операционной системы реального времени, или это может быть сделано на целевом оборудовании с голым металлом, где модель выполняется в контексте подпрограммы обслуживания прерываний (ISR).

Тот факт, что система (например, Open Group UNIX ® или Microsoft ® Windows ®) работает в многозадачном режиме, не означает, что программа может выполняться в режиме реального времени. Это связано с тем, что при необходимости программа может не вытеснить другие процессы.

В операционных системах (таких как PC-DOS), где в данный момент времени может существовать только один процесс, подпрограмма обслуживания прерываний (ISR) должна выполнять шаги сохранения контекста процессора, выполнения кода модели, сбора данных и восстановления контекста процессора.

Другие операционные системы, такие как POSIX-совместимые, обеспечивают автоматическое переключение контекста и планирование задач. Это упрощает операции, выполняемые ISR. В этом случае ISR просто включает задачу выполнения модели, которая обычно блокируется. На следующем рисунке показано это различие.

Выполнение модели и переходы скорости

Для создания кода, который выполняется в режиме реального времени, возможно, потребуется определить и обработать переходы частоты дискретизации в модели. В многозадачном режиме модуль Simulink по умолчанию помечает ошибки во время моделирования, если модель содержит недопустимые переходы скорости, хотя для изменения этого поведения можно использовать параметр конфигурации модели Многозадачный переход скорости. Параметр Single task rate transfer доступен для той же цели в режиме одной задачи.

Чтобы избежать повышения частоты ошибок перехода, вставьте блоки Rate Transition между задачами. Можно запросить, чтобы механизм Simulink автоматически обрабатывал переходы скорости, вставляя скрытые блоки перехода скорости. Описание этого параметра см. в разделе Автоматический переход скорости.

Чтобы понять такие проблемы, сначала рассмотрим, чем симуляция Simulink отличается от программ реального времени.

Выполнение во время моделирования модели Simulink

Перед моделированием модели модулем Simulink блоки упорядочиваются на основе их топологических зависимостей. Это включает в себя расширение виртуальных подсистем в отдельные блоки, которые они содержат, и сведение всей модели в единый список. После завершения этого шага каждый блок выполняется по порядку.

Ключом к этому процессу является упорядочение блоков. Блок, выход которого напрямую зависит от его входа (то есть блок с прямым проходом), не может выполняться до тех пор, пока не будет выполнен блок, управляющий его входом.

Некоторые блоки устанавливают свои выходы на основе значений, полученных на предыдущем временном шаге или из начальных условий, заданных в качестве параметра блока. Выход такого блока определяется значением, хранящимся в памяти, которое может обновляться независимо от его ввода. Во время моделирования вычисления выполняются до продвижения переменной, соответствующей времени. Это приводит к немедленным вычислениям (т.е. к отсутствию задержки вычислений).

Выполнение модели в реальном времени

Программа реального времени отличается от симуляции Simulink тем, что программа должна выполнять код модели синхронно с реальным временем. Каждый расчет приводит к некоторой вычислительной задержке. Это означает, что интервалы выборки не могут быть сокращены или удлинены (так как они могут быть в симуляторе Simulink), что приводит к менее эффективному выполнению.

Рассмотрим следующий график.

Обратите внимание на неэффективность обработки в интервале выборки t1. Этот интервал не может быть сжат для увеличения скорости выполнения, поскольку, по определению, время выборки синхронизируется в реальном времени.

Эту потенциальную неэффективность можно обойти с помощью многозадачного режима. Режим многозадачности определяет задачи с различными приоритетами для выполнения частей кода модели, имеющих разные частоты дискретизации.

Описание этого процесса см. в разделе Режимы многозадачности и псевдомультитаскинга. Важно понять этот раздел, прежде чем переходить к нему.

Однозадачная и многозадачная работа

Однозадачные программы требуют более длительных интервалов выборки, поскольку все вычисления должны выполняться в течение каждого периода времени. Это может привести к неэффективному использованию доступного времени ЦП, как показано на предыдущем рисунке.

Многозадачный режим может повысить эффективность программы, если модель большая и содержит множество блоков, выполняемых с каждой скоростью.

Однако если в модели доминирует одна скорость, и только несколько блоков выполняются с меньшей скоростью, многозадачность может фактически снизить производительность. В такой модели издержки, возникающие при переключении задач, могут быть больше времени, необходимого для выполнения более медленных блоков. В этом случае более эффективно выполнять все блоки с доминирующей скоростью.

Если у вас есть модель, которая может извлечь выгоду из многозадачного выполнения, вам может потребоваться изменить модель, добавив блоки Rate Transition (или поручить обработчику Simulink создать ожидаемые результаты).

Дополнительные сведения о двух режимах выполнения и примерах см. в разделах Моделирование для однозадачного выполнения и Моделирование для многозадачного выполнения.

Связанные темы