主要内容

使用枚举的数据金宝app模型

枚举数据是限制在一个有限的数据设置的值。一个枚举数据类型MATLAB是一种®类定义了一组枚举值。每一个枚举值包含一个枚举的名字和一个潜在的整数内部软件使用和生成的代码。

基本概念中枚举信息模型金宝app®,请参阅金宝app仿真软件枚举

与枚举生成代码的信息,请参阅使用枚举数据在生成的代码(金宝app仿真软件编码器)

定义金宝app枚举

定义一个枚举数据类型,您可以使用仿真软件模型,使用这些方法之一:金宝app

工作流来定义一个金宝app枚举类

  1. 创建一个类的定义

  2. 可选地,自定义枚举

  3. 可选地,保存在MATLAB文件枚举

  4. 可选地,永久地存储枚举定义在模型数据字典。金宝app看到永久存储枚举类型定义

创建金宝app枚举类

创建一个模型枚举类,类定金宝app义:

  • 定义的类的一个子类金宝appSimulink.IntEnumType。你也可以枚举类型基于这些内置整数数据类型之一:int8,uint8,int16,uint16,int32

  • 添加一个枚举块指定枚举值与潜在的整数值。

考虑下面的例子:

classdef BasicColors <仿金宝app真软件。IntEnumType枚举红色(0)黄色(1)蓝色(2)结束结束

第一行定义了一个基于整数枚举,来源于内置类金宝appSimulink.IntEnumType。基于整数因为枚举IntEnumType来自int32

枚举部分指定三个枚举值。

枚举值 枚举的名字 潜在的整数
红色(0) 红色的 0
黄色(1) 黄色的 1
蓝色(2) 蓝色的 2

当定义一个枚举类用于仿真软件环境,考虑以下:金宝app

  • 枚举类的名称必须是唯一的数据类型名称和基本工作空间变量名称,和是区分大小写的。

  • 潜在的整数值枚举部分不需要独特的类内和跨类型。

  • 通常,底层的一组整数枚举值是连续和单调递增,但他们不需要连续或命令。

  • 为模拟,可以是任何一个潜在的整数int32价值。使用MATLAB函数intminintmax的限制。

  • 代码生成,每一个潜在的整数值必须作为一个整数能被描绘的目标硬件,这可能对不同的限制。看到配置一个系统目标文件(金宝app仿真软件编码器)为更多的信息。

超类的更多信息,请参阅转换为超类值。信息在枚举类是如何处理有多个名字的潜在价值,明白了如何别名枚举名字吗

定制金宝app枚举

关于金宝app枚举定制。你可以定制一个仿真软件枚举通过实施特定的金宝app静态方法在类定义。如果你使用适当的语法定义这些方法,您可以更改类的行为在模拟和生成的代码。

表显示了您可以实现自定义一个枚举的方法。

静态方法 目的 默认值没有实现方法 自定义返回值 使用上下文
getDefaultValue 指定默认的枚举成员的类。 第一个成员中指定枚举定义 特征向量包含一个枚举成员的名称的类(见实例化枚举) 仿真和代码生成
getDescription 指定枚举类的描述。 一个特征向量包含类型的描述 代码生成
getHeaderFile 指定一个头文件的名称。该方法getDataScope确定文件的意义。 一个特征向量包含头文件的名称定义枚举类型 代码生成
getDataScope 指定生成的代码是否出口或进口的定义枚举数据类型。使用这种方法getHeaderFile指定生成的或包含的头文件,它定义了类型。 “汽车” 之一:“汽车”,“出口”,或“进口” 代码生成
addClassNameToEnumNames 指定是否前缀生成的代码的类名。 真正的 代码生成

更多的例子,这些方法适用于代码生成时,看到的自定义枚举数据类型(金宝app仿真软件编码器)

指定一个默认的枚举值。金宝app仿真软件生成的代码和相关使用枚举的地上衡默认值初始化枚举数据时提供其他任何初始值。例如,枚举信号在一个有条件地执行子系统,尚未执行枚举的默认值。生成的代码使用枚举的默认值如果安全投失败,所述为枚举类型铸造(金宝app仿真软件编码器)

除非特别指定,否则默认值为一个枚举类定义枚举中的第一个值。指定一个不同的默认值,添加你自己的getDefaultValue方法方法部分。下面的代码显示了一个外壳的getDefaultValue方法:

retVal = getDefaultValue()函数% getDefaultValue指定默认的枚举成员。%返回一个有效的成员这个枚举类指定缺省值。%如果您没有定义这个方法,仿真软件使用的第一个成员。金宝appretVal =EnumName;结束

