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

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

  • Связать числовые значения с опциями всплывающего окна.

  • Связать переменную с всплывающим параметром.

  • Моделируйте и сгенерируйте код, соответствующий выбранной опции всплывающего окна.

Рассмотрим этот пример, где подсистема, содержащая блок Constant, соединяется с выходом портом.

Ассоциируйте файл внешнего перечисления с параметром Popup

Внешний файл перечисления может иметь несколько представителей с различными отображаемыми именами и значениями. Когда файл перечисления связан с всплывающим параметром:

  • Имя отображения представителя перечисления становится опцией всплывающего параметра.

  • Значение представителя перечисления становится значением, присвоенным всплывающему параметру.

В этом примере числовые значения связаны с всплывающими опциями из перечисляемого файла 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)'). Все представители класса перечисления должны иметь совпадающий тип данных.

Связывание числовых значений с опциями параметра Popup

1. В редакторе масок блока Tunable Popup Subsystem создайте всплывающий параметр с именем XFactorParam.

2. В редакторе свойств выберите опцию Ссылка на внешний перечисление и укажите имя класса перечисления, созданного на предыдущем шаге. В этом примере имя класса перечисления Xfactor.

Примечание. Ссылка на класс перечисления Xfactor должен находиться в пути MATLAB.

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

Ссылка на параметр Popup в дочерних блоках

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

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