В этом примере показано, как смоделировать планирование задач приложения управления с помощью блоков SimEvents. SimEvents расширяет Simulink с возможностью смоделировать и симулировать архитектурные компоненты системы реального времени.
Топ-модель включает две области блоков:
Функциональные компоненты включают две системы с обратной связью. У каждого есть пропорциональный контроллер, управляющий объектом.
Архитектурные Компоненты включают блоки SimEvents, моделируя задачи и планировщик этой системы управления.
Этот пример демонстрирует контроллер, когда Simulink экспортировал модель функции. Это сопоставляет выполнение контроллера к программной задаче, которую операционная система периодически планирует и выполняет. Задача может быть разделена на несколько сегментов (или подзадачи). Из-за зависимостей по данным, эти сегменты должны быть выполнены в последовательном порядке.
Задача задана следующими параметрами:
ID: Уникальный идентификатор задачи.
Период: Как часто задача инстанцируют для выполнения.
Приоритет: Приоритет задачи (меньшее значение указывает на более высокий приоритет).
Список выполнимых сегментов (функции): Исполняемые файлы сопоставлены с каждым сегментом задачи. Эти исполняемые файлы представлены функциями Simulink экспортируемой модели функции.
Длительность выполнения сегмента: Время для сегмента задачи, чтобы завершиться, если это выполняется на процессоре без прерывания.
Диск потребностей i/o ресурс для каждого сегмента: Требует ли сегмент задачи использования защищенного от взаимного исключения совместно используемого ресурса (жесткий диск).
Например, блок Task 2 задает задачу для второго контроллера (блок Controller2). Задача включает два сегмента, "t2_run" и "t2_write", оба смоделированные, когда Simulink функционирует в модели seSwcController2. В этих сегментах "t2_write" требует использования защищенного от взаимного исключения совместно используемого ресурса.
Планировщик операционной системы моделируется со следующими компонентами:
Создание задачи: Блокируйте Задачу 1, и Задача 2 создают задачи и управляют состояниями задачи. Сущность SimEvents представляет экземпляр задачи. Свойства задачи (такие как ее приоритет) моделируются как атрибуты сущности.
Очередь задачи: После инстанцирования задача соединяет готовую очередь задачи, которая моделируется блоком Entity Queue Очередь Задачи ОС. Чтобы симулировать неприоритетную основанную на приоритете политику планирования, блок очереди сконфигурирован, чтобы отсортировать задачи по атрибуту taskPriority.
Центральный процессор: процессор системы моделируется как центральный процессор блока Entity Server. Это принимает сущности от Очереди Задачи ОС и обрабатывает сущность на время, как задано параметром длительности выполнения Сегмента задачи. В конце этой задержки соответствующая функция Simulink этого сегмента задачи вызвана как часть Сервиса блока полное действие.
Блокируйте/разблокируйте Взаимное исключение: Прежде чем сегмент задачи вводит блок CPU, он должен получить необходимый ресурс в предыдущем блоке Lock Mutex. После того, как сегмент задачи завершает и выходит из блока CPU, ресурс выпущен в блоке Unlock Mutex.
Состояния задачи управления: Блоки под маской Задачи 1 и Задачи 2 управляют состоянием во время выполнения задач. После завершения сегмента задачи, если задача имеет последующие сегменты, чтобы выполниться, задача направляется назад Очереди Задачи ОС. В противном случае этот экземпляр задачи завершается и отбрасывается.
Блок CPU сконфигурирован с двумя ядрами. Симуляция модели генерирует следующую Диаграмму Гантта.
Более высокая приоритетная задача, Задача 2 (красные панели), планируется к базовому 1 (y = 1).
Более низкая приоритетная задача, Задача 1 (синие панели), планируется к базовым 2 (y = 2).
Второй сегмент Задачи 2 использования взаимное исключение DiskLock. Зеленые панели указывают на использование (y = 3).
Измените следующие параметры и исследуйте, как расписания задачи и эффективность контроллера изменяются реконфигурированными архитектурными параметрами.
В блоке CPU сконфигурируйте Возможность параметра изменить количество ядер.
В Задаче блоков 1 и Задаче 2, сконфигурируйте параметры, такие как Период и Приоритет изменить технические требования задачи.
Например, если мы изменяем диск Потребности i/o ресурс для каждого параметра сегмента блока Task 1 к [0 0 1], t1_write сегмент Контроллера 1 должен получить взаимное исключение DiskLock, прежде чем это сможет начать запускаться. Симуляция генерирует Диаграмму Гантта, которая иллюстрирует то изменение.
Обе задачи имеют сегменты, которые используют взаимное исключение DiskLock, как обозначено зелеными панелями (y = 3).
Третий сегмент Задачи 1 теперь должен выполниться последовательным способом со вторым сегментом Задачи 2 (см. y = 1), потому что оба сегмента совместно используют взаимное исключение DiskLock.
Entity Generator | Сервер сущности | Очередь | Пул ресурсов | Получатель ресурса | Ресурс Releaser