Для улучшения читаемости диаграммы Stateflow ® используйте перечисляемые данные. С помощью перечисляемых данных можно:
Создайте ограниченный набор значений и обратитесь к ним по имени.
Группировать связанные значения по отдельным типам данных.
Избегайте определения длинного списка констант.
Перечисляемые данные поддерживаются в диаграммах Stateflow в моделях Simulink ®. Дополнительные сведения см. в разделе Ссылочные значения по имени с использованием перечисляемых данных.
Перед добавлением перечисляемых данных в диаграмму Stateflow необходимо определить тип перечисляемых данных в файле определения класса MATLAB ®. Создайте отдельный файл для каждого перечисляемого типа.
Определение перечисляемого типа данных состоит из трех разделов кода.
| Раздел Кодекса | Обязательно? | Цель |
|---|---|---|
classdef | Да | Имя перечисляемого типа данных |
enumeration | Да | Перечисляемые значения, разрешенные типом данных |
methods | Нет | Предоставляет методы, которые настраивают тип данных |
Откройте новый файл для хранения определения типа данных. На вкладке Главная на панели инструментов MATLAB выберите Создать > Класс.
Завершите 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
При добавлении перечисляемых данных в диаграмму укажите их тип в Инспекторе свойств.
В поле Тип выберите Enum: <class name>.
Заменить <class name> с именем типа данных. Например, можно ввести Enum: BasicColors в поле Тип.
(Необязательно) Введите начальное значение для перечисляемых данных с помощью префиксного идентификатора. Начальное значение должно вычисляться как допустимое выражение MATLAB.