При задании условий исполнения в моделях, содержащих блоки подсистемы исполнения, Simulink ® распространяет эти условия, чтобы определить, какие компоненты модели являются активными во время моделирования. Условие исполнения может быть выражением условия или объектом исполнения.
Аннотации условий исполнения помогают визуализировать распространенные условия. Чтобы просмотреть аннотации условий исполнения, на вкладке Отладка (Debug) выберите Информационные наложения (Information Overlays) > Условные обозначения исполнения (Variant Legend).
Примечание
Если «Легенда исполнения» недоступна, на вкладке «Отладка» выберите «Информационные наложения» > «Условия исполнения».
В легенде, (default) ключевое слово отображается как отрицаемое условие.
Рассмотрим эту модель, содержащую блок Variant Subsystem с вариантами выбора. Конкретное условие варианта активирует каждый блок.

В вариационной подсистеме (Controller), sensor1 и sensor3 используются в линейном и нелинейном контроллерах, но sensor2 используется только в линейном контроллере. Следовательно, sensor2 блок выполняется только в том случае, если параметр «Линейный контроллер» активен и не выполняется для любого другого параметра. Чтобы убедиться, что компоненты находятся вне вариационной подсистемы (Controller) знают об активном или неактивном состоянии блоков с блоком Variant Subsystem, условие блока должно распространяться за пределы блока Variant Subsystem.
Чтобы распространить условия вне исполнительных подсистем без создания предварительных условий, установите флажок Распространить условия вне исполнительной подсистемы (Propagate conditions outside of variant subsystem) в диалоговом окне Параметр блока (Block Parameter) блока Исполнительная подсистема (Variant Subsystem). По умолчанию параметр Распространять условия вне подсистемы исполнения не выбран.

При моделировании модели с активным выбором как Нелинейный контроллер (Nonlinear Controller) и условием Распространить (Propagate) вне выбранной подсистемы исполнения анализируется только активный выбор. Обратите внимание, что для параметра Variant activation установлено значение update diagram.
Легенда условия исполнения отображает неактивные условия как false. Здесь, sensor2 неактивен с выбором варианта как нелинейный контроллер и помечен как false. Аннотации отображаются на вкладке sensor2 порт и неактивный блок, подключенный к sensor2.

При создании кода для распространения условий без создания условий препроцессора неактивные блоки игнорируются. В этом примере входной порт In2 не отображается в сгенерированном коде.

Чтобы распространить условия вне Variant Subsystem с помощью условий создания препроцессора, установите флажок Распространить условия вне Variant Subsystem и установите для параметра Variant activation time значение code compile в диалоговом окне «Параметры блока» подсистемы исполнения.
Примечание
Время активации варианта доступно только при указании режима управления вариантом как Expression.

