Задайте перечислимые типы данных

Чтобы улучшить удобочитаемость графика Stateflow®, используйте перечисленные данные. С перечислимыми данными вы можете:

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

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

  • Постарайтесь не задавать длинный список констант.

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

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

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

Перечислимое определение типов состоит из трех разделов кода.

Раздел кодаНеобходимый?Цель
classdef

Да

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

enumeration

Да

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

methods

Нет

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

Задайте перечислимый тип данных

  1. Откройте новый файл, в котором можно сохранить определение типов. От вкладки Home на панели инструментов MATLAB выберите New> Class.

  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 в командной строке.

Задайте тип данных в Property Inspector

Когда вы добавляете перечисленные данные в свой график, задаете его тип в Property Inspector.

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

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

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

Похожие темы