exponenta event banner

Протоколирование потока данных на диск

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

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

Чтобы включить потоковую передачу данных на диск для всех моделей, на панели инструментов MATLAB ® щелкните Настройки. На левой панели диалогового окна «Установки» выберите «Simscape», затем установите флажок «Поток данных во временную дисковую папку ».

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

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

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

  • Параметры конфигурации Limit data points и Data history (последние N шагов) игнорируются. Однако для ограничения количества зарегистрированных точек данных можно использовать параметр «Прореживание». Дополнительные сведения см. в разделе Параметры ведения журнала данных.

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

Потоковая передача на диск и 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 при потоковой передаче записанных данных моделирования на диск.

Перед запуском сценария убедитесь, что потоковая передача на диск включена: откройте диалоговое окно «Установки», выберите «Simscape», а затем установите флажок «Поток данных на временный диск».

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
 

Связанные темы