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

Компоненты модели Simulink®, которые содержат Варианты, активированы или деактивированы на основе варианта, который вы выбираете.

Каждый вариант в вашей модели сопоставлен с названным различным управлением условного выражения. Различные средства управления определяют, какой вариант активен. Путем изменения значения различного управления можно переключить активный вариант.

В то время как каждый вариант сопоставлен с различным управлением, только одно различное управление может оценить к истине. Когда различное управление оценивает к истине, Simulink активирует вариант, который соответствует тому различному управлению.

Различным управлением является Булево выражение, которое активирует определенный вариант, когда оно оценивает к true.

Примечание

Можно задать различные средства управления в глобальной рабочей области MATLAB®, рабочей области маски или словаре данных.

Можно задать различные средства управления как Simulink.Variant объекты, выражения MATLAB (включая структуры) или как выражения, которые содержат один или несколько из этих операндов и операторов.

Различный режим управления

Параметр Variant control mode, доступный в диалоговом окне параметров блоков, позволяет вам выбирать Expression или Label или sim codegen switching режим для моделирования Различных блоков.

  • Expression: Задает активный Вариант на основе оценки Различных условий.

    Различный режим управления: Выражение

  • Label: Задает основанные на имени Различные средства управления (Режим метки активный выбор). В Label режим, Различное управление не должно быть создано в глобальной рабочей области. В качестве альтернативы можно выбрать режим Label активный выбор из командной строки. Например, set_param(block,'LabelModeActiveChoice', 'Choice_1').

    Различный режим управления: Метка

  • sim codegen switching: включает автоматическое различное переключение для симуляции и рабочих процессов генерации кода в различных блоках. Эта функция удобна, чтобы переключиться между режимами генерации кода и симуляцией.

    Когда вы симулируете (Нормальный, Акселератор, Быстрый Акселератор) модель, затем Simulink автоматически выбирает sim перейдите как активный выбор. Точно так же, когда вы делаете программное обеспечение в цикле (SIL) симуляция, симуляция Процессора в цикле (PIL) или генерируете код или используете режим external mode, Simulink автоматически выбирает codegen ветвь.

    Примечание

    Если различному блоку установили Variant control mode на label или expression, затем использование sim или codegen для его выбора не поддерживается условие.

    Различный режим управления: sim codegen переключение

    Примечание

    В 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 Объекты для различного повторного использования условия

После идентификации вариантов, которых требует ваша модель, можно создать комплексные различные условия управлять активацией вариантов. Условия варианта Define как 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.Parameter.

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

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

  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 с двумя Одно входами Одно Выходами (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.

Связанные примеры

Больше о