主要内容

全球共享数据

何时需要使用全局数据?

您可能需要将全局数据与MATLAB函数如果:

  • 你有多个MATLAB®使用全局变量并希望从中调用这些函数的函数MATLAB函数阻碍。

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

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

用MATLAB函数块使用全局数据

在仿真金宝app软件®,使用数据存储内存存储全局数据。使用数据存储存储器块或金宝app模拟信号对象。如何存储全局数据取决于全局变量的数量和作用域。有关更多信息,请参见本地和全球数据存储选择如何存储全局数据

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

在Simulink中的MATLAB函数中,全局金宝app声明不会映射到MATLAB全局工作区MATLAB函数块将数据映射到数据存储内存。这种差异允许MATLAB函数中的全局数据与Simulink求解器进行互操作,并在它们被误用时提供诊断。金宝app

全局变量按层次结构解析为模型中具有相同名称的最近的数据存储内存。同一全局变量出现在两个不同的MATLAB函数根据模型的层次结构,块可能解析为不同的数据存储内存。您可以使用此功能来确定数据对子系统的可见性。

如何使用全局与MATLAB函数块

在应用程序中使用全局数据MATLAB函数块,或在此块调用的任何代码中,您必须:

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

  2. 注册一个数据存储存储器块或金宝app模拟信号对象,该对象与全局变量同名MATLAB函数块。

有关更多信息,请参见使用数据存储内存块存储数据使用Simulink存储数据。金宝app信号对象

选择如何存储全局数据

下表总结了是否使用数据存储存储器块或金宝app模拟信号对象。

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

数据存储存储器阻碍。

请注意

使用数据存储存储器块将数据范围限定为模型。

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

金宝app模拟信号在模型工作区中定义的对象。金宝app模拟信号对象具有以下优点:

  • 你不必加无数数据存储存储器块到您的模型。

  • 您可以加载金宝app模拟信号对象从一个mat文件。

使用Simulink存储数据。金宝app信号对象
在多个模型(包括参考模型)之间共享数据。

金宝app模拟信号在基本工作空间中定义的对象

请注意

如果你使用数据存储存储器block以及金宝app模拟信号,请注意使用数据存储存储器块将数据范围限定为模型。

使用Simulink存储数据。金宝app信号对象

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

该模型演示了MATLAB函数块使用存储在数据存储存储器一个

  1. 打开dsm_demo.mdl模型。

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

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

    MATLAB函数块代码声明一个全局变量一个. 块将修改的值一个在每次执行期间。

    作用y = fcn% # codegen全球一个;= + 1;y =;

  3. 确保全局变量已注册到MATLAB函数块。看到定义MATLAB函数块数据

    1. MATLAB函数块编辑器中,选择端口和数据管理器打开“端口和数据管理器”对话框。

    2. 在端口和数据管理器中,选择数据一个在左侧窗格中。该数据使用与全局变量相同的名称。

    3. 范围的值数据存储存储器

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

    当你添加一个数据存储存储器你的模型:

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

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

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

  5. 模拟模型。

    MATLAB函数块读取存储的全局数据的初始值一个并更新的值一个每次执行的时候。

使用金宝app模拟信号对象

该模型演示了MATLAB函数块使用存储在金宝app模拟信号对象一个

  1. 打开金宝appsimulink_signal_local模型。

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

    该模型使用金宝app模拟信号对象在模型工作区中。

    请注意

    要使用具有多个模型的全局数据,请创建金宝app模拟信号对象在基本工作区中。

  2. 确保金宝app模拟信号对象添加到模型管理器中。

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

    2. 在模型管理器的左窗格中,选择模型的模型工作区金宝appsimulink_signal_local模型。

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

    3. 点击金宝app模拟信号对象一个

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

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

    另请参阅模型浏览器

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

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

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

  4. 确保金宝app模拟信号对象注册到MATLAB函数块。

    1. MATLAB函数块编辑器中,选择端口和数据管理器打开“端口和数据管理器”对话框。

    2. 在端口和数据管理器中,选择数据一个在左侧窗格中。该数据使用与全局变量相同的名称。

    3. 设置范围的数据数据存储存储器

  5. 模拟模型。

    MATLAB函数块读取存储的全局数据的初始值一个并更新的值一个每次执行的时候。

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

您可以配置模型以提供运行时和编译时诊断,以避免数据存储问题。诊断在配置参数对话框和参数对话框中可用数据存储存储器块。这些诊断可用于数据存储存储器仅限区块,不适用于金宝app模拟信号对象。有关使用数据存储诊断的更多信息,请参阅数据存储诊断

请注意

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

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

没有数据存储存储器块的支持:金宝app

  • MATLAB值类

  • 大小可变的数据

相关的例子

更多关于