exponenta event banner

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

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

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

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

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

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. При этом базовая рабочая область заполняется переменными для блока «Подсистема исполнения» с именем «Контроллер»:

Рис. 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), то дочерняя подсистема считается закомментированной и не используется при выполнении модели.

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

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

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

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

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

VSS_MODE=1

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

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

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

VSS_MODE=2

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

Рис. 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. При этом базовая рабочая область заполняется переменными для блоков подсистемы исполнения:

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

Создание кода

Coder™ Simulink ® можно использовать для создания кода из модели, содержащей блоки подсистемы исполнения. По умолчанию созданный код содержит только активный вариант. Кроме того, можно создать код для всех вариантов, охраняемых условиями препроцессора C (#if, #elif, #endif) при использовании встроенного Coder™.

Для создания условий препроцессора типы блоков, которые можно разместить в дочерних подсистемах блока Variant Subsystem, ограничены. В процессе генерации кода один блок объединения размещается на входе каждого блока Outport в пределах вариационной подсистемы и соединяется с дочерними подсистемами в вариационной подсистеме. Таким образом, ограничения, наложенные на блоки объединения, применяются к содержимому блоков подсистемы исполнения. Проверки ограничений выполняются только при создании кода. Кроме того, дочерними подсистемами блока Variant Subsystem должны быть подсистемы Atomic, которые создаются путем выбора параметра Treat as atomic unit в диалоговом окне Subsystem parameters.

Кодовая генерация препроцессорных условий активна при:

  1. Объект Embedded Coder выбран на панели Code Generation диалогового окна Configuration Parameters.

  2. Параметр Переопределить условия исполнения (Override variant conditions) и использовать следующий вариант не выбран в диалоговом окне Параметр блока подсистемы исполнения (Variant Subsystem block paramet

При активной генерации кода условий препроцессора генерируемый код содержит все дочерние подсистемы блоков Вариационной подсистемы, защищенные условиями препроцессора C. В этом случае выбор активных вариантов откладывается до времени компиляции сгенерированного кода. Только один объект варианта, закодированный в макросах C, должен иметь значение true (быть активным).

Кроме того, переменные управления вариантами (например, VSS_MODE и VSSE_MODE выше) должно быть Simulink.Parameter объекты, которые определяют способ #defineдля вариантов управляющие переменные управляются в сгенерированном коде. Для sldemo_variant_subsystems, вы можете очистить VSS_MODE двойное в базовом рабочем пространстве. Использовать Model Explorer -> Simulink Root -> Base Workspace для добавления нового Simulink.Parameter названный VSS_MODE. Укажите параметр Value как 1 или 2, тип данных как int32и класс хранения как ImportedDefine с пользовательскими атрибутами Header file как sldemo_variant_subsystems_vdef.h. Затем следует создать этот заголовок в текущей рабочей папке:

/* File: sldemo_variant_subsystems_vdef.h */
#ifndef SLDEMO_VARIANT_SUBSYSTEM_VDEF_H
#define SLDEMO_VARIANT_SUBSYSTEM_VDEF_H
#define VSS_MODE 1
#endif

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

См. также

| |

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

Внешние веб-сайты