exponenta event banner

Определение перечислимых типов данных

Для улучшения читаемости диаграммы Stateflow ® используйте перечисляемые данные. С помощью перечисляемых данных можно:

  • Создайте ограниченный набор значений и обратитесь к ним по имени.

  • Группировать связанные значения по отдельным типам данных.

  • Избегайте определения длинного списка констант.

Перечисляемые данные поддерживаются в диаграммах Stateflow в моделях Simulink ®. Дополнительные сведения см. в разделе Ссылочные значения по имени с использованием перечисляемых данных.

Перед добавлением перечисляемых данных в диаграмму Stateflow необходимо определить тип перечисляемых данных в файле определения класса MATLAB ®. Создайте отдельный файл для каждого перечисляемого типа.

Элементы определения перечисляемого типа данных

Определение перечисляемого типа данных состоит из трех разделов кода.

Раздел КодексаОбязательно?Цель
classdef

Да

Имя перечисляемого типа данных

enumeration

Да

Перечисляемые значения, разрешенные типом данных

methods

Нет

Предоставляет методы, которые настраивают тип данных

Определение перечисляемого типа данных

  1. Откройте новый файл для хранения определения типа данных. На вкладке Главная на панели инструментов MATLAB выберите Создать > Класс.

  2. Завершите classdef раздел определения.

    classdef BasicColors < Simulink.IntEnumType
      ...
    end

    classdef раздел определяет перечисляемый тип данных с именем BasicColors. Stateflow извлекает тип данных из встроенного типа Simulink.IntEnumType. Имя перечисляемого типа данных должно быть уникальным среди имен типов данных и имен переменных рабочей области.

  3. Определение перечисляемых значений в enumeration раздел.

    classdef BasicColors < Simulink.IntEnumType
      enumeration
        Red(0)
        Yellow(1)
        Green(2)
      end
    end

    Перечисляемый тип может определять любое количество значений. enumeration В разделе перечисляется набор перечисляемых значений, разрешенных данным типом данных. Каждое перечисляемое значение состоит из имени и базового целого значения. Каждое имя должно быть уникальным в пределах своего типа, но может также отображаться в других перечисляемых типах. Значение по умолчанию является первым в списке, если не указано иное в methods раздел определения.

  4. (Необязательно) Настройте тип данных с помощью methods раздел. Раздел может содержать следующие методы:

    • getDefaultValue указывает перечисляемое значение по умолчанию, отличное от первого в списке допустимых значений.

    • getDescription задает описание типа данных для кода, созданного Simulink Coder™.

    • getHeaderFile указывает пользовательский файл заголовка, содержащий определение перечисляемого типа в коде, созданном Simulink Coder.

    • getDataScope позволяет экспортировать или импортировать определение перечисляемого типа в файл заголовка или из него в коде, созданном Simulink Coder.

    • addClassNameToEnumNames повышает читаемость и предотвращает конфликты имен с идентификаторами в коде, генерируемом Simulink Coder.

    Например, этот файл MATLAB представляет настраиваемое определение для перечисляемого типа данных BasicColors что:

    • Указывает, что перечисляемое значение по умолчанию является последним в списке допустимых значений.

    • Содержит краткое описание типа данных для кода, созданного Simulink Coder.

    • Импортирует определение типа данных из пользовательского файла заголовка, чтобы запретить Simulink Coder создавать определение.

    • Добавляет имя типа данных в качестве префикса к каждому имени элемента перечисления в коде, созданном Simulink Coder.

    classdef BasicColors < Simulink.IntEnumType
      enumeration
        Red(0)
        Yellow(1)
        Green(2)
      end
    
      methods (Static = true)
        function retVal = getDefaultValue()
          % GETDEFAULTVALUE Specifies the default enumeration member.
          % Return a valid member of this enumeration class to specify the default.
          % If you do not define this method, Simulink uses the first member.
          retVal = BasicColors.Green;
        end
    
        function retVal = getDescription()
          % GETDESCRIPTION Specifies a string to describe this enumerated type.
          retVal = 'This defines an enumerated type for colors';
        end
    
        function retVal = getHeaderFile()
          % GETHEADERFILE Specifies the file that defines this type in generated code.
          % The method getDataScope determines the significance of the specified file.
          retVal = 'imported_enum_type.h';
        end
    
        function retVal = getDataScope()
          % GETDATASCOPE Specifies whether generated code imports or exports this type.
          % Return one of these strings:
          % 'Auto':     define type in model_types.h, or import if header file specified
          % 'Exported': define type in a generated header file
          % 'Imported': import type definition from specified header file
          % If you do not define this method, DataScope is 'Auto' by default.
          retVal = 'Imported';
        end
    
        function retVal = addClassNameToEnumNames()
          % ADDCLASSNAMETOENUMNAMES Specifies whether to add the class name
          % as a prefix to enumeration member names in generated code.
          % Return true or false.
          % If you do not define this method, no prefix is added.
          retVal = true;
        end % function
      end % methods
    end % classdef

  5. Сохраните файл по пути MATLAB. Имя файла должно точно совпадать с именем типа данных. Например, определение типа данных BasicColors должен находиться в файле с именем BasicColors.m.

    Совет

    Чтобы добавить папку в путь поиска MATLAB, введите addpath pathname в командной строке.

Укажите тип данных в инспекторе свойств

При добавлении перечисляемых данных в диаграмму укажите их тип в Инспекторе свойств.

  1. В поле Тип выберите Enum: <class name>.

  2. Заменить <class name> с именем типа данных. Например, можно ввести Enum: BasicColors в поле Тип.

  3. (Необязательно) Введите начальное значение для перечисляемых данных с помощью префиксного идентификатора. Начальное значение должно вычисляться как допустимое выражение MATLAB.

Связанные темы