指定 MATLAB Function 模块中变量的数据类型
当您在 MATLAB Function 模块中创建与模型数据对接的变量时,您可以通过指定类型属性来定义数据类型。默认情况下,MATLAB Function 模块变量继承其数据类型。您也可以将类型设置为内置类型、定点类型、枚举类型、非虚拟总线或计算结果为类型的表达式。
有关创建与模型对接的变量的详细信息,请参阅Create MATLAB Function Block Variables。
指定变量数据类型
您可以使用符号窗格和属性检查器 (自 R2022a 起)或模型资源管理器来指定数据类型。
要使用符号窗格和属性检查器指定数据类型,请执行以下操作:
双击 MATLAB Function 模块以打开 MATLAB Function 模块编辑器。

在函数选项卡中,点击编辑数据。

在符号窗格中,选择变量。
在属性检查器的属性选项卡中,从类型属性中选择数据类型。
要使用模型资源管理器指定数据类型,请执行以下操作:
打开模型资源管理器。在建模选项卡的设计部分中,点击模型资源管理器。
在模型层次结构窗格中,选择 MATLAB Function 模块。
点击要修改的变量。
从类型属性中选择数据类型。在模型资源管理器中,您还可以过滤数据类型选项。在常规选项卡中,点击“显示数据类型助手”按钮
以显示数据类型助手属性。然后从模式属性中选择一个选项。
您可以根据以下各组指定这些数据类型:
| 数据类型组 | 描述 |
|---|---|
| 继承的数据类型 | 变量继承数据类型。 |
| 内置数据类型 | 从内置数据类型列表中进行选择。 |
| 定点数据类型 | 指定定点数据类型和变量属性。 |
| 枚举数据类型 | 将一个枚举值指定为数据类型。 |
| 结构体数据类型 | 将一个结构体指定为数据类型。 |
| 定义数据类型的表达式 | 输入一个计算结果为数据类型的表达式。 |
继承的数据类型
MATLAB Function 模块变量可以从其连接的信号继承其数据类型,包括定点类型。要将一个变量设置为继承其数据类型,请将类型属性设置为继承:与 Simulink 相同,即可指定继承。
继承的数据取决于作用域属性:
如果作用域为输入,则从指定端口的输入信号继承数据类型。
如果作用域为输出,则从指定端口的输出信号继承数据类型。
如果作用域为参数,则从关联的参数(可在 Simulink® 封装子系统或 MATLAB® 工作区中定义)继承数据类型。
参量也可以从与之相连的信号中继承复/实性。要继承复/实性,请将复/实性属性设置为继承。
在编译模型后,模型资源管理器的 CompiledType 列给出从 Simulink 继承的实际类型。如果预期类型与推断类型匹配,则继承成功。
内置数据类型
MATLAB Function 模块支持多种内置数据类型。要将一个变量设置为内置数据类型,请将类型属性设置为以下选项之一:
| 数据类型 | 描述 |
|---|---|
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 | 布尔 |
字符串 | 字符串标量 |
在模型资源管理器中,当您展开数据类型助手并将模式设置为内置时,您就可以将类型设置为以下内置数据类型。
定点数据类型
要在 MATLAB Function 模块中将变量表示为定点数,您必须有 Fixed-Point Designer™。要将一个变量设置为定点数据类型,请将类型属性设置为 fixdt(1,16,0) 或 fixdt(1,16,2^0,0)。
设置类型属性后,您可以在模型资源管理器中设置以下定点属性:
符号性
选择您希望定点变量的类型为有符号还是无符号。有符号变量可以表示正量和负量。无符号变量仅表示正值。默认值为有符号。
字长
指定用来存储量化整数的字的大小(以位为单位)。字长越大,可表示的数量越大,精度也更高。字长可以是 0 到 65,535 位之间的任何整数。默认值为 16。
定标
指定定点变量的定标方法,以避免发生溢出情况并最大限度地减少量化问题。您可以选择以下定标模式:
| 定标模式 | 描述 |
|---|---|
| 二进制小数点(默认值) | 数据类型助手显示小数长度属性,该参数指定二进制小数点的位置。 二进制小数点可以是正整数或负整数。正整数将二进制小数点从最右侧位左移指定位数。例如,如果输入 2,则将二进制小数点设置在从右侧数第二个位的前面。负整数将二进制小数点从最右侧位右移指定位数,如以下示例所示:
默认值为 |
| 斜率和偏置 | 数据类型助手显示斜率和偏置参数:
您可以通过表达式的形式输入斜率和偏置,在表达式中包含在 MATLAB 工作区中定义的参数。 |
注意
尽可能使用二进制小数点定标,以简化定点数在生成的代码中的实现。采用二进制小数点定标的定点数运算只需进行简单的移位,不需要为单独的斜率和偏置值执行代价高昂的代码实现。
数据类型覆盖
指定数据类型覆盖设置是 Inherit 还是 Off。有关详细信息,请参阅 Data Type Override with MATLAB Function Block (Fixed-Point Designer)。
计算最佳精度定标
让 Simulink 根据您指定的最小值和最大值属性,自动计算二进制小数点和斜率和偏置定标的最佳精度值。
要自动计算最佳精度定标值,请执行以下操作:
指定最小值或最大值属性。
点击计算最佳精度定标。
Simulink 计算定标值,然后将其显示在小数长度或者斜率和偏置字段中。
注意
最小值和最大值属性不适用于作用域属性设置为常量或参数的变量。软件不能为这些类型的变量计算最佳精度定标。
定点详细信息
显示在数据类型助手中定义的定点变量的相关信息:
Minimum和Maximum显示的值与您在最小值和最大值属性中指定的值相同。Representable minimum、Representable maximum和Precision显示定点变量可以表示的最小值、最大值和精度。

