Чтобы улучшить удобочитаемость графика Stateflow®, используйте перечисленные данные. С перечислимыми данными вы можете:
Создайте ограниченное множество значений и обратитесь к тем значениям по наименованию.
Связанные с группой значения в отдельные типы данных.
Постарайтесь не задавать длинный список констант.
Перечислимые данные поддерживаются в диаграммах Stateflow в моделях Simulink®. Для получения дополнительной информации смотрите Ссылочные Значения по наименованию при помощи Перечислимых Данных.
Прежде чем можно будет добавить перечисленные данные в диаграмму Stateflow, необходимо задать перечислимый тип данных в файле определения класса MATLAB®. Создайте различный файл для каждого перечислимого типа.
Перечислимое определение типов состоит из трех разделов кода.
Раздел кода | Необходимый? | Цель |
---|---|---|
classdef | Да | Обеспечивает имя перечислимого типа данных |
enumeration | Да | Перечисляет перечисляемые значения, которые позволяет тип данных |
methods | Нет | Предоставляет методы, которые настраивают тип данных |
Откройте новый файл, в котором можно сохранить определение типов. От вкладки Home на панели инструментов MATLAB выберите New> Class.
Завершите classdef
раздел определения.
classdef BasicColors < Simulink.IntEnumType ... end
classdef
раздел задает перечислимый тип данных с именем BasicColors
. Stateflow выводит тип данных из встроенного типа Simulink.IntEnumType
. Перечислимое имя типа данных должно быть уникальным среди имен переменных рабочей области и имен типов данных.
Задайте перечисляемые значения в enumeration
раздел.
classdef BasicColors < Simulink.IntEnumType enumeration Red(0) Yellow(1) Green(2) end end
Перечислимый тип может задать любое количество значений. enumeration
раздел перечисляет набор перечисляемых значений, которые позволяет этот тип данных. Каждое перечисляемое значение состоит из имени и базового целочисленного значения. Каждое имя должно быть уникальным в своем типе, но может также появиться в других перечислимых типах. Значением по умолчанию является первое в списке, если вы не задаете в противном случае в methods
раздел определения.
(Необязательно) Настройте тип данных при помощи 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
Сохраните файл на пути MATLAB. Имя файла должно совпадать точно с именем типа данных. Например, определение для типа данных BasicColors
должен находиться в файле с именем BasicColors.m
.
Чтобы добавить папку в путь поиска файлов MATLAB, введите addpath
в командной строке.pathname
Когда вы добавляете перечисленные данные в свой график, задаете его тип в Property Inspector.
В поле Type выберите Enum: <class name>
.
Замените <class name>
с именем типа данных. Например, можно ввести Enum: BasicColors
в поле Type.
(Необязательно) Введите начальное значение для перечислимых данных при помощи снабженного префиксом идентификатора. Начальное значение должно оценить к допустимому выражению MATLAB.