我想在 Simulink 的 Matlab 功能块中创建一个全局数组,每次调用 Matlab 功能块时,它的大小都会增加。在 Matlab 功能块中创建全局变量的唯一方法是将其链接到“数据存储内存”块,但这不允许我创建大小增加的数组。
我目前在 Matlab 功能块中使用本地数组,并将数组的内容写入文件,然后退出功能块并在下一次迭代中读取它。但这会减慢执行时间。有没有更好的方法来做到这一点?
我想在 Simulink 的 Matlab 功能块中创建一个全局数组,每次调用 Matlab 功能块时,它的大小都会增加。在 Matlab 功能块中创建全局变量的唯一方法是将其链接到“数据存储内存”块,但这不允许我创建大小增加的数组。
我目前在 Matlab 功能块中使用本地数组,并将数组的内容写入文件,然后退出功能块并在下一次迭代中读取它。但这会减慢执行时间。有没有更好的方法来做到这一点?
您可以在函数中使用持久变量来存储数据。将以下函数varsizeDataStore.m
放在 MATLAB 路径上的文件中:
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
以满足您的需求。它的目的是展示使用持久变量和函数作为一种在不使用全局变量的情况下存储和查询数据的方法的想法。