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