关于 Simulink 中的数据类型
数据类型是指计算机在内存中表示数字或文本的方式。数据类型决定分配给一个数字或字母的存储空间量、将该数字或字母的值编码为二进制数字模式所使用的方法,以及可对该类型执行的操作。大多数计算机都提供了多种数据类型选择来表示数字,而每一种数据类型在精度、动态范围、性能和内存使用量方面各有优势。为了优化性能,您可以指定 MATLAB® 技术计算环境中使用的变量的数据类型。Simulink® 通过允许您指定 Simulink 信号和模块参数的数据类型来实现这种功能。
在实时控制应用程序中,为模型的信号和模块参数指定数据类型的功能特别有用。例如,它允许 Simulink 模型指定最佳数据类型来表示通过自动代码生成工具(例如 Simulink Coder™ 产品)生成的代码中的信号和模块参数。通过选择最适合模型信号和参数的数据类型,您可以显著提高性能,减小从模型生成的代码的大小。
Simulink 会在仿真之前和仿真过程中执行大量检查,确保您的模型是类型安全的,也就是说,从模型中生成的代码不会上溢或下溢,并因此生成不正确的结果。使用默认数据类型 (double
) 的 Simulink 模型本身是类型安全的。因此,如果您不打算从模型中生成代码或在模型中使用非默认数据类型,则可以跳过本节后面的内容。
不过,如果您打算从模型中生成代码并使用非默认数据类型,则请认真阅读本节后面的内容,尤其是关于数据类型规则的部分(请参阅数据定型指定规范)。这样,您才可以避免引入导致模型无法完全运行或者根本无法仿真的数据类型错误。
数据定型指定规范
遵循以下原则可帮助您创建类型安全的模型,从而不会在执行时出现错误:
信号数据类型通常不影响参数数据类型,反之亦然。
此规则有一个值得注意的例外,即 Constant 模块,它的输出数据类型由其参数的数据类型决定。
如果模块的输出是输入和参数的函数,而输入和参数具有不同的类型,Simulink 将在计算输出之前将参数转换为输入类型。
一般情况下,模块会输出其输入中显示的数据类型。
需要注意的例外有 Constant 模块和 Data Type Conversion 模块,它们的输出数据类型由模块参数决定。
虚拟模块可以接受任何类型的输入信号。
虚拟模块的示例包括 Mux 和 Demux 模块以及无条件执行子系统。
与非虚拟模块的端口连接的信号数组的元素必须具有相同的数据类型。
与非虚拟模块的输入数据端口连接的信号不能具有不同的类型。
控制端口(例如,Enable 和 Trigger 端口)可以接受任何数据类型。
求解器模块仅接受
double
信号。将一条非
double
信号连接到模块将会禁用该模块的过零检测。
数据类型传播
每当您开始仿真、启用端口数据类型显示或刷新端口数据类型显示时,Simulink 都会执行一个处理步骤,此步骤称为数据类型传播。此步骤涉及到确定信号的类型没有指定为其他类型,并检查信号和输入端口的类型,确保它们不存在冲突。如果发生类型冲突,将会显示一个错误对话框,指出数据类型存在冲突的信号和端口。还会突出显示造成类型冲突的信号路径。
注意
要解决类型冲突,您可以在模型中插入类型转换(数据类型转换)模块。有关详细信息,请参阅 Data Type Conversion。
另请参阅
Simulink.AliasType
| Simulink.NumericType