指定 Stateflow 数据的类型
数据类型一词指的是计算机在内存中表示信息的方式。数据类型决定分配给该数据的存储空间量、将数据值编码为二进制数字模式的方法,以及可对该数据执行的操作。
使用数据类型助手指定数据类型
您可以在属性检查器或模型资源管理器中指定数据对象的类型。在类型字段中,从下拉列表中选择一种类型,或输入一个计算结果为数据类型的表达式。有关详细信息,请参阅设置数据属性。
或者,使用数据类型助手指定数据模式,并基于该模式选择数据类型:
在模型资源管理器中,在数据窗格上,点击显示数据类型助手按钮
。
从下拉列表中选择一种模式。可用模式的列表取决于数据对象的作用域。
作用域 模式 “ 局部
”“ 继承
”(仅在使用 MATLAB® 作为动作语言的图中可用)、“内置
”、“定点
”、“枚举
”、“总线对线
”、“表达式
”“ 常量
”“ 内置
”、“定点
”、“不打算
”“ 参数
”“ 继承
”、“内置
”、“定点
”、“枚举
”、“总线对线
”、“表达式
”“ 输入
”“ 继承
”、“内置
”、“定点
”、“枚举
”、“总线对线
”、“表达式
”“ 输出
”“ 继承
”、“内置
”、“定点
”、“枚举
”、“总线对线
”、“表达式
”“ 数据存储内存
”“ 继承
”根据模式指定其他信息。数据类型助手根据您的指定填充类型字段。
模式 数据类型 “ 继承
”您无法指定数据类型。根据为数据对象选择的作用域继承数据类型:
对于使用 MATLAB 作为动作语言的图,如果作用域为“
局部
”,则数据从 Stateflow 图中 MATLAB 代码的上下文推断其类型。如果作用域是“
参数
”,数据将从关联的参数继承其类型,您可以在 Simulink® 模型中或 MATLAB 基础工作区中定义该参数。请参阅Share Parameters with Simulink and the MATLAB Workspace。如果作用域是“
输入
”,数据将从指定输入端口上的 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。
定标:定点数据的定标方法,以避免发生溢出情况并最大限度地减少量化错误。默认定标方法是“
二进制小数点
”。
有关详细信息,请参阅 定点数据属性。
“ 枚举
”指定枚举数据类型的类名称。有关详细信息,请参阅Define Enumerated Data Types。
“ 总线对象
”指定要与 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 模型。
打开模型资源管理器。
在内容窗格中,检查 CompiledType 列。
从其他数据对象派生数据类型
您可以使用 type
运算符从其他 Stateflow 数据对象中派生数据类型。例如,模型 sf_bus_demo
使用输入结构体 inbus
的数据类型,通过使用以下表达式来定义局部结构体 counterbus_struct
的数据类型:
type(inbus)
由于 inbus
从 Simulink.Bus
对象 COUNTERBUS
派生其类型,counterbus_struct
也从 COUNTERBUS
派生其数据类型。在编译模型后,模型资源管理器的 CompiledType 列会显示编译后的仿真应用程序中所使用的类型。
有关此示例的详细信息,请参阅Integrate Custom Structures in Stateflow Charts。
使用 Simulink 别名指定数据类型
可以通过使用 Simulink 数据类型别名来指定 Stateflow 数据的类型。有关详细信息,请参阅 Simulink.AliasType
(Simulink)。
例如,假设您要定义一个数据类型别名 MyFloat
,它对应于内置数据类型 single
。在 MATLAB 命令提示符处,输入:
MyFloat = Simulink.AliasType;
MyFloat.BaseType = "single";
要使用此别名指定数据对象的类型,请在属性检查器或模型资源管理器中选择对象。在类型字段中,输入别名 MyFloat
。
构建好模型后,模型资源管理器的 CompiledType 列会显示编译后的仿真应用程序中所使用的类型。
另请参阅
fixdt
(Simulink) | Simulink.AliasType
(Simulink) | Simulink.NumericType
(Simulink)
相关主题
- 设置数据属性
- 关于 Simulink 中的数据类型 (Simulink)