Можно визуализировать поведение модели Simulink при различных условиях путем настройки значений параметров блоков. В этом примере показано, как сопоставить значения раскрывающимися параметрами и достигнуть приспособляемости времени генерации кода. Ссылка на внешний файл перечисления, чтобы настроить всплывающий параметр маски позволяет вам:
Объединенные числовые значения с раскрывающимися опциями.
Сопоставьте переменную раскрывающимся параметром.
Симулируйте и сгенерируйте код, соответствующий выбранной раскрывающейся опции.
Рассмотрите этот пример, где подсистема, содержащая блок Constant, соединяется с выходным портом.
Внешний файл перечисления может иметь несколько членов с различными именами отображения и значениями. Когда файл перечисления сопоставлен раскрывающимся параметром:
Имя отображения члена перечисления становится раскрывающейся опцией параметра.
Значение члена перечисления становится значением, присвоенным раскрывающемуся параметру.
В этом примере числовые значения сопоставлены с раскрывающимися опциями из перечислимого файла Xfactor.m
. Класс перечисления файла Xfactor
, выведен из
. Класс имеет три члена перечисления, Simulink.Mask.EnumerationBase
alpha
\beta
, и gamma
. У этих перечислимых членов есть числовые значения .001
, .0001, и
.00001
.
classdef XFactor < Simulink.Mask.EnumerationBase enumeration alpha(.001, 'alpha (.001)') beta (.0001, 'beta (.0001)') gamma(.00001,'gamma (.00001)') end end
Задайте тип данных для численных значений, сопоставленных с членом перечисления
В сгенерированном коде тип данных по умолчанию для члена перечисления является двойным. В качестве альтернативы можно также задать тип данных для членов перечисления. Например, alpha (int32(0.001),'alpha (.001)')
. Все члены класса перечисления должны иметь совпадающий тип данных.
1. В Редакторе Маски Настраиваемого Раскрывающегося блока Subsystem создайте раскрывающийся параметр под названием XFactorParam
.
2. В Редакторе свойств выберите Ссылочную внешнюю опцию перечисления и задайте имя класса перечисления, который был создан на предыдущем шаге. В этом примере именем класса перечисления является Xfactor
.
Примечание: класс перечисления ссылки Xfactor
должен быть в пути MATLAB.
После ссылки на файл класса перечисления опции для раскрывающегося параметра в диалоговом окне маски блока Subsystem заполняются с именами отображения в файле перечисления.
Значение параметров оценено, как член перечисления, соответствующий отображению, называет вас выбором. Например, если вы выбираете alpha(.0001)
от выпадающих Параметров, значение XFactorParam
установлен в XFactor.alpha
. Во время компиляции модели, для того, чтобы получить числовое значение, соответствующее опции, Simulink создает внутренний массив, который содержит значение, соответствующее каждой опции. Поэтому, когда вы выбираете опцию, значение, соответствующее опции, выбрано из массива.
В этом примере массив появляется XFactorValues = {.001, .0001, .00001}
Примечание: Чтобы получить значение, соответствующее выбранной опции, используйте этот формат:
<enumerationClassName>Values(<ParameterName>)
enumerationClassName
имя класса перечисления и ParameterName
имя раскрывающегося параметра, который вы задали в редакторе маски.
В этом примере значение параметра Константа в подсистеме установлено как XFactorValues(XFactorParam)
. Во время компиляции модели, XFactorValues(XFactorParam)
оценивает к XFactorValues(XFactor.alpha)
, таким образом устанавливая значение параметра Константа к .001
.
Можно настроить имя для массива в файле перечисления как возвращаемое значение getValueArrayName()
функция.
classdef XFactor < Simulink.Mask.EnumerationBase enumeration alpha(.001, 'alpha (.001)') beta (.0001, 'beta (.0001)') gamma(.00001,'gamma (.00001)') end methods(Static) function valueArrayName = getValueArrayName() valueArrayName = 'customValueArrayName'; end end end
Измените значение параметра в диалоговом окне между alpha (0.001)
, beta (0.0001)
, и gamma (0.00001)
и заметьте, что в процессе моделирования, значение, соответствующее выбранной опции, появляется как выход симуляции.
Можно сгенерировать код с помощью Simulink Coder или Embedded Coder. В сгенерированном коде:
Массив значения XFactorValues
сгенерирован в modelname.c
файл.
const real_T XFactorValues[3] = { 0.001, 0.0001, 1.0E-5 } ;
Перечисление сгенерировано в коде, соответствующем файлу перечисления, на который ссылаются.
typedef enum { XFactor_alpha = 1, /* Default value */ XFactor_beta, XFactor_gamma } XFactor;
Параметр маски (XFactorParam)
появляется в структуре параметра.
/* Parameters (default storage) */ struct P_slexMaskTunablePopupExample_T_ { XFactor TunablePopup_XFactorParam;/* Mask Parameter: TunablePopup_XFactorParam * Referenced by: '<S1>/Constant' */ };
Настраиваемая переменная XFactorParam
ссылается при генерации выхода. Можно задать различные значения к XFactorParam
и таким образом приспособляемость достигается.
/* Model step function */ void slexMaskTunablePopupExample_step(void) { /* Outport: '<Root>/Out1' incorporates: * Constant: '<S1>/Constant' */ slexMaskTunablePopupExample_Y.Out1 = XFactorValues[(int32_T) slexMaskTunablePopupExample_P.TunablePopup_XFactorParam - 1]; }
Когда поведение параметра по умолчанию в оптимизации генерации кода встраивается, все параметры встраиваются в сгенерированном коде. Чтобы достигнуть приспособляемости для определенного параметра, создайте переменную типа Simulink.Parameter
с определенным классом памяти (что-либо кроме Автоматического) в рабочей области и партнере маски открывают параметр.
1. Откройте диалоговое окно маски. Кликните по виджету действия (...).
2. Можно сопоставить существующую переменную раскрывающимся параметром или создать переменную в одном из доступных местоположений и партнера раскрывающегося параметра.
После соединения переменной раскрывающимся параметром переменная появляется рядом с раскрывающейся опцией.
Значение связанной переменной и раскрывающееся значение всегда синхронизируются. Например, если вы изменяете раскрывающуюся опцию от alpha (.001)
к beta (.0001)
, workspaceVar
обновляется к XFactor.beta
. Точно так же, когда вы изменяете значение переменной, значение параметра отражает изменение в диалоговом окне маски.
Связанное значение переменных появляется в структуре параметра, соответствующей настраиваемому раскрывающемуся параметру.
/* Block parameters (default storage) */ P_slexMaskTunablePopupExample_T slexMaskTunablePopupExample_P = { /* Variable: workspaceVar * Referenced by: '<S2>/Constant' */ XFactor_alpha, };
На связанную переменную ссылаются в ступенчатой функции, чтобы сгенерировать выход.
/* Model step function */ void slexMaskTunablePopupExample_step(void) { /* Outport: '<Root>/Out2' incorporates: * Constant: '<S2>/Constant' */ slexMaskTunablePopupExample_Y.Out2 = XFactorValues[(int32_T) slexMaskTunablePopupExample_P.workspaceVar - 1]; }
Создайте объект опции типа, использующий этот API.
enumObj =
Simulink.Mask.EnumerationTypeOptions(ExternalEnumerationClass,
'<enumName>')
Создайте экземпляр Simulink.Mask.EnumerationTypeOptions
проанализировать информацию из файла перечисления в объект enumObj
.
Example >> enumObj = Simulink.Mask.EnumerationTypeOptions('ExternalEnumerationClass', 'XFactor')
enumObj = EnumerationTypeOptions with properties: ExternalEnumerationClass: 'XFactor' EnumerationMembers: [1*3 Simulink.Mask.EnumerationMembers]
>> enumObj.EnumerationMembers(1)
ans = EnumerationMembers with properties: MemberName: 'alpha' DescriptiveName: 'alpha (.001)' Value: 0.001
Сопоставьте перечислимый объект с атрибутом Опций Типа.
maskobj = Simulink.Mask.create(<blockName>); maskobj.addParameter('Type','popup','TypeOptions', enumObj );
Если параметр маски уже существует, используйте эти API.
maskobj = Simulink.Mask.get(<blockName>); paramHandle = maskobj.getParameter('<parameterName>'); paramHandle.TypeOptions = enumObj
Используйте эту команду, чтобы сопоставить переменную к значению параметра.
set_param(<blockName>, '<ParameterName>', 'workspaceVar')
Примечание: используйте slResolve
получить оцененное значение параметра в случае, если это ссылается на переменную рабочей области.
Если у вас есть существующий класс перечисления, выведенный из Simulink.IntEnumType
, можно использовать файл перечисления, чтобы сопоставить числовые значения к раскрывающемуся параметру вместо того, чтобы создать новый класс перечисления, выведенный из Simulink.Mask.EnumerationBase
. Сопоставлять файл перечисления, выведенный из Simulink.IntEnumType
, выполните эти шаги.
classdef Color < Simulink.IntEnumType enumeration red(1) green(100) blue(1000) end methods(Static) function aOut = addClassNameToEnumNames() aOut = false; end end end
1. Задайте имя класса перечисления.
2. Раскрывающиеся опции будут заполнены с членами перечисления, снабженными префиксом имя класса перечисления.
3. Установите Постоянное значение параметров на раскрывающийся параметр XFactorParam
.