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

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

Задайте тип данных для численных значений, сопоставленных с членом перечисления

В сгенерированном коде тип данных по умолчанию для члена перечисления является двойным. В качестве альтернативы можно также задать тип данных для членов перечисления. Например, alpha (int32(0.001),'alpha (.001)'). Все члены класса перечисления должны иметь совпадающий тип данных.

Объединенные числовые значения, чтобы открыть опции параметра

1. В Редакторе Маски Настраиваемого Раскрывающегося блока Subsystem создайте раскрывающийся параметр под названием XFactorParam.

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

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

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

Сошлитесь на раскрывающийся параметр в дочерних блоках

Значение параметров оценено, как член перечисления, соответствующий отображению, называет вас выбором. Например, если вы выбираете alpha(.0001) от выпадающих Параметров, значение XFactorParam установлен в XFactor.alpha. Во время компиляции модели, для того, чтобы получить числовое значение, соответствующее опции, Simulink создает внутренний массив, который содержит значение, соответствующее каждой опции. Поэтому, когда вы выбираете опцию, значение, соответствующее опции, выбрано из массива.

Массив появляется XFactorValues = {.001, .0001, .00001}

Примечание: Чтобы получить значение, соответствующее выбранной опции, используйте формат:

<enumerationClassName>Values(<ParameterName>)

enumerationClassName имя класса перечисления и ParameterName имя раскрывающегося параметра, который вы задали в редакторе маски.

В этом примере значение параметра Константа в подсистеме установлено как XFactorValues(XFactorParam). Во время компиляции модели, XFactorValues(XFactorParam) оценивает к XFactorValues(XFactor.alpha), таким образом устанавливая значение параметра Константа к .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 с определенным классом памяти (что-либо кроме Автоматического) в рабочей области и партнере маски открывают параметр.

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

Сопоставьте перечислимый объект с атрибутом Опций Типа.

     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. Установите Постоянное значение параметров на раскрывающийся параметр XFactorParam.