全球共享数据
什么时候需要使用全局数据?
可能需要使用全局数据MATLAB函数块如果:
你有多个MATLAB®使用全局变量的函数,你想调用这些函数MATLAB函数块。
您有一个使用大量全局数据的现有模型,您正在添加一个MATLAB函数块到此模型,您希望避免使用额外的输入和输出使模型混乱。
您希望将数据的可见性限定到模型的各个部分。
用MATLAB函数块使用全局数据
在仿真万博1manbetx软件®,使用数据存储内存存储全局数据。可以使用任意一种方法实现数据存储内存数据存储内存块或万博1manbetx仿真软件。信号
对象。如何存储全局数据取决于全局变量的数量和范围。有关更多信息,请参见本地和全局数据存储而且选择如何存储全局数据.
如何MATLAB全局变量与数据存储内存有关
在Simulink中的MATLAB函数中,全局万博1manbetx声明没有映射到MATLAB全局工作区。方法注册全局数据MATLAB函数块将数据映射到数据存储内存。这种差异允许MATLAB函数中的全局数据与Simulink求解器互操作,并在它们被误用时提供诊断。万博1manbetx
全局变量按层次结构解析到模型中名称相同的最近的数据存储内存。同一个全局变量出现在两个不同的MATLAB函数块可能解析到不同的数据存储内存,这取决于模型的层次结构。您可以使用此功能将数据的可见性限定到子系统。
如何在MATLAB函数块中使用全局函数
使用全局数据MATLAB函数块,或者在该块调用的任何代码中,你必须:
声明一个全局变量MATLAB函数类调用的任何代码中MATLAB函数块。
注册一个数据存储内存块或
万博1manbetx仿真软件。信号
对象,该对象的名称与全局变量同名MATLAB函数块。
有关更多信息,请参见使用数据存储内存块存储数据而且使用Simulink存储数据。万博1manbetx信号对象.
选择如何存储全局数据
下表总结了是否使用数据存储内存块或万博1manbetx仿真软件。信号
对象。
如果你想: | 使用: | 欲了解更多信息: |
---|---|---|
在不使用模型引用的单个模型中使用少量全局变量。 | 数据存储内存块。 请注意 使用数据存储内存块将数据范围限定在模型中。 |
使用数据存储内存块存储数据 |
在一个不使用模型引用的模型中使用大量的全局变量。 |
|
使用Simulink存储数据。万博1manbetx信号对象 |
在多个模型(包括引用的模型)之间共享数据。 |
请注意 如果你使用数据存储内存block和 |
使用Simulink存储数据。万博1manbetx信号对象 |
使用数据存储内存块存储数据
这个模型演示了aMATLAB函数块中存储的全局数据数据存储内存块一个
.
打开dsm_demo.mdl模型。
双击MATLAB函数块来打开MATLAB函数块编辑器.
的MATLAB函数块代码声明一个全局变量
一个
.的值一个
在每次执行过程中。函数Y = FCN% # codegen全球一个;A = A+1;y = A;
控件注册了全局变量MATLAB函数块。看到创建和定义MATLAB函数块变量.
在建模选项卡,在设计部分中,点击符号面板.
在符号窗格中,选择数据一个.该数据使用与全局变量相同的名称。右键单击并选择
检查……
打开属性检查器。在属性检查器中,范围的值设置为
数据存储内存
.
双击数据存储内存块
一个
.在“块参数”对话框中,可以看到数据存储名称一个
匹配全局变量名。该块的初始值为25
.当你添加一个数据存储内存对您的模型:
设置数据存储名称来匹配全局变量的名称MATLAB函数块代码。
集数据类型到显式数据类型。数据类型不能为
汽车
.设置信号类型并指定初始值.
模拟模型。
的MATLAB函数块读取存储在中的全局数据的初始值
一个
的值一个
每次执行时。
使用万博1manbetx仿真软件。信号
对象
这个模型演示了aMATLAB函数块中存储的全局数据万博1manbetx仿真软件。信号
对象一个
.
打开万博1manbetxsimulink_signal_local模型。
该模型使用
万博1manbetx仿真软件。信号
对象。请注意
若要对多个模型使用全局数据,请创建
万博1manbetx仿真软件。信号
对象。确保
万博1manbetx仿真软件。信号
对象被添加到模型资源管理器。在建模选项卡上,单击模型浏览器.
的模型资源管理器的左窗格中,选择模型工作区
万博1manbetxsimulink_signal_local
模型。的内容窗格显示模型工作区中的数据。
单击
万博1manbetx仿真软件。信号
对象一个
.在右边的窗格中,确保Model Explorer显示这些属性
一个
.属性 价值 数据类型 双
复杂性 真正的
维 1
初始值 5
另请参阅模型浏览器.
双击MATLAB函数块以打开其编辑器。
的MATLAB函数块修改全局数据的值
一个
每次执行时。函数y = fcn %#codegen global A;A = A+1;y = A;
确保
万博1manbetx仿真软件。信号
对象注册到MATLAB函数块。在建模选项卡,在设计部分中,点击符号面板.
在符号窗格中,选择数据一个.该数据使用与全局变量相同的名称。右键单击并选择
检查……
打开属性检查器。在属性检查器中,设置范围的数据
数据存储内存
.
模拟模型。
的MATLAB函数块读取存储在中的全局数据的初始值
一个
的值一个
每次执行时。
使用数据存储诊断来检测内存访问问题
您可以配置您的模型,以提供运行时和编译时诊断,以避免数据存储的问题。的“配置参数”对话框和“参数”对话框中可提供诊断数据存储内存块。这些诊断可用于数据存储内存Blocks only, not for万博1manbetx仿真软件。信号
对象。有关使用数据存储诊断的更多信息,请参见数据存储诊断.
请注意
如果您将数据存储内存数组传递给函数,优化例如= foo ()
可能导致代码生成软件将数组的整个内容标记为已读或已写,即使只访问了一些元素。
在MATLAB函数块中使用共享数据的局限性
没有数据存储内存Block支万博1manbetx持:
MATLAB值类
大小可变的数据