Этот пример показывает, как использовать варианты модели - ссылки. Блок Model используется, чтобы сослаться на одну модель Simulink® из другой модели Simulink. Различный блок Subsystem может содержать блоки Model как варианты. Вариант описывает один из возможных режимов N, в которых может действовать Различный блок Subsystem. Каждый различные ссылки определенная модель с ее связанными образцово-специфичными аргументами. Только один вариант активен для симуляции. Можно переключить активный вариант путем изменения значений переменных в базовом рабочем пространстве, или вручную переопределяющим различным выбором с помощью Различного диалогового окна блока Subsystem.
Для новых моделей используйте Различный блок Subsystem вместо блока Model, чтобы содержать образцовые варианты, если вы не должны использовать варианты, которые являются условно выполняемыми моделями (модели с портами управления). Поддержка использования блока Model, чтобы содержать образцовые варианты будет удалена в будущем релизе.
Во время этого примера Simulink и Simulink® Coder™ могут сгенерировать код в папке генерации кода в текущей рабочей папке. Если вы не хотите к (или не может) генерировать файлы в этой папке, необходимо изменить рабочую папку.
Блок Model используется, чтобы сослаться на одну модель Simulink (дочерняя модель) из другой модели Simulink (родительская модель). Различный блок Subsystem может иметь блоки Model как варианты. Варианты включают набор моделей, которые имеют потенциал, на который сошлется Различный блок Subsystem. В этом примере существует две модели, на которые потенциально ссылается Различный блок Subsystem под названием Контроллер.
Каждый вариант сопоставлен с объектом Simulink.Variant
. объекты Simulink.Variant
создаются в базовом рабочем пространстве MATLAB®. Например:
V_LINEAR_CONTROLLER=Simulink.Variant('CTRL==1');
где аргумент ('CTRL==1')
конструктора задает условие, когда вариант активен. В этом случае, определение:
CTRL=1
в базовом рабочем пространстве активировал бы вариант V_LINEAR_CONTROLLER
. Аргумент условия может быть простым выражением, состоящим из скалярных переменных, перечислений, равенства, неравенства, &&, и ~. Круглая скобка () может использоваться для группировки приоритета.
Для данного Различного блока Subsystem один вариант активен во время симуляции. Активный вариант определяется путем оценки различных объектных условий в базовом рабочем пространстве MATLAB. Также можно дать Различному блоку 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
. Этот коллбэк заполняет базовое рабочее пространство с переменными для Различного блока Subsystem под названием Контроллер:
Рисунок 1: топ-модель, sldemo_mdlref_variants
Щелкните правой кнопкой по Variant Subsystem block Controller и выберите пункт меню Block Parameters (Подсистема), чтобы открыть диалоговое окно блока.
Диалоговое окно задает два потенциальных варианта. Эти два варианта в свою очередь сопоставлены с двумя объектами Simulink.Variant
V_LINEAR_CONTROLLER
и V_NONLINEAR_CONTROLLER
, которые существуют в базовом рабочем пространстве. Эти объекты имеют свойство под названием Условие, выражение, которое оценивает к булевской переменной и это определяет, какой вариант активен. Условие также показывают в Различном диалоговом окне блока 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
могут быть снова использованы в различных Различных блоках Subsystem.
Этот пример требует, чтобы следующие переменные были заданы в базовом рабочем пространстве 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
снова используются через три блока Subsystem Варианта фильтра, Filter1, Filter2 и Filter3.
Открытие модели sldemo_mdlref_variants_enum
запускает PreLoadFcn, заданный в File -> ModelProperties -> Callbacks
. Этот коллбэк заполняет базовое рабочее пространство с переменными для Различных блоков Subsystem, которые отображены в Окне Команды MATLAB: