Этот пример показывает, как использовать варианты модели - ссылки. Блок модели используется, чтобы сослаться на одну модель Simulink® от другой модели Simulink. Блок Variant Subsystem может содержать Блоки модели как варианты. Вариант описывает один из возможных режимов N, в которых может действовать блок Variant Subsystem. Каждый различные ссылки определенная модель с ее связанными образцово-специфичными аргументами. Только один вариант активен для моделирования. Можно переключить активный вариант путем изменения значений переменных в базовом рабочем пространстве, или вручную переопределяющим различным выбором с помощью диалогового окна блока Variant Subsystem.
Для новых моделей используйте блок Variant Subsystem вместо Блока модели, чтобы содержать образцовые варианты, если вы не должны использовать варианты, которые являются условно выполняемыми моделями (модели с портами управления). Поддержка использования Блока модели, чтобы содержать образцовые варианты будет удалена в будущем релизе.
Во время этого примера Simulink и Simulink® Coder™ могут сгенерировать код в папке генерации кода в текущей рабочей папке. Если вы не хотите к (или не может) генерировать файлы в этой папке, необходимо изменить рабочую папку.
Блок модели используется, чтобы сослаться на одну модель Simulink (дочерняя модель) от другой модели Simulink (родительская модель). Блок Variant Subsystem может иметь Блоки модели как варианты. Варианты включают набор моделей, которые имеют потенциал, на который сошлется блок Variant Subsystem. В этом примере существует две модели, на которые потенциально ссылается блок Variant Subsystem под названием Контроллер.
Каждый вариант сопоставлен с объектом Simulink.Variant
. объекты Simulink.Variant
создаются в базовом рабочем пространстве MATLAB®. Например:
V_LINEAR_CONTROLLER=Simulink.Variant('CTRL==1');
где аргумент ('CTRL==1')
конструктора задает условие, когда вариант активен. В этом случае, определение:
CTRL=1
в базовом рабочем пространстве активировал бы вариант V_LINEAR_CONTROLLER
. Аргумент условия может быть простым выражением, состоящим из скалярных переменных, перечислений, равенства, неравенства, &&, и ~. Круглая скобка () может использоваться для группировки приоритета.
Для данного блока Variant Subsystem один вариант активен во время моделирования. Активный вариант определяется путем оценки различных объектных условий в базовом рабочем пространстве MATLAB. Также можно дать блоку Variant Subsystem команду использовать определенный вариант путем выбора условий варианта Переопределения и использования после различного флажка.
Модель, используемая в этом примере, требует, чтобы следующие переменные были заданы в базовом рабочем пространстве MATLAB:
V_LINEAR_CONTROLLER=Simulink.Variant('CTRL==1');
V_NONLINEAR_CONTROLLER=Simulink.Variant('CTRL==2');
CTRL=2;
Открытие образцового sldemo_mdlref_variants
запускает PreLoadFcn, заданный в File -> ModelProperties -> Callbacks
. Этот обратный вызов заполняет базовое рабочее пространство с переменными для блока Variant Subsystem под названием Контроллер:
Рисунок 1: топ-модель, sldemo_mdlref_variants
Щелкните правой кнопкой по Контроллеру блока Variant Subsystem и выберите пункт меню Block Parameters (Подсистема), чтобы открыть блочное диалоговое окно.
Диалоговое окно задает два потенциальных варианта. Эти два варианта в свою очередь сопоставлены с двумя объектами Simulink.Variant
V_LINEAR_CONTROLLER
и V_NONLINEAR_CONTROLLER
, которые существуют в базовом рабочем пространстве. Эти объекты имеют свойство под названием Условие, выражение, которое оценивает к булевской переменной и это определяет, какой вариант активен. Условие также показывают в диалоговом окне блока Variant Subsystem. В этом примере условием V_LINEAR_CONTROLLER
и V_NONLINEAR_CONTROLLER
является CTRL == 1
и CTRL == 2
, соответственно. Переменный CTRL
находится в базовом рабочем пространстве и может быть стандартной переменной MATLAB или Simulink.Parameter
.
Чтобы моделировать использование sldemo_mrv_linear_controller
, задайте:
CTRL=1
в базовом рабочем пространстве и затем моделируют модель.
Рисунок 2: Моделирование с помощью варианта sldemo_mrv_linear_controller
Чтобы моделировать использование sldemo_nonlinear_controller
, задать
CTRL=2
в базовом рабочем пространстве и затем моделируют модель.
Рисунок 3: Моделирование с помощью варианта sldemo_mrv_nonlinear_controller
sldemo_mdlref_variants_enum модель иллюстрирует возможности Simulink.Variant
:
1. Перечисления: Классы перечисления MATLAB могут использоваться, чтобы улучшить удобочитаемость в условиях различного объекта.
2. Повторное использование: объекты Simulink.Variant
могут быть снова использованы в различных Различных блоках Подсистемы.
Этот пример требует, чтобы следующие переменные были заданы в базовом рабочем пространстве MATLAB:
VE_LINEAR_CONTROLLER=Simulink.Variant('E_CTRL==sldemo_mrv_CONTROLLER_TYPE.LINEAR')
VE_NONLINEAR_CONTROLLER=Simulink.Variant('E_CTRL==sldemo_mrv_CONTROLLER_TYPE.NONLINEAR')
E_CTRL=sldemo_mrv_CONTROLLER_TYPE.LINEAR
VE_PROTOTYPE=Simulink.Variant('E_CURRENT_BUILD==sldemo_mrv_BUILD_TYPE.PROTOTYPE')
VE_PRODUCTION=Simulink.Variant('E_CURRENT_BUILD==sldemo_mrv_BUILD_TYPE.PRODUCTION')
E_CURRENT_BUILD=sldemo_mrv_BUILD_TYPE.PRODUCTION
В этих Simulink. Вариант возражает, что мы используем классы перечисления sldemo_mrv_BUILD_TYPE.m и sldemo_mrv_CONTROLLER_TYPE.m в свойствах Simulink.Variant
Condition улучшить удобочитаемость.
VE_PROTOTYPE
и VE_PRODUCTION
объекты Simulink.Variant
снова используются через три блока Подсистемы Варианта фильтра, Filter1, Filter2 и Filter3.
Открытие образцового sldemo_mdlref_variants_enum
запускает PreLoadFcn, заданный в File -> ModelProperties -> Callbacks
. Этот обратный вызов заполняет базовое рабочее пространство с переменными для Различных блоков Подсистемы, которые отображены в Окне Команды MATLAB: