Когда вы задаете различные условия на блоке Variant Subsystem, Simulink® распространяет эти условия определить, какие компоненты модели активны в процессе моделирования. По умолчанию эти условия не распространяют вне различной подсистемы. Можно использовать параметры блоков Propagate conditions outside of variant subsystem, чтобы позволить условиям распространить вне блока Variant Subsystem с соединяющимися блоками.
Примечание
Различные аннотации условия, отображенные на компонентах модели, помогают вам визуализировать распространенные условия.
Чтобы просмотреть различные аннотации условия, на вкладке Debug, выбирают Information Overlays> Variant Legend.
Если Variant Legend не доступен на вкладке Debug, выберите Information Overlays> Variant Conditions.
Рассмотрите эту модель, содержащую блок Variant Subsystem под названием Controller
с двумя вариантами, Linear Controller
и Nonlinear Controller
. Определенное различное условие активирует каждый блок.
Варианты в theController
блок не имеет того же интерфейса. Импорт sensor1
и sensor3
используются в Linear Controller
и Nonlinear Controller
, но sensor2
используется только в Linear Controller
. Следовательно, sensor2
блок активен только когда Linear Controller
активно и не выполняется для другого выбора. Сделать компоненты модели вне Variant Subsystem (Controller
) зная об активном или неактивном состоянии блоков в блоке Variant Subsystem, условия блока должны распространить вне контуров блока.
Примечание
Различные условия не распространяют вне блока Variant Subsystem, если все варианты в блоке имеют тот же интерфейс.
Чтобы распространить условия за пределами различной подсистемы, выберите Propagate conditions outside of variant subsystem в диалоговом окне Block Parameters блока Variant Subsystem. По умолчанию этот параметр устанавливается на off
.
update diagram
Время активацииКогда параметр Variant activation time для блока Variant Subsystem устанавливается на update diagram
, только активный выбор анализируется, чтобы определить условия, распространенные из различной подсистемы.
В примере, когда вы устанавливаете активный вариант на Nonlinear Controller
, sensor2
неактивно. Различная аннотация v2
с набором условия к false
отображен на sensor2
порт и неактивный блок In2
импорта это соединяется с ним. В Различной Легенде Условий условие установлено к
false
если блоки, сопоставленные с тем условием, никогда не активны.
Когда вы устанавливаете активный вариант на Linear Controller
, sensor2
порт и блок In2
импорта являются безусловными потому что
Linear Controller
использует все входные сигналы.
Код, который вы генерируете, содержит только активный выбор. В этом примере, входной порт In2
неактивно и таким образом, это не часть сгенерированного кода.
code compile
Время активацииВ течение любого различного времени активации кроме update diagram
, все варианты анализируются, чтобы определить условия, распространенные из различной подсистемы.
В модели в качестве примера, установленной параметр Variant activation time на code compile
.
Условия распространены вне блока Variant Subsystem для обоих варианты.
Код, который вы генерируете, содержит и активный и неактивный выбор, заключенный в условные выражения препроцессора #if
и #elseif
. В этом примере, входной порт In2
охраняется с необходимыми условиями.
Примечание
Чтобы распространить различные условия вне блока Variant Subsystem с нулевым активным различным заданным управлением, выберите Allow zero active variant controls в диалоговом окне Block Parameters блока Variant Subsystem.
Рассмотрите эту модель с блоком Variant Subsystem с двумя вариантами. Нет никакого импорта или выходных портов на блоке. Эти два варианта имеют условия Var==1
и Var==2
, соответственно. Когда параметр Propagate conditions outside of variant subsystem блока Variant Subsystem устанавливается на off
, логический OR различных условий, Var==1 || Var==2
, установлен на блоке Variant Subsystem. Когда параметр устанавливается на on
, никакие условия не применяются на блок Variant Subsystem.
Чтобы распространить условия за пределами блока Variant Subsystem программно, используйте один из этих синтаксисов:
Распространите условия:
set_param(VariantSubsystemName, 'PropagateVariantConditions','on')
Например,
set_param('sldemo_variant_subsystems/Controller','PropagateVariantConditions','on')
Распространите условия и сгенерируйте условные выражения препроцессора в коде:
set_param(VariantSubsystemName,'PropagateVariantConditions',... 'on','VariantActivationTime','code compile')
Например,
set_param('slexVariantSubsystems/Controller','PropagateVariantConditions',... 'on','VariantActivationTime','code compile')
В этом примере показано, как распространение различных условий вне Различного блока Subsystem позволяет блоку адаптировать свой интерфейс согласно состоянию базовых блоков.
Исследуйте модель
Откройте модель slexVariantSubsystemsAdaptiveInterface
.
Блок Controller является Различной Подсистемой, которая обеспечивает Linear
и Nonlinear
выбор. Linear
выбор активен когда V = 1
, Nonlinear
выбор активен когда V = 2
V
различная контрольная переменная типа Simulink.Parameter
и задан в PostLoadFcn
коллбэк модели.
Изменить значение различной контрольной переменной, в командном окне MATLAB, V.Value = 1
типа или
V.Value = 2
.
Дважды кликните Controller
блокируйтесь, чтобы просмотреть его содержимое. Linear
и Nonlinear
выбор не имеет подобного интерфейса. Linear
выбор использует sensor1
и sensor3
входные параметры Controller
блок. Linear
выбор не использует sensor2
введите и не производите saturate
вывод .
В диалоговом окне Block Parameters для Controller
блокируйтесь, Распространить условие за пределами различного флажка подсистемы выбрано. Эта установка распространяет условия вне блока и позволяет Различному блоку Subsystem адаптировать свой интерфейс согласно состоянию базовых блоков.
Симулируйте модель
Симулируйте модель после установки активного выбора к Linear
. Условие V = 2
распространяет к In2
фильтр
, и saturation logger
блоки. Эти блоки становятся неактивными потому что Linear
выбор не использует sensor2
введите и не пишет в saturate
выход Controller
блок.
Распространенные различные условия от различных подсистем могут быть установлены на Simscape™ или Stateflow® блоки только для update diagram
различное время активации.
Примечание
Все элементы Mux, Demux или блока-сигнала Vector Concatenate должны иметь то же различное условие.