主要内容

全球共享数据

什么时候需要使用全局数据?

可能需要使用全局数据MATLAB函数块如果:

  • 你有多个MATLAB®使用全局变量的函数,你想调用这些函数MATLAB函数块。

  • 您有一个使用大量全局数据的现有模型,您正在添加一个MATLAB函数块到此模型,您希望避免使用额外的输入和输出使模型混乱。

  • 您希望将数据的可见性限定到模型的各个部分。

用MATLAB函数块使用全局数据

在仿真万博1manbetx软件®,使用数据存储内存存储全局数据。可以使用任意一种方法实现数据存储内存数据存储内存块或万博1manbetx仿真软件。信号对象。如何存储全局数据取决于全局变量的数量和范围。有关更多信息,请参见本地和全局数据存储而且选择如何存储全局数据

如何MATLAB全局变量与数据存储内存有关

在Simulink中的MATLAB函数中,全局万博1manbetx声明没有映射到MATLAB全局工作区。方法注册全局数据MATLAB函数块将数据映射到数据存储内存。这种差异允许MATLAB函数中的全局数据与Simulink求解器互操作,并在它们被误用时提供诊断。万博1manbetx

全局变量按层次结构解析到模型中名称相同的最近的数据存储内存。同一个全局变量出现在两个不同的MATLAB函数块可能解析到不同的数据存储内存,这取决于模型的层次结构。您可以使用此功能将数据的可见性限定到子系统。

如何在MATLAB函数块中使用全局函数

使用全局数据MATLAB函数块,或者在该块调用的任何代码中,你必须:

  1. 声明一个全局变量MATLAB函数类调用的任何代码中MATLAB函数块。

  2. 注册一个数据存储内存块或万博1manbetx仿真软件。信号对象,该对象的名称与全局变量同名MATLAB函数块。

有关更多信息,请参见使用数据存储内存块存储数据而且使用Simulink存储数据。万博1manbetx信号对象

选择如何存储全局数据

下表总结了是否使用数据存储内存块或万博1manbetx仿真软件。信号对象。

如果你想: 使用: 欲了解更多信息:
在不使用模型引用的单个模型中使用少量全局变量。

数据存储内存块。

请注意

使用数据存储内存块将数据范围限定在模型中。

使用数据存储内存块存储数据
在一个不使用模型引用的模型中使用大量的全局变量。

万博1manbetx仿真软件。信号在模型工作区中定义的对象。万博1manbetx仿真软件。信号对象提供了以下优点:

  • 你不需要加上无数数据存储内存块到您的模型。

  • 您可以加载万博1manbetx仿真软件。信号对象从一个mat文件。

使用Simulink存储数据。万博1manbetx信号对象
在多个模型(包括引用的模型)之间共享数据。

万博1manbetx仿真软件。信号在基本工作区中定义的对象

请注意

如果你使用数据存储内存block和万博1manbetx仿真软件。信号,注意使用数据存储内存块将数据范围限定在模型中。

使用Simulink存储数据。万博1manbetx信号对象

使用数据存储内存块存储数据

这个模型演示了aMATLAB函数块中存储的全局数据数据存储内存一个

  1. 打开dsm_demo.mdl模型。

    这个图像显示了一个MATLAB函数块设置为输出到显示块。该块使用存储在数据存储内存块中的全局数据。

  2. 双击MATLAB函数块来打开MATLAB函数块编辑器

    MATLAB函数块代码声明一个全局变量一个.的值一个在每次执行过程中。

    函数Y = FCN% # codegen全球一个;A = A+1;y = A;

  3. 控件注册了全局变量MATLAB函数块。看到创建和定义MATLAB函数块变量

    1. 建模选项卡,在设计部分中,点击符号面板

    2. 符号窗格中,选择数据一个.该数据使用与全局变量相同的名称。右键单击并选择检查……打开属性检查器。

    3. 在属性检查器中,范围的值设置为数据存储内存

  4. 双击数据存储内存一个.在“块参数”对话框中,可以看到数据存储名称一个匹配全局变量名。该块的初始值为25

    当你添加一个数据存储内存对您的模型:

    1. 设置数据存储名称来匹配全局变量的名称MATLAB函数块代码。

    2. 数据类型到显式数据类型。数据类型不能为汽车

    3. 设置信号类型并指定初始值

  5. 模拟模型。

    MATLAB函数块读取存储在中的全局数据的初始值一个的值一个每次执行时。

使用万博1manbetx仿真软件。信号对象

这个模型演示了aMATLAB函数块中存储的全局数据万博1manbetx仿真软件。信号对象一个

  1. 打开万博1manbetxsimulink_signal_local模型。

    这个图像显示了一个MATLAB函数块设置为输出到显示块。

    该模型使用万博1manbetx仿真软件。信号对象。

    请注意

    若要对多个模型使用全局数据,请创建万博1manbetx仿真软件。信号对象。

  2. 确保万博1manbetx仿真软件。信号对象被添加到模型资源管理器。

    1. 建模选项卡上,单击模型浏览器

    2. 的模型资源管理器的左窗格中,选择模型工作区万博1manbetxsimulink_signal_local模型。

      内容窗格显示模型工作区中的数据。

    3. 单击万博1manbetx仿真软件。信号对象一个

      在右边的窗格中,确保Model Explorer显示这些属性一个

      属性 价值
      数据类型
      复杂性 真正的
      1
      初始值 5

    另请参阅模型浏览器

  3. 双击MATLAB函数块以打开其编辑器。

    MATLAB函数块修改全局数据的值一个每次执行时。

    函数y = fcn %#codegen global A;A = A+1;y = A;

  4. 确保万博1manbetx仿真软件。信号对象注册到MATLAB函数块。

    1. 建模选项卡,在设计部分中,点击符号面板

    2. 符号窗格中,选择数据一个.该数据使用与全局变量相同的名称。右键单击并选择检查……打开属性检查器。

    3. 在属性检查器中,设置范围的数据数据存储内存

  5. 模拟模型。

    MATLAB函数块读取存储在中的全局数据的初始值一个的值一个每次执行时。

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

您可以配置您的模型,以提供运行时和编译时诊断,以避免数据存储的问题。的“配置参数”对话框和“参数”对话框中可提供诊断数据存储内存块。这些诊断可用于数据存储内存Blocks only, not for万博1manbetx仿真软件。信号对象。有关使用数据存储诊断的更多信息,请参见数据存储诊断

请注意

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

在MATLAB函数块中使用共享数据的局限性

没有数据存储内存Block支万博1manbetx持:

  • MATLAB值类

  • 大小可变的数据

相关的话题