exponenta event banner

Настройка параметров всплывающего окна маски путем ссылки на внешний файл перечисления

Можно визуализировать поведение модели 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 для ссылки на внешний файл перечисления

Создайте объект параметра типа с помощью этого 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.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.