Definir tipos de datos enumerados
Para mejorar la legibilidad de un gráfico de Stateflow®, use datos enumerados. Con datos enumerados, puede hacer lo siguiente:
Crear un conjunto restringido de valores y hacer referencia a esos valores por nombre.
Agrupar los valores relacionados en tipos de datos separados.
Evitar definir una lista de constantes larga.
Los datos enumerados se admiten en gráficos de Stateflow en modelos de Simulink®. Para obtener más información, consulte Reference Values by Name by Using Enumerated Data.
Antes de poder añadir datos enumerados a un gráfico de Stateflow, debe definir un tipo de datos enumerados en un archivo de definición de clase de MATLAB®. Cree un archivo diferente para cada tipo enumerado.
Elementos de una definición de tipo de datos enumerados
La definición de tipo de datos enumerados consta de tres secciones de código.
Sección de código | ¿Obligatorio? | Finalidad |
---|---|---|
classdef | Sí | Proporciona el nombre del tipo de datos enumerados |
enumeration | Sí | Muestra los valores enumerados que el tipo de datos permite |
methods | No | Proporciona métodos que personalizan el tipo de datos |
Definir un tipo de datos enumerados
Abra un archivo nuevo en el que dese almacenar la definición del tipo de datos. En la pestaña Home de la barra de herramientas de MATLAB, seleccione New > Class.
Complete la sección
classdef
de la definición.classdef BasicColors < Simulink.IntEnumType ... end
La sección
classdef
define un tipo de datos enumerados con el nombreBasicColors
. Stateflow deriva el tipo de datos del tipo integradoSimulink.IntEnumType
. El nombre del tipo de datos enumerados debe ser único entre los nombres de los tipos de datos y los nombres de variables del área de trabajo.Defina valores enumerados en una sección
enumeration
.classdef BasicColors < Simulink.IntEnumType enumeration Red(0) Yellow(1) Green(2) end end
Un tipo enumerado puede definir cualquier número de valores. La sección
enumeration
muestra el conjunto de valores enumerados que permite este tipo de datos. Cada valor enumerado consta de un nombre y de un valor entero subyacente. Cada nombre debe ser único dentro de su tipo, pero también puede aparecer en otros tipos enumerados. El valor predeterminado es el primero de la lista, a menos que especifique lo contrario en la secciónmethods
de la definición.(Opcional) Personalice el tipo de datos utilizando una sección
methods
. La sección puede contener estos métodos:getDefaultValue
especifica un valor enumerado predeterminado diferente al primero de la lista de valores permitidos.getDescription
especifica una descripción del tipo de datos para código generado por Simulink Coder™.getHeaderFile
especifica un archivo de encabezado personalizado que contiene la definición del tipo enumerado en código generado por Simulink Coder.getDataScope
activa la exportación o importación de la definición del tipo enumerado a o a partir de un archivo de encabezado en código generado por Simulink Coder.addClassNameToEnumNames
mejora la legibilidad y evita conflictos de nombres con identificadores en código generado por Simulink Coder.
Por ejemplo, este archivo de MATLAB presenta una definición personalizada para el tipo de datos enumerados
BasicColors
que:Especifica que el valor enumerado predeterminado es el último de la lista de valores permitidos.
Incluye una breve descripción del tipo de datos para código generado por Simulink Coder.
Importa la definición del tipo de datos a partir de un archivo de encabezado personalizado para evitar que Simulink Coder genere la definición.
Añade el nombre del tipo de datos como un prefijo al nombre de cada miembro de la enumeración en código generado por 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
Guarde el archivo en la ruta de MATLAB. El nombre del archivo debe coincidir exactamente con el nombre del tipo de datos. Por ejemplo, la definición del tipo de datos
BasicColors
debe residir en un archivo llamadoBasicColors.m
.Sugerencia
Para añadir una carpeta a la ruta de búsqueda de MATLAB, escriba
addpath
en la línea de comandos.pathname
Especificar el tipo de datos en Property Inspector
Cuando añada datos enumerados al gráfico, especifique su tipo en Property Inspector.
En el campo Type, seleccione
Enum: <class name>
.Reemplace
<class name>
con el nombre del tipo de datos. Por ejemplo, puede introducirEnum: BasicColors
en el campo Type.(Opcional) Introduzca un valor inicial para los datos enumerados utilizando un identificador con prefijo. El valor inicial debe evaluarse como una expresión de MATLAB válida. Para obtener más información sobre identificadores con prefijo y sin prefijo, consulte Notation for Enumerated Values.