Main Content

定义和修改变量数据类型

MATLAB Function 模块中创建变量时,可以使用类型属性来设置数据类型。变量可以继承其数据类型,或设置为内置、定点或枚举数据类型。变量也可以是非虚拟总线。默认情况下,MATLAB Function 模块变量继承其数据类型。

有关创建变量的详细信息,请参阅Create and Define MATLAB Function Block Variables

指定变量数据类型

您可以使用符号窗格和属性检查器 (自 R2022a 起)或模型资源管理器来指定数据类型。

要使用符号窗格和属性检查器指定数据类型,请执行以下操作:

  1. 双击 MATLAB Function 模块以打开 MATLAB Function 模块编辑器

    This image shows the MATLAB Function Block Editor that opens for a new MATLAB Function block. The Function tab is selected in the Simulink Editor.

  2. 函数选项卡中,点击编辑数据

  3. 符号窗格中,选择变量。

  4. 在属性检查器的属性选项卡中,从类型属性中选择数据类型。

要使用模型资源管理器指定变量的数据类型,请执行以下操作:

  1. 打开模型资源管理器。在建模选项卡的设计部分中,点击模型资源管理器

  2. 模型层次结构窗格中,选择 MATLAB Function 模块。

  3. 点击要修改的变量。

  4. 类型属性中选择数据类型。

在模型资源管理器中,您还可以过滤数据类型选项。在常规选项卡中,点击“显示数据类型助手”按钮 以显示数据类型助手参数。然后从模式参数中选择一个选项。根据您选择的模式,指定数据类型:

模式指定的内容
Inherit(默认值)

继承的数据取决于作用域属性:

  • 如果作用域输入,则从指定端口的输入信号继承数据类型。

  • 如果作用域输出,则从指定端口的输出信号继承数据类型。

  • 如果作用域参数,则从关联的参数(可在 Simulink® 封装子系统或 MATLAB® 工作区中定义)继承数据类型。

Built in从内置数据类型列表中进行选择。
Fixed point

指定定点数据属性。

Enumerated输入您在基础工作区中定义的 Simulink.IntEnumType 对象的名称。请参阅Code Generation for Enumerations
Bus Object

总线对象字段中,输入 Simulink.Bus 对象的名称,以定义 MATLAB 结构体的属性。必须在基础工作区中定义总线对象。请参阅在 MATLAB Function 模块中创建结构体

注意

您可以点击编辑按钮,通过使用 Simulink 类型编辑器创建或修改 Simulink.Bus 对象。

Expression输入一个计算结果为数据类型的表达式。

继承数据类型

MATLAB Function 模块变量可以从其连接的信号继承其数据类型,包括定点类型。要使变量继承数据类型,请将类型属性设置为继承: 与 Simulink 相同,即可指定继承。

参量也可以从与之相连的信号中继承复/实性。要继承复/实性,请将复/实性属性设置为继承

在编译模型后,模型资源管理器的 CompiledType 列给出从 Simulink 继承的实际类型。如果预期类型与推断类型匹配,则继承成功。

内置数据类型

在模型资源管理器中,当您展开数据类型助手并将模式设置为内置时,您可以将类型设置为以下内置数据类型。内置数据类型包括:

数据类型描述

double

64 位双精度浮点

single

32 位单精度浮点

half

半精度数据类型占用 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

布尔

字符串

字符串标量

Fixed-Point Designer 数据类型属性

要在 MATLAB Function 模块中将变量表示为定点数,必须安装 Fixed-Point Designer™。

可以设置以下定点属性:

符号性

选择您希望定点变量的类型为有符号还是无符号。有符号变量可以表示正量和负量。无符号变量仅表示正值。默认值为有符号

字长

指定用来存储量化整数的字的大小(以位为单位)。字长越大,可表示的数量越大,精度也更高。字长可以是 0 到 65,535 位之间的任何整数。默认值为 16。

定标

指定定点变量的定标方法,以避免发生溢出情况并最大限度地减少量化问题。您可以选择以下定标模式:

定标模式描述
二进制小数点(默认值)

数据类型助手显示小数长度参数,该参数指定二进制小数点的位置。

二进制小数点可以是正整数或负整数。正整数将二进制小数点从最右侧位左移指定位数。例如,如果输入 2,则将二进制小数点设置在从右侧数第二个位的前面。负整数将二进制小数点从最右侧位右移指定位数,如以下示例所示:

默认值为 0

斜率和偏置

