Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

指定 Stateflow 数据的类型

数据类型一词指的是计算机在内存中表示信息的方式。数据类型决定分配给该数据的存储空间量、将数据值编码为二进制数字模式的方法,以及可对该数据执行的操作。

使用数据类型助手指定数据类型

您可以在属性检查器或模型资源管理器中指定数据对象的类型。在类型字段中,从下拉列表中选择一种类型,或输入一个计算结果为数据类型的表达式。有关详细信息,请参阅设置数据属性

或者,使用数据类型助手指定数据模式,并基于该模式选择数据类型:

  1. 在模型资源管理器中,在数据窗格上,点击显示数据类型助手按钮

  2. 从下拉列表中选择一种模式。可用模式的列表取决于数据对象的作用域。

    作用域模式
    局部继承(仅在使用 MATLAB® 作为动作语言的图中可用)、内置定点枚举总线对线表达式
    常量内置定点不打算
    参数继承内置定点枚举总线对线表达式
    输入继承内置定点枚举总线对线表达式
    输出继承内置定点枚举总线对线表达式
    数据存储内存继承

  3. 根据模式指定其他信息。数据类型助手根据您的指定填充类型字段。

    模式数据类型
    继承

    您无法指定数据类型。根据为数据对象选择的作用域继承数据类型:

    有关详细信息,请参阅从 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 信号继承总线对象属性。

    表达式

    指定一个计算结果为数据类型的表达式。使用以下表达式之一:

    有关详细信息,请参阅使用 MATLAB 表达式指定数据属性

  4. 要保存数据类型设置,请点击应用

只能通过模型资源管理器使用数据类型助手。

Simulink 对象继承数据类型

当选择继承:与 Simulink 相同(从类型下拉列表中选择)时,作用域为输入输出参数数据存储内存的数据对象从 Simulink 对象继承其数据类型。

作用域描述
输入从连接至图中对应输入端口的 Simulink 输入信号继承类型。
输出

从连接至图中相应输出端口的 Simulink 输出信号继承类型。

避免从输出信号继承数据类型。从 Simulink 模块反向传播的值可能是不可预测的。

参数从对应的 MATLAB 基础工作区变量或封装子系统中的 Simulink 参数继承类型。
数据存储内存从对应的 Simulink 数据存储中继承类型。

要确定对象继承的数据类型,请执行以下操作:

  1. 编译 Simulink 模型。

  2. 打开模型资源管理器。

  3. 内容窗格中,检查 CompiledType 列。

从其他数据对象派生数据类型

您可以使用 type 运算符从其他 Stateflow 数据对象中派生数据类型。例如,模型 sf_bus_demo 使用输入结构体 inbus 的数据类型,通过使用以下表达式来定义局部结构体 counterbus_struct 的数据类型:

type(inbus)

Model Explorer showing the specification for the data object counterbus_struct.

由于 inbusSimulink.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

另请参阅

(Simulink) | (Simulink) | (Simulink)

相关主题