【问题标题】:How do I create a global Array that increases in size in Simulink如何在 Simulink 中创建一个大小增加的全局数组
【发布时间】:2014-11-18 13:51:58
【问题描述】:
我想在 Simulink 中的 Matlab 功能块内创建一个全局数组,该数组的大小会在每次调用 Matlab 功能块时都会增长。在 Matlab 功能块中创建全局变量的唯一方法是将其链接到“数据存储内存”块,但这不允许我创建大小增加的数组。
我目前在 Matlab 功能块中使用本地数组,并将数组的内容写入文件,然后退出功能块并在下一次迭代中读取它。但这会减慢执行时间。有没有更好的方法呢?
【问题讨论】:
标签:
matlab
simulink
matlab-coder
【解决方案1】:
您可以在函数中使用持久变量来存储数据。将以下函数放在您的 MATLAB 路径上的文件 varsizeDataStore.m 中:
function y = varsizeDataStore(varargin)
%#codegen
% Update the bounds to fit your needs
coder.varsize('p',[1,2000], [0,1]);
persistent p;
if isempty(p)
p = zeros(1,0);
end
if nargin > 0
p = [p, varargin{1}];
end
y = p;
当您想要增加持久变量时,将参数传递给varsizeDataStore。要查询值,请不带参数调用它。
显然,您可以更改varsizeDataStore 中的逻辑以满足您的需要。其目的是展示使用持久变量和函数作为一种在不使用全局变量的情况下存储和查询数据的方法。