Потоковые данные о регистрации к диску

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

Сохранение данных к рабочей области использует память. Потоковая передача записанных данных к диску значительно увеличивает способность регистрации данных, потому что вы больше не ограничиваетесь системной памятью.

Чтобы позволить передать данные потоком к диску для всех моделей, на MATLAB® Toolstrip, нажимают Preferences. На левой панели диалогового окна Preferences выберите Simscape, затем установите флажок Stream data to temporary disk directory.

Когда эта настройка включена, данные моделирования, в форме объекта simlog, сгенерированного во время симуляции, хранятся в файле HDF5 во временной папке под вашим именем пользователя. Переменная рабочей области типа, simscape.logging.Node, названный, как задано параметром конфигурации Workspace variable name, создается, но вместо того, чтобы хранить все данные моделирования это ссылается на объект simlog во временном файле. Временный файл сохраняется, пока существует имя переменной журналирования в рабочей области, которая ссылается на него.

Вы просматриваете и анализируете регистрируемые данные моделирования путем доступа к логарифмической переменной симуляции, точно тот же путь, как будто данные моделирования хранились в нем. Все взаимодействие между переменной рабочей области и хранившим объектом происходит негласно. Поэтому можно использовать Проводник Результатов Simscape™, а также все методы, сопоставленные с simscape.logging.Node и классами simscape.logging.Series, чтобы запросить, построить, и анализировать регистрируемые данные моделирования.

Следующие ограничения применяются при потоковой передаче данных к диску:

  • Limit data points и параметры конфигурации Data history (last N steps) проигнорированы. Однако можно использовать параметр Decimation, чтобы ограничить количество точек записанных данных. Для получения дополнительной информации см. Опции Регистрации данных.

  • Когда вы приостанавливаете симуляцию модели и отступаете и затем передаете, все время точки зарегистрированы диск. Это отличается от того, чтобы хранить данные непосредственно в переменной рабочей области, где данные логов откатываются в этом случае.

Потоковая передача к диску и циклу parfor

Когда вы моделируете модель в цикле parfor, временный файл HDF5 сгенерирован в адресном пространстве рабочих потоков. Чтобы получить доступ к данным моделирования вне цикла parfor, экспортируйте данные и затем импортируйте экспортируемый файл вне цикла parfor.

parfor i=1:2 
   model = 'ssc_dcmotor' 
   load_system(model); 
   set_param(model, 'SimulationMode', 'normal'); 
   set_param(model, 'SimscapeLogType', 'all', 'SimscapeLogName', 'simlog'); 
   simOut = sim(model, 'ReturnWorkspaceOutputs', 'on'); 

   % save to a different file by appending the index 
   file = ['fileName_' num2str(i) '.h5']; 
   simscape.logging.export(simOut.get('simlog'), file); 
end

% import the exported files 
var = simscape.logging.import('fileName_1.h5');
...
 

Потоковая передача к диску с parsim

Симуляция модели с командой parsim обеспечивает дополнительную функциональность, по сравнению с использованием цикла parfor. Следующий пример показывает, как можно использовать команду parsim, когда потоковая передача регистрировала данные моделирования к диску.

model = 'ssc_dcmotor';
% Create array of inputs to run multiple simulations
num = 10;
in(1:num) = Simulink.SimulationInput(model);

% Specify any directory where the H5 files will be created for every run
currDir = '/tmp'; % any directory

for i = 1:num
    % This will only work with local pools
    in(i).PostSimFcn = @(x) locHandleSimscapeLTF(model, x, currDir, i); 
end
out = parsim(in);

for idx = 1:numel(out)
    simlog = simscape.logging.import(out(idx).SimscapeFileName);
    sscexplore(name);
end

function newOut = locHandleSimscapeLTF(model, out, dirName, runId)
    % All the logged variables along with simlog should be part of 'newOut' object 
    loggedVars = out.who;
    newOut = struct;
    for i = 1 : numel(loggedVars)
        loggedData = out.(loggedVars{i});
        if isa(loggedData, 'simscape.logging.Node')
		    % Specify any file name with .h5 extension
            filename = [model '_simlog_file_' num2str(runId) '.h5']; 
            simscapeFileName = fullfile(dirName, filename);
			
			% Export simlog to H5 file
            simscape.logging.export(loggedData, simscapeFileName);
            newOut.SimscapeFileName = simscapeFileName;
        else
            newOut.(loggedVars{i}) = out.(loggedVars{i});
        end
    end
end
 

Похожие темы