exponenta event banner

Вариационные подсистемы

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

Обзор вариационных подсистем

Блок Variant Subsystem содержит две или более дочерние подсистемы, в которых один дочерний компонент активен во время выполнения модели. Активная дочерняя подсистема называется активным вариантом. Можно программно переключать активный вариант блока «Подсистема исполнения», изменяя значения переменных в глобальной рабочей области или переопределяя выбор исполнения вручную с помощью диалогового окна «Блок подсистемы исполнения». Активный вариант программно подключается к блокам Inport и Outport подсистемы Variant от Simulink во время компиляции модели.

Для программного управления выбором вариантов Simulink.Variant объект связан с каждой дочерней подсистемой в диалоговом окне блока Variant Subsystem. Simulink.Variant создаются в глобальной рабочей области MATLAB ®. Эти объекты имеют свойство с именемCondition, которое является выражением, которое вычисляется как логическое значение и используется для определения активной дочерней подсистемы варианта.

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

Например, определение VSS_LINEAR_CONTROLLER=Simulink.Variant('VSS_MODE==1');

в глобальной рабочей области создает Simulink.Variant объект, где аргумент конструктора ('VSS_MODE==1') определяет, когда вариант активен. С помощью диалогового окна «Variant Subsystem» можно связать VSS_LINEAR_CONTROLLER с одной из дочерних подсистем в составе Variant Subsystem. Определение

VSS_MODE=1

в глобальной рабочей области, активирует VSS_LINEAR_CONTROLLER вариант. Аргумент условия может быть простым выражением, состоящим из скалярных переменных, перечислений, равенства, неравенства, & &, и ~. Для группировки приоритетов можно использовать круглые скобки ().

Использование исполнительных подсистем

Модель в этом примере использует следующие объекты исполнения и переменную управления исполнениями, которые определены в глобальной рабочей области MATLAB:

VSS_LINEAR_CONTROLLER=Simulink.Variant('VSS_MODE==1');

VSS_NONLINEAR_CONTROLLER=Simulink.Variant('VSS_MODE==2');

VSS_MODE=2;

Открытие модели-примера sldemo_variant_subsystems запускает PreLoadFcn, определенный в File -> ModelProperties -> Callbacks. При этом глобальная рабочая область заполняется переменными для блока Variant Subsystem с именем Controller:

open_system('sldemo_variant_subsystems')

Рис. 1: Пример модели, sldemo_variant_subsystems

Чтобы указать Simulink.Variant связь объектов для подсистемы контроллера, щелкните правой кнопкой мыши подсистему контроллера и выберите Subsystem Parameters, в результате чего откроется диалоговое окно блока подсистемы контроллера.

Диалоговое окно блока подсистемы контроллера определяет два возможных варианта. Два варианта, в свою очередь, связаны с двумя Simulink.Variant объекты VSS_LINEAR_CONTROLLER и VSS_NONLINEAR_CONTROLLER, которые существуют в глобальной рабочей области. Эти объекты имеют свойство с именем Condition, выражение, которое вычисляется как логическое и определяет, какой вариант активен. Условие также отображается в диалоговом окне «Блок подсистемы исполнения». В этом примере свойства Condition VSS_LINEAR_CONTROLLER и VSS_NONLINEAR_CONTROLLER являются VSS_MODE == 1 и VSS_MODE == 2соответственно. Переменная VSS_MODE находится в глобальной рабочей области и может быть стандартной переменной MATLAB или Simulink.Parameter.

Если в диалоговом окне Параметры подсистемы исполнения (Variant Subsystem parameters) отсутствует связанный объект исполнения или символ «%» (comment), то дочерняя подсистема считается закомментированной и не используется при выполнении модели.

open_system('sldemo_variant_subsystems/Controller');

Рис. 2: Содержание блока подсистемы контроллера

В блоке Variant Subsystem можно разместить блоки Inport, Outport и Subsystem. В этом примере Linear Controller Блок подсистемы связан с объектом варианта, VSS_LINEAR_CONTROLLER, и Nonlinear Controller Блок подсистемы связан с объектом варианта, VSS_NONLINEAR_CONTROLLER.

Сигнальные соединения не разрешены в подсистеме вариантов. При моделировании модели Simulink программно связывает блоки Inport и Outport с активным вариантом.

Переключение активных вариантов

Для моделирования с помощью Linear Controller вариант, определите:

