Main Content

MATLAB Function 模块中使用全局数据

通过在函数代码中定义全局变量,您可以引用 MATLAB Function 模块中全局定义的数据。在以下情况下,请使用全局变量:

  • 您有多个使用全局变量的 MATLAB® 函数,并且您要从 MATLAB Function 模块中调用这些函数。

  • 您将 MATLAB Function 模块添加到使用全局数据的现有模型中,但不希望使用额外的输入和输出使模型变得混乱。

  • 您希望将数据可见性的作用域限定在模型的某些部分。

在 Simulink® 中,您使用 Data Store Memory 模块或 Simulink.Signal 对象来存储全局数据。有关详细信息,请参阅局部和全局数据存储

Data Store Memory 模块中使用全局数据

要使用 Data Store Memory 模块定义全局数据,并在 MATLAB Function 模块中或此模块调用的代码中使用该数据,请执行以下操作:

  1. MATLAB Function 模块或 MATLAB Function 模块调用的代码中声明全局变量。

  2. MATLAB Function 模块中,在符号窗格中添加与全局变量同名的变量。有关如何使用符号窗格在 MATLAB Function 模块中定义变量的详细信息,请参阅Use the Symbols pane

  3. 将变量的作用域属性设置为 Data Store Memory

  4. 在该模型中,创建一个 Data Store Memory 模块。将数据存储名称参数指定为与全局变量相同的名称。

  5. Data Store Memory 中,设置初始值数据类型信号类型参数。数据类型无法继承,信号类型必须为实数或复数。

Data Store Memory 模块会将数据的作用域限定为模型。对于每种全局数据,您必须向模型中添加 Data Store Memory 模块。Data Store Memory 模块不支持 MATLAB 值类或可变大小数据。

Simulink.Signal 对象中使用全局数据

要使用 Simulink.Signal 对象定义全局数据,并在 MATLAB Function 模块或此模块调用的代码中使用该数据,请执行以下操作:

  1. MATLAB Function 模块或 MATLAB Function 模块调用的代码中声明全局变量。

  2. MATLAB Function 模块中,在符号窗格中添加与全局变量同名的变量。有关如何使用符号窗格在 MATLAB Function 模块中定义变量的详细信息,请参阅Use the Symbols pane

  3. 将变量的作用域属性设置为 Data Store Memory

  4. 在模型工作区或基础工作区中,创建一个 Simulink.Signal 对象。将 Simulink.Signal 对象指定给与全局变量同名的变量。

  5. 设置 Simulink.Signal 对象的 DataTypeInitialValueDimensions 属性。数据类型无法继承,信号类型必须为实数或复数。

您可以将 Simulink.Signal 对象的作用域限定为模型或基础工作区。您可以在模型资源管理器中定义 Simulink.Signal 对象,或从 MAT 文件中加载这些对象。

选择如何存储全局数据

如何存储全局数据取决于全局变量的数量和作用域。下表描述何时使用 Data Store Memory 模块或 Simulink.Signal 对象。

如何使用全局数据解决方法
不使用引用模型的单个模型必须定义少量全局变量。

Data Store Memory 模块。

不使用引用模型的单个模型必须定义大量全局变量。

模型工作区中定义的 Simulink.Signal 对象。

您在多个模型(包括引用模型)之间共享全局数据。

在基础工作区中定义的 Simulink.Signal 对象。

从 Data Store Memory 模块中检索数据

此示例说明 MATLAB Function 模块如何使用存储在 Data Store Memory 模块中的全局数据。

查看 Data Store Memory 模块参数

打开 Data Store Memory 模块以查看参数。在常设选项卡上,请注意数据存储名称参数是 A。打开信号属性选项卡。在此示例中,初始值参数为 25数据类型参数为 double,而信号类型参数为实数。

为了在 MATLAB Function 模块中使用全局数据,您不能将这些参数设置为“自动”或“继承”。

检查 MATLAB Function 模块

打开 MATLAB Function 模块。函数代码声明全局变量 A,该变量与 Data Store Memory 模块的数据存储名称参数的名称匹配。该模块在每次执行时使用以下代码将 1A 相加:

function y = fcn
    global A;
    A = A+1;
    y = A;

确保变量 A 使用该模块中的数据存储内存:

  1. 函数选项卡的准备部分中,点击编辑数据

  2. 符号窗格中,选择变量 A。这些属性显示在属性检查器中。

  3. 请确保作用域属性为 Data Store Memory

对模型进行仿真

运行模型。模块执行发生在每个主时间步。MATLAB Function 模块的最终输出是 76

Simulink.Signal 对象中检索数据示例

此示例说明 MATLAB Function 模块如何使用存储在 Simulink.Signal 对象中的全局数据。

查看 Simulink.Signal 对象属性

查看 Simulink.Signal 对象的属性:

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

  2. 在左窗格中,展开 MLFB_slsignal_model,然后点击模型工作区。中间窗格显示模型工作区中的数据。

  3. 点击 Simulink.Signal 对象 A。模型资源管理器的右窗格显示 A 的属性。在此示例中,数据类型double维度1初始值25,而复/实性为实数。

为了在 MATLAB Function 模块中使用全局数据,您不能将这些属性设置为自动继承

检查 MATLAB Function 模块

打开 MATLAB Function 模块。函数代码声明全局变量 A,该变量与 Data Store Memory 模块的数据存储名称参数的名称匹配。该模块在每次执行时使用以下代码将 1A 相加:

function y = fcn
    global A;
    A = A+1;
    y = A;

确保变量 A 使用对象中的数据存储内存:

  1. 函数选项卡的准备部分中,点击编辑数据

  2. 符号窗格中,选择变量 A。这些属性显示在属性检查器中。

  3. 请确保作用域属性为 Data Store Memory

对模型进行仿真

运行模型。模块执行发生在每个主时间步。MATLAB Function 模块的最终输出是 76

使用数据存储诊断检测内存访问问题

如果使用 Data Store Memory 模块,则可以通过配置模型来提供运行时和编译时诊断,从而避免出现数据存储问题。“配置参数”窗口和“参数”窗口显示 Data Store Memory 模块的诊断信息。有关使用数据存储诊断的详细信息,请参阅数据存储诊断

注意

如果您向函数传递数据存储内存数组,A = foo(A) 这样的优化可能会导致代码生成软件将整个数组内容都标记为已读或已写,即使只访问了一些元素。

另请参阅

模块

对象

相关主题