定义和修改变量数据类型
在 MATLAB Function 模块中创建变量时,可以使用类型属性来设置数据类型。变量可以继承其数据类型,或设置为内置、定点或枚举数据类型。变量也可以是非虚拟总线。默认情况下,MATLAB Function 模块变量继承其数据类型。
有关创建变量的详细信息,请参阅Create and Define MATLAB Function Block Variables。
指定变量数据类型
您可以使用符号窗格和属性检查器 (自 R2022a 起)或模型资源管理器来指定数据类型。
要使用符号窗格和属性检查器指定数据类型,请执行以下操作:
双击 MATLAB Function 模块以打开 MATLAB Function 模块编辑器。
在函数选项卡中,点击编辑数据。
在符号窗格中,选择变量。
在属性检查器的属性选项卡中,从类型属性中选择数据类型。
要使用模型资源管理器指定变量的数据类型,请执行以下操作:
打开模型资源管理器。在建模选项卡的设计部分中,点击模型资源管理器。
在模型层次结构窗格中,选择 MATLAB Function 模块。
点击要修改的变量。
从类型属性中选择数据类型。
在模型资源管理器中,您还可以过滤数据类型选项。在常规选项卡中,点击“显示数据类型助手”按钮 以显示数据类型助手参数。然后从模式参数中选择一个选项。根据您选择的模式,指定数据类型:
模式 | 指定的内容 |
---|---|
Inherit (默认值) | 继承的数据取决于作用域属性:
|
Built in | 从内置数据类型列表中进行选择。 |
Fixed point | 指定定点数据属性。 |
Enumerated | 输入您在基础工作区中定义的 Simulink.IntEnumType 对象的名称。请参阅Code Generation for Enumerations。 |
Bus Object | 在总线对象字段中,输入 注意 您可以点击编辑按钮,通过使用 Simulink 类型编辑器创建或修改
|
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,则将二进制小数点设置在从右侧数第二个位的前面。负整数将二进制小数点从最右侧位右移指定位数,如以下示例所示:
默认值为 |
斜率和偏置 | 数据类型助手显示斜率和偏置参数:
您可以通过表达式的形式输入斜率和偏置,在表达式中包含在 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
的值出现在未计算文本的位置。
用表达式指定数据类型
通过使用模型资源管理器或属性检查器,可以将 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 模块变量和可变大小数组的代码生成。
以编程方式更改变量数据类型
您可以通过检索模块的 Stateflow.EMChart
对象,以编程方式更改 MATLAB Function 模块变量数据类型。有关详细信息,请参阅Configure MATLAB Function Blocks Programmatically。