Компоненты Simulink® модель, которая содержит Варианты, активируется или деактивируется на основе выбранного варианта.
Каждый выбор варианта в модели связан с условным выражением, называемым управлением вариантом. Варианты управления определяют, какой вариант является активным. Путем изменения значения управления вариантом можно переключить выбор активного варианта.
Хотя каждый выбор варианта связан с управлением вариантом, только один элемент управления вариантом может вычислить true. Когда элемент управления варианта вычисляется как true, Simulink активирует выбор варианта, который соответствует этому элементу управления варианта.
Управление вариантом является логическим выражением, которое активирует выбор определенного варианта, когда он вычисляет, чтобы true
.
Примечание
Можно задать элементы управления вариантом в MATLAB® глобальная рабочая область, рабочая область маски или словарь данных.
Можно задать варианты управления следующим Simulink.Variant
объекты, выражения MATLAB (включая структуры) или как выражения, которые содержат один или несколько из этих операндов и операторов.
Variant control mode параметр, доступный в диалоговом окне параметров блоков, позволяет вам выбрать Expression
или Label
или sim codegen switching
режим для моделирования блоков Variant.
Expression:
Задает активный вариант на основе оценки условий варианта.
Режим управления вариантом: Выражение
Label:
Задает элементы управления на основе имен (активный выбор режима метки). В Label
mode, Variant control не должен создаваться в глобальной рабочей области. Кроме того, можно выбрать режим Label в командной строке. Для примера, set_param(block,'LabelModeActiveChoice', 'Choice_1')
.
Режим управления вариантом: Метка
sim codegen switching:
включает автоматическое переключение вариантов для рабочих процессов симуляции и генерации кода в вариантных блоках. Эта функция удобна для переключения между режимами симуляции и генерации кода.
Когда вы симулируете (Normal, Accelerator, Rapid Accelerator) модель, то Simulink автоматически выбирает sim
ветвь как активный выбор. Точно так же, когда вы делаете симуляцию «Цикл» (SIL), симуляцию «Процессор в цикле» (PIL) или генерируете код или используете режим external mode, Simulink автоматически выбирает codegen
ветвь.
Примечание
Если для блока с вариантом Variant control mode задано значение label
или expression
, затем использование sim
или codegen
поскольку его условие выбора не поддерживается.
Режим управления: sim codegen switching
Примечание
В раскрывающемся списке Variant activation time можно выбрать update diagram
или update diagram analyze all choices
. Для сигналов данных, update diagram analyze all choices
гарантирует, что атрибуты сигнала (типы данных, размерности и т.д.) между обоими вариантами являются последовательными.
Вот пример экрана, показывающий блок варианта, переключенный на выбор sim.
Имена переменных, которые разрешаются к переменным MATLAB или Simulink.Parameter
объекты с целым числом или перечисленным типом данных и скалярными буквальными значениями
Имена переменных, которые разрешаются в Simulink.Variant
объекты
Скалярные буквальные значения, которые представляют целое число или перечисленные значения
Круглые скобки для группировки
Арифметические, реляционные, логические или побитовые операторы
Для получения дополнительной информации см. раздел «Операторы и операторы в выражениях исполнительных условий».
Когда вы компилируете модель, Simulink определяет, что вариант выбора активен, если его вариант управления оценивается как true
. Оценка активного варианта происходит на ранних стадиях компиляции, и активный вариант не может быть изменен после компиляции модели.
Объекты варианта Simulink в структурах не разрешены.
Параметры Simulink в структурах не разрешены.
Все переменные управления вариантом в блоке должны происходить из одного и того же источника.
Можно использовать много подходов для переключения между вариантами выбора - от опций для использования во время прототипирования до опций, необходимых для генерации кода из вашей модели.
Спецификация | Цель | Пример |
---|---|---|
Скалярная переменная | Быстрое прототипирование | A == 1 |
Simulink.Variant объект | Повторно используйте условия варианта | LinearController = Simulink.Variant('FUEL==2 && EMIS==1'); |
Simulink.Parameter Объект или Переменный MATLAB | Сгенерируйте предварительные условия для генерации кода | mode == 1 , где mode можно Simulink.Parameter Объект или Переменный MATLAB |
Перечисленный тип | Улучшенный код, потому что значения условий представлены как значимые имена вместо целых чисел | LEVEL == Level.Advanced |
Вы можете найти переменные управления с помощью функции Simulink.VariantManager.findVariantControlVars
.
Скалярные переменный MATLAB позволяют вам быстро прототипировать варианты выбора, когда вы все еще строите модель. Они помогают вам больше сосредоточиться на создании вариантов, чем на разработке выражений, которые активируют эти варианты.
Рассмотрим модель, которая содержит два варианта выбора, каждый из которых представлен блоком Variant Subsystem.
Можно задать элементы управления вариантом в их самой простой форме как скалярные переменные в диалоговом окне параметров блоков Variant Subsystem.
Поле Condition для обоих Linear Controller
и Nonlinear Controller
являются N/A
, потому что сам вариант управления является условием.
Можно активировать один из вариантов выбора путем определения переменного скаляра V
и установка его значения равным 1
в Командном Окне MATLAB.
V = 1;
Linear Controller
вариант выбора. Варианты управления игнорируются при %
используется символ. Точно так же, если управление вариантом пусто, выбор игнорируется.Точно так же, если вы меняете значение V
на 2
, Simulink активирует Nonlinear Controller
вариант выбора.
Simulink.Variant
Объекты для повторного использования исполнительных условийПосле определения вариантов выбора, которые требуются вашей модели, можно создать сложные условия варианта, чтобы контролировать активацию вариантов. Задайте условия варианта как Simulink.Variant
объекты.
Simulink.Variant
объекты позволяют вам повторно использовать общие условия исполнения между моделями и помогают вам инкапсулировать выражения сложных условий исполнения.
Рассмотрим пример, в котором элементы управления вариантом уже определены в глобальной рабочей области.
V=1; V=2;
Можно преобразовать эти элементы управления в выражения условий, инкапсулированные как Simulink.Variant
объекты.
LinearController=Simulink.Variant('V==1'); NonLinearController=Simulink.Variant('V==2');
Затем можно задать эти Simulink.Variant
объекты как вариант управляют в параметры блоков диалоговом окне блока Variant Subsystem.
Теперь поле Condition отражает инкапсулированное условие варианта. Используя этот подход, можно разработать комплексные выражения условий исполнения, которые являются переиспользуемыми.
Simulink.Parameter
Объекты или переменный MATLAB для генерации кодаЕсли вы намерены сгенерировать код для модели, содержащей варианты выбора, задайте переменные управления вариантом как переменный MATLAB или Simulink.Parameter
объекты. Simulink.Parameter
объекты позволяют вам задавать другие атрибуты (такие как тип данных), которые необходимы для генерации кода.
VSSMODE = Simulink.Parameter; VSSMODE.Value = 1; VSSMODE.DataType = 'int32'; VSSMODE.CoderInfo.StorageClass = 'Custom'; VSSMODE.CoderInfo.CustomStorageClass = 'ImportedDefine'; VSSMODE.CoderInfo.CustomAttributes.HeaderFile =... 'rtwdemo_importedmacros.h';
Simulink.Parameter
объекты могут иметь один из следующих классов памяти:
Define
или ImportedDefine
с заданным файлом заголовка
CompilerFlag
SystemConstant (AUTOSAR)
Ваш собственный класс памяти, который определяет данные как макрос
Можно также преобразовать скалярную переменную управления вариантом в Simulink.Parameter
объект. См. «Преобразование переменных управления исполнениями в Simulink. Параметр объектов».
Используйте перечисленные типы, чтобы задать значимые имена целым числам, используемым в качестве вариантов значений управления.
В редакторе MATLAB задайте классы, которые сопоставляют перечисленные значения со значимыми именами.
classdef sldemo_mrv_CONTROLLER_TYPE < Simulink.IntEnumType enumeration NONLINEAR (1) SECOND_ORDER (2) end end
Определите Simulink.Variant
объекты для этих классов в глобальной рабочей области.
VE_NONLINEAR_CONTROLLER = Simulink.Variant... ('E_CTRL==sldemo_mrv_CONTROLLER_TYPE.NONLINEAR') VE_SECOND_ORDER_CONTROLLER =Simulink.Variant... ('E_CTRL==sldemo_mrv_CONTROLLER_TYPE.SECOND_ORDER') VE_PROTOTYPE =Simulink.Variant... ('E_CURRENT_BUILD==sldemo_mrv_BUILD_TYPE.PROTOTYPE') VE_PRODUCTION =Simulink.Variant... ('E_CURRENT_BUILD==sldemo_mrv_BUILD_TYPE.PRODUCTION')
Использование перечисляемых типов упрощает сгенерированный код, поскольку он содержит имена значений, а не целых чисел.
Легенда условий исполнения помогает вам визуализировать условия варианта, связанные с моделью. Чтобы просмотреть легенду исполнительных условий, на вкладке Debug, выберите Information Overlays > Variant Legend.
Примечание
Если Variant Legend недоступен, на вкладке Debug выберите Information Overlays > Variant Conditions.
По умолчанию в легенде условий исполнения отображаются аннотация условия варианта, условие варианта во время симуляции и источник переменных условия варианта. Чтобы просмотреть условие исполнения в сгенерированном коде, выберите опцию Show generated code conditions в окне Variant Condition Legend.
В Легенде исполнительных условий условия исполнения на блоках аннотируются следующим образом v:c
, где v
является вариантом семантического индикатора и c
представляет индекс условия варианта. Можно щелкнуть гиперссылку аннотации варианта, чтобы увидеть, каким частям модели соответствует условие.
При наведении указателя мыши на блок, имеющий условие исполнения, подсказка отображает аннотацию варианта и связанное условие варианта для блока. Чтобы просмотреть подсказку аннотации условия, необходимо выбрать опцию Variant Condition.
В легенде также отображается источник переменных условий варианта. Переменные могут происходить из маски, модели или базового рабочего пространства. Все переменные, используемые в блоке, должны происходить из одного и того же источника. В модели переменные, происходящие из различных рабочих областей маски, могут иметь одно и то же имя и различные значения. Чтобы наблюдать источник переменных, щелкните гиперссылку рабочих областей.
Примечание
С Variant activation time набора параметров, чтобы update diagram
источник переменных, отображаемых для неактивных вариантов, может быть неправильным, потому что неактивные варианты удаляются до распространения атрибутов сигнала и, следовательно, не оцениваются.
Чтобы просмотреть Variant Condition Legend программно, используйте Simulink.VariantManager.VariantLegend
функция в командном окне MATLAB.
Simulink оценивает выражения условий в элементах управления варианта, чтобы определить выбор активного варианта. В выражение условия можно включить следующие операнды:
Скалярные переменные
Simulink.Parameter
объекты, не являющиеся структурами и имеющие типы данных, отличные от Simulink.Bus
объекты
Перечисляемые типы
Круглые скобки для группировки
Выражения условий варианта могут содержать операторы MATLAB, при условии, что выражение вычисляет логическое значение. В этих примерах A
и B
являются выражениями, которые вычисляются как целое число, и x
является постоянным целым литералом.
Выражения MATLAB, поддерживающие генерацию предварительных условий | Эквивалентное выражение в условном препроцессоре C |
---|---|
Арифметика | |
|
|
|
|
A * B | A * B |
idivide(A,B) |
Если значение второго операнда ( |
rem(A,B) |
Если значение второго операнда ( |
Относительный | |
| A == B |
| A != B |
| A < B |
| A > B |
| A <= B |
| A >= B |
Логичный | |
~A | !A , где A не является целым числом |
A && B | A && B |
A || B | A || B |
Побитовый (A и B не могут оба быть постоянными целыми литералами) | |
| A & B |
| A | B |
| A ^ B |
| ~A |
| A << x |
| A >> x |
Условие чистого варианта представляет собой общую сумму локального условия и его предкового состояния.
Рассмотрим эту модель slex_netvariant
с двумя блоками Single-input Single-Output (SISO) Variant Source, Variant Source
и Variant Source1
с вариантными условиями как V==1
и W==1
, соответственно.
Когда вы симулируете эту модель, Variant Source1
блок и другие блоки внутри блока Subsystem будут иметь локальное условие W==1
распространено из Variant Source1
блок. Предковое условие V==1
распространяется из Variant Source
блокируйте в блок Subsystem. Поэтому условие варианта нетто на Variant Source1
блок и другие блоки внутри блока Subsystem будут V==1 && W==1
.