自定义这个方法,提供一个值ThisClass.EnumName指定所需的默认。

  • 必须在这类的名称的方法存在。

  • EnumName必须在这个类中定义的名称的枚举值。

例如:

classdef BasicColors <仿金宝app真软件。IntEnumType枚举红色(0)黄色(1)蓝色(2)结束方法(Static) function retVal = getDefaultValue() retVal = BasicColors.Blue; end end end

这个例子定义了默认BasicColors.Blue。如果这个方法不出现,默认值BasicColors.Red,因为这是第一个枚举类定义中列出的值。

看似多余的规范里面的定义是必要的,因为相同的类getDefaultValue返回一个默认的枚举值的实例,不仅仅是名称的值。方法,因此,需要一个完整规范的实例化。看到实例化枚举为更多的信息。

将枚举保存在一个MATLAB文件

您可以定义一个枚举在MATLAB文件。

  • 定义文件的名称必须匹配枚举的名字,包括案例。例如,枚举的定义BasicColors必须在文件命名BasicColors.m。否则,MATLAB将找不到定义。

  • 您必须定义每个类定义一个单独的文件中。

  • 拯救MATLAB搜索路径上的每个定义文件。MATLAB搜索的路径找到一个定义在必要的时候。

    一个文件或文件夹添加到MATLAB的搜索路径,类型目录路径名在MATLAB命令提示符。有关更多信息,请参见MATLAB搜索路径是什么?,目录,savepath

  • 您不需要执行一个枚举类定义使用枚举。唯一的要求,显示在前面的子弹,就是定义文件MATLAB搜索路径。

变化和重载枚举类

你可以改变的定义枚举通过编辑并保存文件,其中包含定义。你不需要通知MATLAB,类定义发生了变化。MATLAB自动读取修改定义当你保存文件。然而,类定义的变化不充分影响如果任何类实例(枚举值)的存在,反映了先前的类定义。这种情况下可能存在于工作区底部,也可能是缓存。

下表说明了枚举的选项删除实例从基本工作空间和缓存。

如果在基地空间…… 如果在缓存中……

做下列之一:

  • 定位和删除特定的过时的实例。

  • 从工作区中删除所有的使用清晰的命令。

  • 删除过时的实例通过关闭所有你更新或模拟模型,在前面的类定义的效果。

  • 明确功能和关闭模型缓存的类的实例。

类似地,如果您定义一个枚举类通过使用金宝appSimulink.defineIntEnumType,你可以定义类,使用相同的函数,即使实例存在。然而,你无法改变StorageType为类实例存在。

应用枚举更改的更多信息,请参阅自动更新为修改后的类

导入外部定义的枚举MATLAB

如果你有枚举定义外部使用MATLAB,您想要导入仿真软件环境中,可以通过调用这些功能之一:金宝app

  • 金宝appSimulink.defineIntEnumType——定义一个枚举,您可以使用MATLAB作为如果它被定义为一个类定义文件。除了指定枚举类名和值,每个函数调用可以指定:

    • 特征向量描述了枚举类。

    • 枚举值是默认的。

    对于代码生成,您可以指定:

    • 头文件定义的枚举生成的代码。

    • 是否代码生成器类名作为前缀适用于枚举成员——例如,BasicColors_Red红色的

    作为一个例子,考虑下面的类定义:

    classdef BasicColors <仿金宝app真软件。IntEnumType枚举红色(0)黄色(1)蓝色(2)结束方法(Static = true) function retVal = getDescription() retVal = 'Basic colors...'; end function retVal = getDefaultValue() retVal = BasicColors.Blue; end function retVal = getHeaderFile() retVal = 'mybasiccolors.h'; end function retVal = addClassNameToEnumNames() retVal = true; end end end

    下面的函数调用同一个类定义了用于MATLAB:

    金宝appSimulink.defineIntEnumType (“BasicColors”,…{“红”、“黄”、“蓝”},(0,1,2)…“描述”、“基本颜色”,…“DefaultValue”、“蓝”,……“HeaderFile”、“mybasiccolors。h’,……“DataScope”、“进口”,……“AddClassNameToEnumNames”,真正的);
  • 金宝appSimulink.importExternalCTypes——创建的模型表示枚金宝app举数据类型(枚举),您现有的C代码定义了。

