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

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

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

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

Примечание

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

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

Операнды

  • Переменные, которые представляют Simulink.VariantControl объекты

  • Скалярные литеральные значения, которые являются целочисленными или перечисляемыми значениями

Операторы

Различные выражения условия могут содержать операторы MATLAB, если выражение оценивает к булеву значению. В этих примерах, A и B выражения, которые оценивают до целого числа и x постоянный целочисленный литерал.

Выражения MATLAB, которые поддерживают генерацию условных выражений препроцессораЭквивалентное выражение в условном выражении препроцессора C
Реляционный

A == B

A == B

A ~= B

A != B
Логический
~A!A, где A не целое число
A && BA && B
A || BA || B

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

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

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

Задайте скалярные переменные для быстрого прототипирования

Скалярные переменные MATLAB позволяют вам значениям варианта быстрого прототипирования, когда вы все еще создаете свою модель. Они помогают вам фокусироваться больше на создании ваших различных значений, чем на разработке выражений, которые активируют тот выбор.

В редакторе MATLAB задайте варианты в их самой простой форме как скалярные переменные в Simulink.VariantVariable объект.

vpObj = Simulink.VariantVariable('Choices',{'VCtrl==1', 1000, 'VCtrl==2', 2000})
vpObj = 
VariantVariable with 2 choices:

 Condition 	Value
__________	_____
VCtrl == 1	1000
VCtrl == 2	2000

Specification: ''

Use getChoice, setChoice, addChoice, removeChoice to access, modify, add or
remove choices

Активируйте одно из различных значений путем определения контрольной переменной, VCtrl, и устанавливание его значения к 1 в Simulink.VariantControl объект. Это условие активирует значение 1000 и присвоения это значение к vpObj.

VCtrl = Simulink.VariantControl('Value', 1, 'ActivationTime', 'update diagram')
VCtrl = 
  VariantControl with properties:

             Value: 1
    ActivationTime: 'update diagram'

Если вы изменяете значение VCtrl к 2, Simulink® устанавливает значение vpObj к 2000.

VCtrl.Value = 2;

Задайте объекты Simulink.Variant для различного повторного использования условия

После идентификации различных значений, которых требует ваша модель, можно создать комплексные различные условия управлять активацией различных значений параметров путем определения различных условий как Simulink.Variant объекты. Simulink.Variant объекты позволяют вам снова использовать общие различные условия через модели и помочь вам инкапсулировать комплексные различные выражения условия.

В Редакторе MATLAB® инкапсулируйте различные выражения управления как Simulink.Variant объекты.

LinearController=Simulink.Variant('VCtrl==1');
NonLinearController=Simulink.Variant('VCtrl==2');

Задайте Simulink.Variant объекты как вариант управляют в Simulink.VariantVariable объект.

vpObj = Simulink.VariantVariable('Choices',{'LinearController',1000,'NonLinearController',2000})
vpObj = 
VariantVariable with 2 choices:

     Condition     	Value
___________________	_____
LinearController   	1000
NonLinearController	2000

Specification: ''

Use getChoice, setChoice, addChoice, removeChoice to access, modify, add or
remove choices

Активируйте одно из различных значений путем определения контрольной переменной, VCtrl, и устанавливание его значения к LinearController в Simulink.VariantControl объект. Это условие активирует значение 1000 и присвоения это значение к vpObj.

VCtrl = Simulink.VariantControl('Value',1,'ActivationTime','update diagram')
VCtrl = 
  VariantControl with properties:

             Value: 1
    ActivationTime: 'update diagram'

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

Объекты Simulink.Parameter или переменные MATLAB для генерации кода

Если вы намереваетесь сгенерировать код для модели, содержащей различные значения параметров, задайте различные контрольные переменные как переменные MATLAB® или Simulink.Parameter объекты. 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 or ImportedDefine с заданным заголовочным файлом

  • CompilerFlag

  • SystemConstant (AUTOSAR)

  • Ваш собственный класс памяти, который задает данные как макрос

Можно также преобразовать скалярную различную контрольную переменную в Simulink.Parameter объект. Для получения дополнительной информации смотрите, Преобразуют Различные Контрольные переменные в Объекты Simulink.Parameter.

Задайте объект как различное управление с помощью Simulink.VariantVariable объект.

vpObj = Simulink.VariantVariable('Choices', {'VCtrl == 1',1000,'VCtrl == 2',2000});

Активируйте одно из различных значений путем определения контрольной переменной VCtrl и устанавливание его значения к VSSMODE в Simulink.VariantControl объект. Это условие активирует значение 1000 и присвоения это значение к vpObj.

VCtrl = Simulink.VariantControl('Value',VSSMODE,'ActivationTime','code compile')
VCtrl = 
  VariantControl with properties:

             Value: [1x1 Simulink.Parameter]
    ActivationTime: 'code compile'

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

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

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

Задайте имена как варианты в Simulink.VariantVariable объект.

vpObj = Simulink.VariantVariable('Choices', {'VCtrl == EngType.Small',3.5,'VCtrl == EngType.Big',8.5})
vpObj = 
VariantVariable with 2 choices:

       Condition       	Value
______________________	_____
VCtrl == EngType.Big  	8.5000
VCtrl == EngType.Small	3.5000

Specification: ''

Use getChoice, setChoice, addChoice, removeChoice to access, modify, add or
remove choices

Активируйте одно из различных значений путем определения контрольной переменной VCtrl и устанавливание его значения к EngType.Small в Simulink.VariantControl объект. Это условие активирует значение 3.5 и присвоения это значение к vpObj.

VCtrl = Simulink.VariantControl('Value',EngType.Small,'ActivationTime','code compile')
VCtrl = 
  VariantControl with properties:

             Value: Small
    ActivationTime: 'code compile'

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