Можно визуализировать поведение модели Simulink при различных условиях путем настройки значений параметров блока. В этом примере показано, как связать значения с всплывающими параметрами и обеспечить возможность настройки времени генерации кода. Ссылка на внешний файл перечисления для настройки всплывающего параметра маски позволяет:
Свяжите числовые значения с опциями всплывающего окна.
Свяжите переменную с всплывающим параметром.
Моделирование и создание кода, соответствующего выбранной опции всплывающего окна.
Рассмотрим этот пример, когда подсистема, содержащая блок константы, подключена к выходному порту.

Внешний файл перечисления может иметь несколько элементов с различными отображаемыми именами и значениями. Если файл перечисления связан с всплывающим параметром:
Отображаемое имя элемента перечисления становится опцией всплывающих параметров.
Значение элемента перечисления становится значением, назначенным всплывающему параметру.
В этом примере числовые значения связаны с параметрами всплывающего окна из перечисляемого файла 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. В редакторе масок блока «Настраиваемая всплывающая подсистема» создайте всплывающий параметр с именем XFactorParam.
2. В редакторе свойств выберите параметр «Ссылка на внешнее перечисление» и укажите имя класса перечисления, созданного на предыдущем шаге. В этом примере именем класса перечисления является Xfactor.
Примечание.Класс перечисления ссылок Xfactor должен находиться в пути MATLAB.

После обращения к файлу класса перечисления параметры всплывающего параметра в диалоговом окне маски блока Подсистема заполняются отображаемыми именами в файле перечисления.

Значение параметра вычисляется как элемент перечисления, соответствующий выбранному отображаемому имени. Например, при выборе alpha(.0001) из раскрывающегося списка Параметры значение XFactorParam имеет значение XFactor.alpha. Во время компиляции модели, чтобы получить числовое значение, соответствующее опции, Simulink создает внутренний массив, который содержит значение, соответствующее каждой опции. Поэтому при выборе опции значение, соответствующее опции, выбирается из массива.
Появится массив XFactorValues = {.001, .0001, .00001}
Примечание.Чтобы получить значение, соответствующее выбранной опции, используйте формат:
<enumerationClassName>Values(<ParameterName>)
enumerationClassName является именем класса перечисления, и ParameterName - имя всплывающего параметра, указанное в редакторе масок.
В этом примере значение параметра Constant в подсистеме устанавливается как XFactorValues(XFactorParam). Во время компиляции модели XFactorValues(XFactorParam) вычисляется как XFactorValues(XFactor.alpha), таким образом устанавливая значение параметра Constant равным .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 с определенным классом хранения (что-либо, кроме Auto) в рабочей области и связать с параметром маскирования всплывающего окна.
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Свяжите объект перечисления с атрибутом Опции типа (Type Options).
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. Задайте для параметра Constant значение всплывающего параметра XFactorParam.
