Можно визуализировать поведение модели 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
.