数据类型助手显示斜率偏置参数:

  • 斜率可以是任何正实数。默认值为 1.0

  • 偏置可以是任何实数。默认值为 0.0

您可以通过表达式的形式输入斜率和偏置,在表达式中包含在 MATLAB 工作区中定义的参数。

注意

尽可能使用二进制小数点定标,以简化定点数在生成的代码中的实现。采用二进制小数点定标的定点数运算只需进行简单的位移,不需要为单独的斜率和偏置值执行代价高昂的代码实现。

数据类型覆盖

指定数据类型覆盖设置是 Inherit 还是 Off。有关详细信息,请参阅 Data Type Override with MATLAB Function Block (Fixed-Point Designer)

计算最佳精度定标

让 Simulink 根据您指定的最小值最大值属性,自动计算二进制小数点斜率和偏置定标的最佳精度值。

要自动计算最佳精度定标值,请执行以下操作:

  1. 指定最小值最大值属性。

  2. 点击计算最佳精度定标

Simulink 计算定标值,然后将其显示在小数长度或者斜率偏置字段中。

注意

最小值最大值属性不适用于作用域属性设置为常量参数的变量。软件不能为这些类型的变量计算最佳精度定标。

定点详细信息

显示在数据类型助手中定义的定点变量的相关信息:

  • MinimumMaximum 显示的值与您在最小值最大值属性中指定的值相同。

  • Representable minimumRepresentable maximumPrecision 显示定点变量可以表示的最小值、最大值和精度。

This image shows the fixed-point details for variable named data.

如果在不先编译模型的情况下无法确定某个字段的值,定点详细信息子窗格会将该值显示为 Unknown。如果更改定义定点变量的值,定点详细信息子窗格显示的值不会自动更新。要更新定点详细信息子窗格中显示的值,请点击刷新详细信息

点击刷新详细信息不会修改变量。它只更改显示。要应用显示的值,请点击应用确定

定点详细信息子窗格指示定点变量设定导致的问题。例如,下图显示两个问题。

This image shows the fixed-point details for data named data with two issues.

标签为 Maximum 的行指示由最大值属性指定的值无法由定点变量表示。要更正该问题,请进行以下某项修改,以使定点数据类型能够表示最大值:

  • 减小最大值属性中的值。

  • 增大字长

  • 减少小数长度

标签为 Minimum 的行显示消息 Cannot evaluate,因为计算由最小值属性指定的表达式 MySymbol 不会返回数值。如果表达式未计算成功,定点详细信息子窗格会将未计算成功的表达式(视需要截断为 10 个字符)显示在不可用值的位置。要更正此问题,可以在基础工作区中定义 MySymbol 以提供一个数值。

如果点击刷新详细信息,问题指示符和描述将被删除,并且 MySymbol 的值出现在未计算文本的位置。

用表达式指定数据类型

通过使用模型资源管理器或属性检查器,可以将 MATLAB Function 模块变量的类型指定为表达式。

要使用模型资源管理器,请将模型属性设置为 Expression。在类型属性中,将 <data type expression> 替换为计算结果为数据类型的表达式。

要使用属性检查器,请双击类型属性,清除内容,然后输入表达式。

您可以使用以下表达式:

  • MATLAB 工作区中的别名类型,如 Simulink.AliasType 中所述。

  • fixdt 函数,用于创建描述定点或浮点数据类型的 Simulink.NumericType 对象。

  • type (Stateflow) 操作符,使类型基于以前定义的数据。

例如,假设您要将工作区变量 myDataType 指定为 single 数据类型的别名,以用作 MATLAB Function 模块输入变量的类型属性中的表达式。通过输入以下命令创建 Simulink.AliasType 类的实例并设置其 BaseType 属性:

myDataType = Simulink.AliasType;
myDataType.BaseType = "single";

在属性检查器中,输入数据类型别名 myDataType 作为类型属性中的值。

This image shows the property inspector after entering the expression for the data type.

注意

如果其中一个变量使用别名类型并且大小可变,则 MATLAB Function 模块不支持代码生成。此限制不适用于输入或输出变量。有关定义可变大小变量并使用它们生成代码的详细信息,请参阅声明可变大小的 MATLAB Function 模块变量可变大小数组的代码生成

以编程方式更改变量数据类型

您可以通过检索模块的 Stateflow.EMChart 对象,以编程方式更改 MATLAB Function 模块变量数据类型。有关详细信息,请参阅Configure MATLAB Function Blocks Programmatically

另请参阅

相关主题