计算中的枚举值
按照设计,Simulink 不允许在数学计算中将枚举值作为数值使用,即使枚举类是 MATLAB int32 类的子类也是如此。因此,尽管枚举类型存在基础整数,也不能作为数值类型使用。例如,您不能直接为 Gain 模块输入枚举信号。
您可以使用 Data Type Conversion 模块在整数类型和枚举类型之间进行双向转换,或在两个枚举类型之间进行转换。也就是说,您可以使用 Data Type Conversion 模块将枚举信号转换为整数信号(包含枚举信号值的基础整数),并将生成的整数信号输入给 Gain 模块。有关详细信息,请参阅 转换枚举信号。
Simulink 中的枚举类型用来表示模块(如 Relational Operator 模块和 Switch 模块)中的程序状态和控制程序逻辑。当 Simulink 模块比较枚举值时,比较的值必须具有相同的枚举类型。模块将基于枚举值的基础整数(而不是它们在枚举类定义中的顺序)对枚举值进行比较。
当一个模块(如 Switch 模块或 Multiport Switch 模块)从多个数据信号中进行选择时,只要有任一数据信号是枚举类型,则所有数据信号都必须具有与之相同的枚举类型。当一个模块同时输入控制信号和数据信号时,就像 Switch 和 Multiport Switch 一样,则控制信号类型不需要与数据信号类型匹配。转换枚举信号
您可以使用 Data Type Conversion 模块将枚举信号转换为任何数值类型的信号,前提是输入到该模块的所有枚举值的基础整数都在该数值类型的范围内。否则,仿真过程中将发生错误。
同样,可以使用 Data Type Conversion 模块将任何整数类型的信号转换为枚举信号,前提是输入到 Data Type Conversion 模块的每个值都是枚举类型中某个值的基础整数。否则,仿真过程中将发生错误。
不能使用 Data Type Conversion 模块将任何非整数数据类型的数值信号转换为枚举类型。例如,使用枚举进行仿真中使用的模型需要两个 Data Conversion 模块将正弦波转换为枚举值。
第一个模块将 double 转换为 int32,第二个模块将 int32 转换为 BasicColors。对于复信号,不管其实部和虚部的数据类型是什么,都不能转换为枚举类型。转换枚举模块参数
您不能将任何数值数据类型的模块参数转换为枚举数据类型。例如,假设 Enumerated
Constant 模块将 Value 指定为 2,并将 Output data type 指定为 Enum:
BasicColors:
这种情况下将会发生错误,因为该指定将 double 值隐式转换为枚举类型。即使该数值从算术意义上对应于枚举类型中的某个枚举值,也会发生错误。
您不能将枚举类型的模块参数转换为其他任何数据类型。例如,假设 Constant 模块将 Constant value 指定为 BasicColors.Blue,并将 Output data type 指定为 int32。
这种情况下将会发生错误,因为该指定将枚举值隐式转换为数值类型。即使枚举值的基础整数是有效的 int32,也会发生错误。