В этом примере показано, как использовать Simulink.SimulationData.DatasetRef
объекты и parsim
функционируйте к данным о потоковом вводе из MAT-файла версии 7.3 для параллельных симуляций. Считайте выполнение шагов обрисованным в общих чертах в этом примере, когда входные параметры для вашей симуляции будут слишком большими, чтобы загрузить в память. Например, можно использовать данные, регистрируемые для персистентного устройства хранения данных от одного набора параллельных симуляций, как введено для другого.
Этот пример использует parsim
запускать несколько симуляций модели, с каждой симуляцией с помощью уникальных входных данных. Модель основана на sldemo_suspn_3dof модели, измененной, чтобы использовать блоки Inport в качестве источника для входных параметров вместо блока Signal Editor. Модель симулирует ответ системы подвески к различным дорожным условиям. MAT-файл, используемый в этом примере, содержит несколько Simulink.SimulationData.Dataset
объекты, представляющие различные дорожные условия. Пример использует DatasetRef
объекты передать содержимое потоком целого Dataset
, на который ссылаются, возразите как введенная симуляция.
Можно также передать данные потоком для отдельных сигналов в параллельные симуляции, запущенные с parsim
использование matlab.io.datastore.SimulationDatastore
объекты. Для получения дополнительной информации при создании SimulationDatastore
объекты, смотрите Потоковые Сигналы Индивидуума Использовать Объекты SimulationDatastore.
Загрузите ex_sldemo_suspn_3dof_parsim_stream
модель. Модель получает входные данные через два блока Inport и каждый Dataset
объект, используемый в качестве входа симуляции, содержит два элемента: один для каждого Inport.
mdl = 'ex_sldemo_suspn_3dof_parsim_stream';
open_system(mdl)
Можно использовать Simulink.SimulationData.DatasetRef.getDatasetVariableNames
функция, чтобы оценить содержимое MAT-файла, содержащего входные данные, не загружая данные в память. Функция возвращает массив ячеек, который содержит элементы для имени каждого Simulink.SimulationData.Dataset
переменная файл содержит. Используйте функцию, чтобы получить доступ к именам переменных и определить количество тестов в файле.
varNames = Simulink.SimulationData.DatasetRef.getDatasetVariableNames('suspn_3dof_test_cases.mat');
numTestCases = numel(varNames);
Можно передать данные о тесте потоком в модель с помощью Simulink.SimulationData.DatsetRef
объекты. DatasetRef
ссылки на объект переменная в файле раньше создавала его и загружает переменные данные инкрементно. Создайте DatasetRef
объект для каждого Simulink.SimulationData.Dataset
объект в файле тестов.
for idx1 = 1:numTestCases inputData(idx1) = Simulink.SimulationData.DatasetRef('suspn_3dof_test_cases.mat',... varNames{idx1}); end
Чтобы использовать набор входных параметров теста, как введено для набора параллельных симуляций, создайте массив Simulink.SimulationInput
объекты, которые можно передать parsim
функция. Используйте setExternalInput
функция, чтобы задать Simulink.SimulationData.DatasetRef
объект, соответствующий тесту как данные к потоку как симуляция, вводится.
in(1:numTestCases) = Simulink.SimulationInput(mdl); for idx2 = 1:numTestCases in(idx2) = setExternalInput(in(idx2),inputData(idx2)); end
Используйте parsim
функционируйте, чтобы запустить симуляцию для каждого теста. Когда у вас есть Parallel Computing Toolbox™, parsim
функционируйте параллельные симуляции запусков. Без Parallel Computing Toolbox, parsim
функционируйте запускает симуляции в сериале.
parsim
функция создает пул рабочего на основе настройки Parallel Computing Toolbox. По умолчанию, parsim
использует локальный пул. Если вы используете удаленных рабочих, можно использовать AttachedFiles
пара "имя-значение", чтобы отправить MAT-файл, содержащий входные данные теста каждому рабочему. Когда вы задаете AttachedFiles
пара "имя-значение", parsim
отправляет копию файла каждому рабочему, который может не торопиться для больших файлов. Для потоковой передачи входных данных от большого файла локальные рабочие могут быть быстрее, потому что у рабочих есть доступ к файлу, не создавая и отправляя копии. Когда вы используете удаленных рабочих, рассматриваете хранение MAT-файла в месте, к которому все удаленные рабочие могут получить доступ и создание DatasetRef
объекты, что ссылка, что копия файла.
out = parsim(in);
[23-Dec-2019 13:28:47] Checking for availability of parallel pool... Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 12). [23-Dec-2019 13:29:36] Starting Simulink on parallel workers... [23-Dec-2019 13:30:03] Configuring simulation cache folder on parallel workers... [23-Dec-2019 13:30:04] Loading model on parallel workers... [23-Dec-2019 13:30:24] Running simulations... [23-Dec-2019 13:30:34] Completed 1 of 20 simulation runs [23-Dec-2019 13:30:35] Completed 2 of 20 simulation runs [23-Dec-2019 13:30:35] Completed 3 of 20 simulation runs [23-Dec-2019 13:30:35] Completed 4 of 20 simulation runs [23-Dec-2019 13:30:35] Completed 5 of 20 simulation runs [23-Dec-2019 13:30:35] Completed 6 of 20 simulation runs [23-Dec-2019 13:30:35] Completed 7 of 20 simulation runs [23-Dec-2019 13:30:35] Completed 8 of 20 simulation runs [23-Dec-2019 13:30:35] Completed 9 of 20 simulation runs [23-Dec-2019 13:30:35] Completed 10 of 20 simulation runs [23-Dec-2019 13:30:35] Completed 11 of 20 simulation runs [23-Dec-2019 13:30:35] Completed 12 of 20 simulation runs [23-Dec-2019 13:30:39] Completed 13 of 20 simulation runs [23-Dec-2019 13:30:40] Completed 14 of 20 simulation runs [23-Dec-2019 13:30:40] Completed 15 of 20 simulation runs [23-Dec-2019 13:30:40] Completed 16 of 20 simulation runs [23-Dec-2019 13:30:40] Completed 17 of 20 simulation runs [23-Dec-2019 13:30:40] Completed 18 of 20 simulation runs [23-Dec-2019 13:30:40] Completed 19 of 20 simulation runs [23-Dec-2019 13:30:40] Completed 20 of 20 simulation runs [23-Dec-2019 13:30:40] Cleaning up parallel workers...
Можно получить доступ к результатам симуляции программно, когда симуляции заканчиваются. Создайте график, показывающий вертикальное смещение для транспортного средства для всех дорожных тестов профиля.
if isempty(out(1).ErrorMessage) legend_labels = cell(1,numTestCases); for i = 1:numTestCases if isempty(out(i).ErrorMessage) simOut = out(i); ts = simOut.logsout.get('vertical_disp').Values; ts.plot; legend_labels{i} = ['Run ' num2str(i)]; end hold all end title('Response of a 3-DoF Suspension Model') xlabel('Time (s)'); ylabel('Vehicle vertical displacement (m)'); legend(legend_labels,'Location','NorthEastOutside'); end
Вы можете также представление parsim
результаты симуляции с помощью Simulation Manager. Чтобы просмотреть результаты в Simulation Manager, используйте ShowSimulationManager
пара "имя-значение" для parsim
. С Simulation Manager можно контролировать прогресс запусков, данных моделирования представления, и показать parsim
результаты в Инспекторе Данных моделирования.
Когда вы закончили идти параллельно симуляции, можно закрыть пул рабочего.
delete(gcp('nocreate'));
Загрузите Большие данные для симуляций