Компоненты модели Simulink®, которые содержат Варианты, активированы или деактивированы на основе варианта, который вы выбираете.
Каждый вариант в вашей модели сопоставлен с названным различным управлением условного выражения. Различные средства управления определяют, какой вариант активен. Путем изменения значения различного управления можно переключить активный вариант.
В то время как каждый вариант сопоставлен с различным управлением, только одно различное управление может оценить к истине. Когда различное управление оценивает к истине, Simulink активирует вариант, который соответствует тому различному управлению.
Различным управлением является Булево выражение, которое активирует определенный вариант, когда оно оценивает к true
.
Можно задать различные средства управления в рабочей области MATLAB®global или словаре данных.
Можно задать различные средства управления, когда Simulink.Variant
возражает, выражения MATLAB (включая структуры) или как выражения, которые содержат один или несколько из этих операндов и операторов.
Параметр Variant control mode, доступный в диалоговом окне параметров блоков, позволяет вам выбирать режим Expression
или Label
для моделирования Различных блоков.
Expression:
Задает активный Вариант на основе оценки Различных условий.
Различный режим управления: Выражение
Label:
Задает основанные на имени Различные средства управления (Режим метки активный выбор). В режиме Label
Различное управление не должно быть создано в глобальной рабочей области. Также можно выбрать режим Label активный выбор из командной строки. Например, set_param(block,'LabelModeActiveChoice', 'Choice_1')
.
Различный режим управления: Метка
Имена переменных, которые решают к переменным 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 позволяют вам вариантам быстрого прототипирования, когда вы все еще создаете свою модель. Они помогают вам фокусироваться больше на создании ваших вариантов, чем на разработке выражений, которые активируют тот выбор.
Рассмотрите модель, которая содержит два варианта, каждый представленный Различным блоком Subsystem.
Можно задать различные средства управления в их самой простой форме как скалярные переменные в диалоговом окне параметров блоков Различного блока 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
, когда вариант управляет в диалоговом окне параметров блоков Различного блока Subsystem.
Поле Condition теперь отражает инкапсулированное различное условие. Используя этот подход, можно разработать комплексные различные выражения условия, которые являются допускающими повторное использование.
Simulink.Parameter
или переменные MATLAB для Генерации кодаЕсли вы намереваетесь сгенерировать код для модели, содержащей варианты, задайте различные контрольные переменные как объекты Simulink.Parameter
или переменные MATLAB. объекты 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
classdef sldemo_mrv_BUILD_TYPE < Simulink.IntEnumType enumeration PROTOTYPE (1) PRODUCTION (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')
Используя перечислимые типы упрощает сгенерированный код, потому что он содержит имена значений, а не целых чисел.
Variant Condition Legend помогает вам визуализировать различные условия, сопоставленные с моделью. Чтобы просмотреть Variant Condition Legend, нажмите Display> Blocks> Variant Condition Legend.
Variant Condition Legend доступен только, когда Display> Blocks> Variant Condition активен.
По умолчанию Variant Condition Legend отображает различную аннотацию условия и различное условие во время симуляции. Чтобы просмотреть различное условие в сгенерированном коде, выберите опцию Show generated code conditions на Variant Condition Legend.
В Variant Condition Legend различные условия на блоках аннотируются как v:c
, где v
является различным семантическим индикатором, и c
представляет различный индекс условия. Можно щелкнуть через связанные гиперссылками различные аннотации, чтобы наблюдать, каким частям модели условие соответствует.
Когда вы наводите на блок, который имеет различное условие, подсказка отображает различную аннотацию и связанное различное условие для блока. Чтобы просмотреть различную подсказку аннотации условия, опция Variant Condition должна быть выбрана.
Чтобы просмотреть 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 |