如果在不先编译模型的情况下无法确定某个字段的值,定点详细信息子窗格会将该值显示为 Unknown。如果更改定义定点变量的值,定点详细信息子窗格显示的值不会自动更新。要更新定点详细信息子窗格中显示的值,请点击刷新详细信息。
点击刷新详细信息不会修改变量。它只更改显示。要应用显示的值,请点击应用或确定。
定点详细信息子窗格指示定点变量设定导致的问题。例如,下图显示两个问题。

标签为 Maximum 的行指示由最大值属性指定的值无法由定点变量表示。要更正该问题,请进行以下某项修改,以使定点数据类型能够表示最大值:
减小最大值属性中的值。
增大字长。
减少小数长度。
标签为 Minimum 的行显示消息 Cannot evaluate,因为计算由最小值属性指定的表达式 MySymbol 不会返回数值。如果表达式未计算成功,定点详细信息子窗格会将未计算成功的表达式(视需要截断为 10 个字符)显示在不可用值的位置。要更正此问题,可以在基础工作区中定义 MySymbol 以提供一个数值。
如果点击刷新详细信息,问题指示符和描述将被删除,并且 MySymbol 的值出现在未计算文本的位置。
枚举数据类型
要将一个变量数据类型设置为某个枚举值,请将类型属性设置为 Enum: <class name>。将 <class name> 替换为您在基础工作区中定义的 Simulink.IntEnumType 对象的名称。这些枚举值必须支持代码生成。有关详细信息,请参阅Code Generation for Enumerations。
结构体数据类型
要将一个变量数据类型设置为某个结构体,请将类型属性设置为 Bus: <object name>。将 <class name> 替换为定义 MATLAB 结构体属性的 Simulink.Bus 对象的名称。必须在基础工作区中定义总线对象。有关详细信息,请参阅在 MATLAB Function 模块中创建结构体。
注意
您可以点击编辑按钮,通过使用 Simulink 类型编辑器创建或修改 Simulink.Bus 对象。
定义数据类型的表达式
通过使用模型资源管理器或属性检查器,可以将 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 作为类型属性中的值。

注意
如果其中一个变量使用别名类型并且大小可变,则 MATLAB Function 模块不支持代码生成。此限制不适用于输入或输出变量。有关定义可变大小变量并使用它们生成代码的详细信息,请参阅声明可变大小的 MATLAB Function 模块变量和可变大小数组的代码生成 (MATLAB Coder)。
以编程方式更改变量数据类型
您可以通过检索模块的 Stateflow.EMChart 对象,以编程方式更改 MATLAB Function 模块变量数据类型。有关详细信息,请参阅Configure MATLAB Function Blocks Programmatically。