При моделировании модели с активным выбором «Нелинейный контроллер» (Nonlinear Controller) и «Распространить условия вне подсистемы исполнения» (Propagate conditions out of variant subsystem), а для параметра Время активации исполнения (Variant activation code compile, анализируются все варианты выбора. Легенда условия исполнения отображает условия исполнения, связанные с моделью.

При создании кода для распространения условий с помощью условий создания препроцессора модель анализируется для всех вариантов. В этом примере входной порт In2 охраняется с необходимыми условиями.

Примечание
Чтобы распространить условия исполнения за пределы блока подсистемы исполнения для нулевого или одного указанного активного элемента управления исполнения, выберите Разрешить нулевое активное управление исполнением.
Если в диалоговом окне Параметры блока (Block Parameters) установлен флажок Распространить условия вне подсистемы исполнения (Propagate conditions outside of variant subsystem), подсистема исполнения адаптирует свой интерфейс к подключенным блокам. Рассмотрим эту модель.

Блок контроллера является вариационной подсистемой, которая обеспечивает Linear и Nonlinear выбор. Linear выбор активен, когда V = 1, и Nonlinear выбор активен, когда V = 2. Здесь, V является переменной управления вариантом Simulink.Parameter тип. Выберите блок Controller и в меню Simulink щелкните Схема > Параметры блока (подсистема). Убедитесь, что установлен флажок Распространить условие вне подсистемы исполнения.
Для изменения значения переменной управления вариантом в окне команды MATLAB введите V.Value = 1 или V.Value = 2.
Дважды щелкните блок контроллера, чтобы просмотреть его содержимое. Linear выбор использует sensor1 и sensor3 входы контроллера (блок вариационной подсистемы). Он не используется sensor2 и, следовательно, не производит saturate выход.
При моделировании этой модели блок Variant Subsystem адаптирует свой интерфейс таким образом, что условие V = 2 (v:1 V=2) распространяет In2, filter, и saturation logger блоки.
При распространении условия на условную систему одно и то же условие устанавливается для всех портов. Дополнительные сведения см. в разделе Распространение условия исполнения на условную подсистему.
Рассмотрим эту модель. Здесь, когда условие распространяется на блок Inport (fcn), одно и то же условие распространяется на все блоки Inport и Outport (как показано в условном обозначении исполнения) и делает блок Variant Subsystem условным.

В блоках Simscape™ или Stateflow ® нельзя задать распространенные исполнительные условия из исполнительных подсистем.
Генерация кода C++ не поддерживается для моделей, которые содержат распространяемые условия вне блока Variant Subsystem.
Распространение условий исполнения не поддерживается в моделях с портами корневых элементов шины.
Примечание
Все элементы блочного сигнала Mux, Demux или Vector Concatenate должны иметь одно и то же условие варианта.
Для распространения условий вне блока Variant Subsystem программным способом используйте один из следующих синтаксисов:
Распространение условий без создания условий препроцессора:
set_param(VariantSubsystemName, 'PropagateVariantConditions','on')
Например,
set_param('sldemo_variant_subsystems/Controller','PropagateVariantConditions','on')Распространение условий с генерацией условий препроцессора:
set_param(VariantSubsystemName,'PropagateVariantConditions',... 'on','GeneratePreprocessorConditionals','on')
Например,
set_param('sldemo_variant_subsystems/Controller','PropagateVariantConditions','on',...
'GeneratePreprocessorConditionals','on')Для модели можно создать код. Для этого на вкладке Приложения щелкните Встроенный кодер, затем на вкладке Код C. Дополнительные сведения о настройке модели для создания кода см. в разделе Подготовка модели, содержащей варианты, к созданию кода.
Рассмотрите вариант модели, содержащий блок «Variant Subsystem» для создания кода.

В созданном коде код внутри fcn определение охраняется условиями препроцессора C #if и #endif.
void fcn(void) { /* RootInportFunctionCallGenerator: '<Root>/RootFcnCall_InsertedFor_fcn_at_outport_1' */ #if VSSMODE == 0 rtDWork.Linear.DiscreteFilter = rtU.In1 - 0.5 * rtDWork.Linear.DiscreteFilter_states; rtDWork.Linear.DiscreteFilter_states = rtDWork.Linear.DiscreteFilter; #endif /* VSSMODE == 0 */ #if VSSMODE == 1 rtDWork.Nonlinear.DiscreteFilter = look1_binlxpw(rtU.In1, rtCP_LookupTable_bp01Data, rtCP_LookupTable_tableData, 4U) - 0.5 * rtDWork.Nonlinear.DiscreteFilter_states; rtDWork.Nonlinear.DiscreteFilter_states = rtDWork.Nonlinear.DiscreteFilter; #endif /* VSSMODE == 1 */ #if VSSMODE == 0 rtY.Out1 = rtDWork.Linear.DiscreteFilter; #endif /* VSSMODE == 0 */ #if VSSMODE == 1 rtY.Out1 = rtDWork.Nonlinear.DiscreteFilter; #endif /* VSSMODE == 1 */ }
Примечание
Настройка модели как компонента AUTOSAR с возможностью выполнения в качестве вариантов подсистемы исполнения не поддерживается.
Для защиты всего определения Function-Call (fcn), используйте источник вариантов, как показано ниже.

В созданном коде fcn() определение охраняется A = = 1.
#if A == 1 void fcn(void) { ….. } #endif
На эту функцию можно ссылаться, используя фрагмент кода, подобный показанному ниже.
…..
#if A==1
fcn()
#endif
……