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

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

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

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

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

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

Похожие темы