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

Когда этот выбор включён, данные моделирования, в форме simlog объект, сгенерированный во время симуляции, хранится в файле MLDATX во временной папке под вашим именем пользователя. Переменная рабочей области типа simscape.logging.Node, названный как заданный параметром конфигурации Workspace variable name, создается, но вместо хранения всех данных моделирования он ссылается на simlog объект во временном файле. Временный файл сохраняется до тех пор, пока в рабочей области есть имя переменной регистрации, которая ссылается на него.
Вы просматриваете и анализируете записанные данные моделирования путем доступа к переменной журнала симуляции, точно так же, как если бы данные моделирования хранились в ней. Все взаимодействие между переменной рабочей области и хранимым объектом происходит за кадром. Поэтому можно использовать Simscape™ Results Explorer, а также все методы, связанные с simscape.logging.Node и simscape.logging.Series классы для запроса, построения и анализа записанных данных моделирования.
При потоковой передаче данных на диск применяются следующие ограничения:
Limit data points и Data history (last N steps) параметров конфигурации игнорируются. Однако можно использовать параметр Decimation, чтобы ограничить количество записанных точек данных. Для получения дополнительной информации см. раздел «Опции ведения журнала данных».
Когда вы останавливаете симуляцию модели и шагаете назад, а затем вперед, все время точек регистрируются на диске. Это отличается от хранения данных непосредственно в переменной рабочей области, где данные журнала откатываются в этом случае.
parfor ЦиклЕсли у вас есть лицензия Parallel Computing Toolbox™, то, когда вы симулируете модель внутри parfor цикл, временный файл MLDATX генерируется в адресном пространстве рабочих потоков. Для доступа к данным моделирования за пределами 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) '.mldatx'];
simscape.logging.export(simOut.get('simlog'), file);
end
% import the exported files
var = simscape.logging.import('fileName_1.mldatx');
...
parsimЕсли у вас есть лицензия Parallel Computing Toolbox, симулируйте модель с parsim команда обеспечивает дополнительные функциональные возможности по сравнению с использованием parfor цикл. В следующем примере показано, как вы можете использовать parsim команда при потоковой передаче записанных данных моделирования на диск.
Перед запуском скрипта убедитесь, что потоковая передача на диск включена: откройте диалоговое окно Preferences, выберите Simscape, затем установите флажок Stream data to temporary disk directory.
model = 'ssc_dcmotor';
% Create array of inputs to run multiple simulations
num = 10;
in(1:num) = Simulink.SimulationInput(model);
% Specify any directory where the MLDATX files will be created for every run
logDir=fullfile(cd, 'tmp'); % current directory
mkdir(logDir)
for i = 1:num
% This will only work with local pools
in(i).PostSimFcn = @(x) locHandleSimscapeLTF(model, x, logDir, i);
end
out = parsim(in);
for idx = 1:numel(out)
simlog = simscape.logging.import(out(idx).SimscapeFileName);
sscexplore(simlog);
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 .mldatx extension
filename = [model '_simlog_file_' num2str(runId) '.mldatx'];
simscapeFileName = fullfile(dirName, filename);
% Export simlog to MLDATX file
simscape.logging.export(loggedData, simscapeFileName);
newOut.SimscapeFileName = simscapeFileName;
else
newOut.(loggedVars{i}) = out.(loggedVars{i});
end
end
end