Как создать глобальный массив, который увеличивается в размере в Simulink

Я хотел бы создать глобальный массив в функциональном блоке Matlab в Simulink, который увеличивается в размере каждый раз, когда вызывается функциональный блок Matlab. Единственный подход к созданию глобальных переменных в функциональном блоке Matlab состоит в том, чтобы связать его с блоком «Data Store Memory», но это не позволяет мне создавать массивы, которые увеличиваются в размере.

В настоящее время я использую локальный массив в функциональном блоке Matlab и записываю содержимое массива в файл перед выходом из функционального блока и чтением из него на следующей итерации. Однако это замедляет время выполнения. Есть ли лучший способ сделать это?


person Rakesh    schedule 24.09.2014    source источник


Ответы (1)


Вы можете использовать постоянную переменную в функции для хранения данных. Поместите следующую функцию в файл 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. Чтобы запросить значение, вызовите его без параметров.

Очевидно, вы можете изменить логику invarsizeDataStore в соответствии с вашими потребностями. Его цель — продемонстрировать идею использования постоянной переменной и функции как способа хранения и запроса данных без использования глобальной переменной.

person Ryan Livingston    schedule 25.09.2014