VSS_MODE=1

в глобальной рабочей области, а затем смоделировать модель.

open_system('sldemo_variant_subsystems/Controller','parameter');
close_system('sldemo_variant_subsystems/Controller')
VSS_MODE=1; %#ok (used by sldemo_variant_subsystems)
sim sldemo_variant_subsystems;

Рис. 3: Моделирование с использованием Linear Controller вариант

Для моделирования с помощью Nonlinear Controller, определить

VSS_MODE=2

в глобальной рабочей области, а затем смоделировать модель.

VSS_MODE=2; % (used by sldemo_variant_subsystems)
sim sldemo_variant_subsystems;

Рис. 4: Моделирование с использованием Nonlinear Controller вариант

Перечисления и повторное использование

sldemo_variant_subsystems_enum модель иллюстрирует следующее Simulink.Variant возможности:

1. Перечисления: классы перечисления MATLAB могут использоваться для улучшения читаемости в условиях объекта исполнения.

2. Повторное использование: Simulink.Variant объекты могут быть повторно использованы в различных блоках подсистемы вариантов.

В этом примере используются следующие переменные, определенные в глобальной рабочей области MATLAB:

VSSE_LINEAR_CONTROLLER=Simulink.Variant( ... 'VSSE_MODE==sldemo_vss_CONTROLLER_TYPE.LINEAR')

VSSE_NONLINEAR_CONTROLLER=Simulink.Variant( ... 'VSSE_MODE==sldemo_vss_CONTROLLER_TYPE.NONLINEAR')

VSSE_MODE=sldemo_vss_CONTROLLER_TYPE.LINEAR

VSSE_PROTOTYPE=Simulink.Variant( ... 'VSSE_MODE_BUILD==sldemo_vss_BUILD_TYPE.PROTOTYPE')

VSSE_PRODUCTION=Simulink.Variant( ... 'VSSE_MODE_BUILD==sldemo_vss_BUILD_TYPE.PRODUCTION')

VSSE_MODE_BUILD=sldemo_vss_BUILD_TYPE.PRODUCTION

В этих Simulink.Variant мы используем классы перечисления, sldemo_vss_BUILD_TYPE.m и sldemo_vss_CONTROLLER_TYPE.m для определения Simulink.Variant Параметры состояния, улучшающие читаемость.

Три блока, Filter1, Filter2 и Filter3 исполнительных подсистем фильтра используют VSSE_PROTOTYPE и VSSE_PRODUCTION Simulink.Variant объекты.

Примечание.Имя класса перечисления должно быть уникальным среди имен типов данных и имен переменных глобальной рабочей области и учитывать регистр.

Открытие модели-примера sldemo_variant_subsystems_enum запускает PreLoadFcn, определенный в File -> ModelProperties -> Callbacks. При этом глобальная рабочая область заполняется переменными для блоков подсистемы исполнения:

open_system('sldemo_variant_subsystems_enum')

Рис. 5: Пример модели, sldemo_variant_subsystems_enum

Создание кода с использованием перечисляемых типов в качестве переменных управления вариантами

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

Рассмотрим модель rtwdemo_preprocessor_subsys.

В редакторе MATLAB определите классы, которые сопоставляют перечисляемые значения значимым именам.

Если перечисляемые типы определены неправильно, появится сообщение об ошибке. Вот несколько сценариев, которые приводят к ошибке.

Недопустимое определение1: В этом случае Simulink.IntEnumType не определен.

Недопустимое определение2: В этом случае переменные не инициализируются.

Введите управляющее выражение варианта, как показано в следующем примере:

Рис. 6: Параметры блока

Определите значение V в глобальной рабочей области. Например, V = 2;. Значение может быть обычной переменной MATLAB или Simulink.Parameter объект. Однако значение не может быть перечисленным типом.

Теперь создайте код с параметром Variant activation time (время активации варианта), равным code compile. Пример кода показан ниже.

Рис. 7: Сгенерированный код

Для получения информации об использовании Simulink.Variant или Simulink.Parameter переменные объекта или MATLAB в качестве переменной управления исполнениями см. раздел Подходы для определения элементов управления исполнениями в разделе Введение в элементы управления исполнениями.

Дополнительные сведения о создании кода для вариационных подсистем см. в документации по встроенному кодеру.

Подробнее

Конструкция системы вариантов