如果一个MATLAB函数阻止在您的模型中使用枚举类型,配置模型配置参数包括(# include)从外部头文件类型定义。看到控制进口汽车和枚举类型定义

永久存储枚举类型定义

无论你定义一个枚举通过使用一个类文件或使用功能金宝appSimulink.defineIntEnumType,您可以永久存储枚举定义在模型数据字典。金宝app模型与字典可以使用枚举。有关更多信息,请参见枚举的数据字典

模拟与枚举

考虑下面的枚举类定义BasicColors用枚举值红色的,黄色的,蓝色的,蓝色的默认值:

classdef BasicColors <仿金宝app真软件。IntEnumType枚举红色(0)黄色(1)蓝色(2)结束方法(Static) function retVal = getDefaultValue() retVal = BasicColors.Blue; end end end

已知MATLAB这类定义之后,您可以使用枚举在仿真软件和Stateflow金宝app®模型。具体信息在Stateflow出现在枚举枚举数据(Stateflow)。以下仿真软件模型使用上面定义金宝app的枚举:

的输出模式是这样的:

数据类型转换OrigToInt指定一个输出数据类型int32整数的舍入模式:地板上,所以块转换正弦波块输出,出现在图的顶部范围显示,一个周期的整数:1,2,1,0,1,2,1。的数据类型转换IntToColor使用这些值来选择颜色从枚举类型BasicColors通过引用他们的潜在的整数。

结果是一个周期的颜色:黄色的,蓝色的,黄色的,红色的,黄色的,蓝色的,黄色的,见图。的枚举常量EnumConst输出黄色的在第二个图,一条直线。的关系操作符块比较恒定的黄色的循环中的每个值的颜色。它输出1(真正的)当黄色的小于当前颜色,0()否则,第三个图所示。

使用的排序顺序比较底层的整数的数字顺序的值相比,词法顺序枚举值出现在枚举类定义。在这个例子中两个订单是一样的,但是他们不需要。看到指定枚举数据类型枚举值的计算为更多的信息。

指定枚举数据类型

一旦你定义一个枚举,您可以使用它就像任何其他数据类型。因为枚举是一个类,而不是一个实例中,您必须使用前缀?或枚举:当指定枚举数据类型。您必须使用前缀吗?在MATLAB命令窗口。不过,您可以使用前缀在仿真软件模型。金宝app枚举:相同的效果吗吗?前缀,但枚举:是首选的,因为它更不言而喻的上下文中的图形用户界面。

根据上下文,类型枚举:紧随其后的是一个枚举的名字,或选择枚举:<类名>(例如,从一个菜单输出数据类型块参数),和替换<类名>

使用的数据类型的助理,设置模式枚举,然后输入名称的枚举。例如,在前面的模型,数据类型转换IntToColor输出信号的类型BasicColors输出信号如下规范:

你不能设置一个最小或最大信号定义为枚举值,因为最小和最大的概念不相关枚举的目的。如果你改变一个信号的最小值或最大值默认值的枚举[]当你更新模型所示,出现一个错误。看到枚举值的计算为更多的信息。

枚举数据类型信息

的函数枚举金宝appSimulink.data.getEnumTypeInfo返回枚举数据类型信息。

枚举成员的信息

使用的函数枚举:

  • 返回一个数组,其中包含所有枚举值的枚举类MATLAB命令窗口

  • 枚举值以编程方式

  • 提供一块模型参数值,接受一个数组或枚举值向量,如金宝app情况下条件参数切换实例块的

得到关于枚举类的信息

使用的函数金宝appSimulink.data.getEnumTypeInfo返回一个枚举类的信息,如:

  • 默认的枚举成员

  • 头文件的名称,定义了输入生成的代码

  • 生成的代码中使用的数据类型存储枚举成员背后的整数值

枚举值显示

只要有可能,模型显示枚举值的名字,而不金宝app是底层的整数值。但是,底层的整数可以影响值显示范围浮动范围块。

块…… 影响价值显示……
范围 当显示枚举信号,枚举值的名称作为标签出现在Y轴上。的名字出现在订单他们潜在的整数,底部的最小值。
浮动范围 当显示信号相同的枚举,名字出现在Y轴上的范围块。如果浮动范围块显示混合数据类型,没有名字出现,任何潜在的整数枚举值表示。

与非唯一整数枚举值

超过一个值的枚举可以有相同的底层整数值,所述指定枚举数据类型。当这种情况发生时,轴的值范围块输出或在显示块输出总是第一个值中列出的枚举类定义共享底层整数。例如:

虽然枚举常量块输出真正的,两个真正的有相同的底层整数,首先定义在类定义枚举部分。因此,显示块显示。同样,一个范围轴将只显示,从来没有真正的,不管这两个值的输入范围块。

实例化枚举

可以使用枚举之前,您必须实例化它。您可以实例化一个枚举在MATLAB仿真软件模型,或Stateflow图表。金宝app语法是相同的在所有情况下。

实例化中枚举MATLAB

在MATLAB来实例化一个枚举,回车类名称EnumName在MATLAB命令窗口。基本工作空间中创建的实例。例如,如果BasicColors被定义为在创建模型枚举类金宝app你可以输入:

bcy = BasicColors.Yellowbcy= Yellow

为枚举选项卡完成工作。例如,如果你输入:

bcy = BasicColors。<选项卡>

MATLAB显示的元素和方法BasicColors按字母顺序排列:

双击一个元素或方法插入在你按下的位置<选项卡>。看到建议和代码完成为更多的信息。

铸造中枚举MATLAB

在MATLAB中,可以直接从整数转换为一个枚举值:

bcb = BasicColors (2) bcb =蓝色

您还可以从一个枚举值转换为其潜在的整数:

> > bci = int32 (bcb) bci = 2

在这两种情况下,MATLAB返回的结果在1 x1相关数据类型的数组。

尽管铸造是可行的,使用枚举值并不健壮的枚举值的情况下和整数等价物定义一个枚举类可能会改变。

实例化中枚举金宝app(或Stateflow)

实例化一个枚举在仿真软件模型中,您可以输入金宝app类名称EnumName在一个对话框作为一个价值。例如,考虑以下模型:

枚举常量EnumConst输出的枚举值黄色的定义,价值如下:

您可以输入任何有效的MATLAB表达式的求值结果为枚举值,包括数组和工作空间变量。例如,您可以输入BasicColors (1),或者如果你之前执行bcy = BasicColors.Yellow在MATLAB命令窗口中,您可以输入bcy。另外一个例子,您可以输入一个数组,例如[BasicColors。红色的,BasicColors.Yellow,BasicColors.Blue]

您可以使用一个常数块输出枚举值。然而,块显示参数,不适用于枚举类型,如输出最小输出最大

如果您创建了一个金宝appSimulink.Parameter对象作为一个枚举,你必须指定价值枚举成员和参数数据类型枚举:还是?前缀,如解释指定枚举数据类型

不能指定整数枚举成员的值价值参数。看到枚举值的计算为更多的信息。因此,下面的失败虽然的整数值BasicColors.Yellow1

相同的语法和注意事项适用于Stateflow。看到枚举数据(Stateflow)为更多的信息。

枚举值的计算

通过设计,仿真软件可以金宝app防止枚举值被用作数值在数学计算,即使枚举类的一个子类MATLABint32类。因此,枚举类型不作为数值类型,尽管它的存在潜在的整数。例如,您不能直接输入一个枚举信号增益。

您可以使用一个数据类型转换块之间的任意方向转换整数类型和枚举类型,或两个枚举类型。也就是说,您可以使用一个数据类型转换块枚举信号转换为一个整数信号(包括潜在的整数枚举信号的值)和输入的整数信号增益。看到铸造枚举信号为更多的信息。

枚举类型的仿真软件是用来表示程序状态和控金宝app制程序逻辑关系操作符块和数据块开关块。当一个模型块比金宝app较枚举值,比较的值必须相同的枚举类型。块比较基于它们的底层整数枚举值,不是他们的顺序枚举类的定义。

当一块像开关块或多端口开关选择在多个数据块信号,和任何数据枚举类型的信号,信号的所有数据必须相同的枚举类型。当一块输入控制和数据信号,开关和多端口开关一样,控制信号类型不需要匹配数据信号类型。

铸造枚举信号

您可以使用一个数据类型转换块将枚举信号的信号数值类型,提供了底层的整数的枚举值的输入块范围内的数值类型。否则,在模拟过程中出现错误。

类似地,您可以使用一个数据类型转换块任何整数类型的信号转换为一个枚举的信号,提供每一个值的输入数据类型转换块底层整数枚举类型的值。否则,在模拟过程中出现错误。

你不能使用一个数据类型转换块把数字信号非整数数据类型的枚举类型。例如,模型中使用模拟与枚举需要两个数据转换块正弦波转换为枚举值。

第一个块投int32,第二块投int32BasicColors。你不能把一个复杂的信号数据类型的枚举类型不管它的实部和虚部。

铸造枚举块参数

你不能把一块参数数值数据类型的枚举数据类型。例如,假设一个枚举常量块指定一个价值2和一个输出数据类型枚举:BasicColors:

发生错误,因为规范隐式地投下了枚举类型的价值。即使发生错误数值算术上对应的枚举值的枚举类型。

你不能把一块参数的一个枚举到任何其他数据类型。例如,假设一个常数块指定一个恒定值BasicColors.Blue和一个输出数据类型int32

发生错误,因为规范隐式枚举值转换为一个数字类型。发生错误,即使枚举值的底层是一个有效的整数int32

另请参阅

||

相关的话题