指定 Stateflow 数据的类型
数据类型一词指的是计算机在内存中表示信息的方式。数据类型决定分配给该数据的存储空间量、将数据值编码为二进制数字模式的方法,以及可对该数据执行的操作。
使用数据类型助手指定数据类型
您可以在属性检查器或模型资源管理器中指定数据对象的类型。在类型字段中,从下拉列表中选择一种类型,或输入一个计算结果为数据类型的表达式。有关详细信息,请参阅设置数据属性。
或者,使用数据类型助手指定数据模式,并基于该模式选择数据类型:
在模型资源管理器中,在数据窗格上,点击显示数据类型助手按钮 。
从下拉列表中选择一种模式。可用模式的列表取决于数据对象的作用域。
作用域 模式 局部 继承(仅在使用 MATLAB® 作为动作语言的图中可用)、内置、定点、枚举、总线对线、表达式 常量 内置、定点、不打算 参数 继承、内置、定点、枚举、总线对线、表达式 输入 继承、内置、定点、枚举、总线对线、表达式 输出 继承、内置、定点、枚举、总线对线、表达式 数据存储内存 继承 根据模式指定其他信息。数据类型助手根据您的指定填充类型字段。
模式 数据类型 继承 您无法指定数据类型。根据为数据对象选择的作用域继承数据类型:
对于使用 MATLAB 作为动作语言的图,如果作用域为局部,则数据从 Stateflow 图中 MATLAB 代码的上下文推断其类型。
如果作用域是参数,数据将从关联的参数继承其类型,您可以在 Simulink® 模型中或 MATLAB 基础工作区中定义该参数。请参阅与 Simulink 和 MATLAB 工作区共享参数。
如果作用域是输入,数据将从指定输入端口上的 Simulink 输入信号继承其类型。请参阅与 Simulink 共享输入和输出数据。
如果作用域是输出,数据将从指定输出端口上的 Simulink 输出信号继承其类型。请参阅与 Simulink 共享输入和输出数据。
注意
避免从输出信号继承数据类型。请参阅避免从 Simulink 模块继承输出数据属性。
如果作用域为数据存储内存,则数据从数据对象绑定到的 Simulink 数据存储继承其类型。请参阅Access Data Store Memory from a Chart。
有关详细信息,请参阅从 Simulink 对象继承数据类型。
内置 从支持的数据类型的下拉列表中指定数据类型:
双精度:64 位双精度浮点。
单精度:32 位单精度浮点。
半精度:半精度数据类型占用 16 位内存,但其浮点表示使其能够处理比相同大小的整数或定点数据类型更宽的动态范围。请参阅The Half-Precision Data Type in Simulink (Fixed-Point Designer)。
int64:64 位有符号整数。
int32:32 位有符号整数。
int16:16 位有符号整数。
int8:8 位有符号整数。
uint64:64 位无符号整数。
uint32:32 位无符号整数。
uint16:16 位无符号整数。
uint8:8 位无符号整数。
boolean:布尔值(1 =
true
;0 =false
)。ml:使用 MATLAB 数组 mxArray 在内部定型。仅在使用 C 语言作为动作语言的图中受支持。ml 数据类型为 Stateflow 数据提供了 MATLAB 环境的优势,包括能够将 Stateflow 数据对象赋给 MATLAB 变量或将其作为参量传递给 MATLAB 函数。ml 数据的作用域不能超出 Stateflow 层次结构。也就是说,它的作用域不能是输入或输出。有关详细信息,请参阅ml Data Type。
字符串:字符串。有关详细信息,请参阅Manage Textual Information by Using Strings。
定点 为定点数据指定以下信息:
符号性:数据是有符号数据还是无符号数据
字长:存储量化整数的字的位大小。较大的字长代表较大的值,其精度也高于较小的字长。默认值为 16。
定标:定点数据的定标方法,以避免发生溢出情况并最大限度地减少量化错误。默认定标方法是二进制小数点。
有关详细信息,请参阅 定点数据属性。
枚举 指定枚举数据类型的类名称。有关详细信息,请参阅定义枚举数据类型。
总线对象 指定要与 Stateflow® 总线对象结构体关联的
Simulink.Bus
对象的名称。点击编辑以在类型编辑器中创建或编辑总线对象。也可以从 Simulink 信号继承总线对象属性。表达式 指定一个计算结果为数据类型的表达式。使用以下表达式之一:
调用
fixdt
(Simulink) 函数来创建描述定点或浮点数据类型的Simulink.NumericType
(Simulink) 对象。请参阅Specify Fixed-Point Data。调用
type
运算符来指定之前所定义数据的类型。请参阅从其他数据对象派生数据类型。在 MATLAB 基础工作区中定义数据类型别名的
Simulink.AliasType
(Simulink) 对象。请参阅使用 Simulink 别名指定数据类型。
有关详细信息,请参阅使用 MATLAB 表达式指定数据属性。
要保存数据类型设置,请点击应用。
只能通过模型资源管理器使用数据类型助手。
从 Simulink 对象继承数据类型
当选择继承:与 Simulink 相同(从类型下拉列表中选择)时,作用域为输入、输出、参数和数据存储内存的数据对象从 Simulink 对象继承其数据类型。
作用域 | 描述 |
---|---|
输入 | 从连接至图中对应输入端口的 Simulink 输入信号继承类型。 |
输出 | 从连接至图中相应输出端口的 Simulink 输出信号继承类型。 避免从输出信号继承数据类型。从 Simulink 模块反向传播的值可能是不可预测的。 |
参数 | 从对应的 MATLAB 基础工作区变量、Simulink 数据字典条目或封装子系统中的 Simulink 参数继承类型。 |
数据存储内存 | 从对应的 Simulink 数据存储中继承类型。 |
要确定对象继承的数据类型,请执行以下操作:
编译 Simulink 模型。
打开模型资源管理器。
在内容窗格中,检查 CompiledType 列。
从其他数据对象派生数据类型
您可以使用 type
运算符从其他 Stateflow 数据对象中派生数据类型。例如,模型 sf_bus_demo
使用输入结构体 inbus
的数据类型,通过使用以下表达式来定义局部结构体 counterbus_struct
的数据类型:
type(inbus)
由于 inbus
从 Simulink.Bus
对象 COUNTERBUS
派生其类型,counterbus_struct
也从 COUNTERBUS
派生其数据类型。在编译模型后,模型资源管理器的 CompiledType 列会显示编译后的仿真应用程序中所使用的类型。
有关此示例的详细信息,请参阅在 Stateflow 图中集成自定义结构体。
使用 Simulink 别名指定数据类型
可以通过使用 Simulink 数据类型别名来指定 Stateflow 数据的类型。有关详细信息,请参阅 Simulink.AliasType
(Simulink)。
例如,假设您要定义一个数据类型别名 MyFloat
,它对应于内置数据类型 single
。在 MATLAB 命令提示符处,输入:
MyFloat = Simulink.AliasType;
MyFloat.BaseType = "single";
要使用此别名指定数据对象的类型,请在属性检查器或模型资源管理器中选择对象。在类型字段中,输入别名 MyFloat
。
构建好模型后,模型资源管理器的 CompiledType 列会显示编译后的仿真应用程序中所使用的类型。
注意
如果其中一个数据使用别名类型并且大小可变,则 Stateflow 模块不支持代码生成。此限制不适用于图级别的输入、输出或局部数据。有关定义可变大小数据的详细信息,请参阅Declare Variable-Size Data in Stateflow Charts。
另请参阅
fixdt
(Simulink) | Simulink.AliasType
(Simulink) | Simulink.NumericType
(Simulink)
相关主题
- 设置数据属性
- 关于 Simulink 中的数据类型 (Simulink)