Можно визуализировать поведение модели 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
Задайте тип данных для числовых значений, ассоциированных с представителем перечисления
В сгенерированном коде тип данных по умолчанию для представителя перечисления является double. Кроме того, можно задать тип данных для представителей перечисления. Для примера, alpha (int32(0.001),'alpha (.001)'). Все представители класса перечисления должны иметь совпадающий тип данных.
1. В редакторе масок блока Tunable Popup Subsystem создайте всплывающий параметр с именем XFactorParam.
2. В редакторе свойств выберите опцию Ссылка на внешний перечисление и укажите имя класса перечисления, созданного на предыдущем шаге. В этом примере имя класса перечисления Xfactor.
Примечание. Ссылка на класс перечисления Xfactor должен находиться в пути MATLAB.

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

Значение значения параметров определяется как представитель перечисления, соответствующее выбранному отображению имени. Для примера, если вы выбираете alpha(.0001) из раскрывающегося списка Parameters, значение 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, };
Связанная переменная упоминается в функции step, чтобы сгенерировать выход.
/* 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 );Если параметр mask уже существует, используйте эти 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.
