Введение в варианты управления

Компоненты 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.

    Example model: sim choice

Операнды

  • Имена переменных, которые разрешаются к переменным 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. Параметр объектов».

Перечисленные типы для улучшения читаемости кода

Используйте перечисленные типы, чтобы задать значимые имена целым числам, используемым в качестве вариантов значений управления.

  1. В редакторе MATLAB задайте классы, которые сопоставляют перечисленные значения со значимыми именами.

    classdef sldemo_mrv_CONTROLLER_TYPE < Simulink.IntEnumType
            enumeration
            NONLINEAR (1)
            SECOND_ORDER (2)
            end
    end
    
  2. Определите 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

  • A + B

  • A

  • A - B

  • -A

  • A - B

  • -A

A * BA * B
idivide(A,B)

A / B

Если значение второго операнда (B) 0, поведение не определено.

rem(A,B)

A % B

Если значение второго операнда (B) 0, поведение не определено.

Относительный

A == B

A == B

A ~= B

A != B

A < B

A < B

A > B

A > B

A <= B

A <= B

A >= B

A >= B
Логичный
~A!A, где A не является целым числом
A && BA && B
A || BA || B
Побитовый (A и B не могут оба быть постоянными целыми литералами)

bitand(A,B)

A & B

bitor(A,B)

A | B

bitxor(A,B)

A ^ B

bitcmp(A)

~A

bitshift(A,x)

A << x

bitshift(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.

Похожие примеры

Подробнее о