exponenta event banner

Simulink.sdi. Управляемый

Доступ к сигналам запуска и метаданным

Описание

Simulink.sdi.Run содержит метаданные выполнения и позволяет получить доступ к Simulink.sdi.Signal объекты, содержащие данные и метаданные для сигналов в прогоне. Также можно использовать Simulink.sdi.Run объект для импорта данных в инспектор данных моделирования из рабочей области или файла.

Создание

Инспектор данных моделирования создает Simulink.sdi.Run объекты при импорте данных или моделировании модели, регистрирующей данные. Вы можете получить доступ к Run объект в инспекторе данных моделирования тремя способами:

  • Если требуется получить доступ к прогону, соответствующему определенному идентификатору прогона, используйте Simulink.sdi.getRun функция.

    Совет

    Используйте Simulink.sdi.getAllRunIDs для получения идентификаторов прогонов для всех прогонов в инспекторе данных моделирования.

  • Если требуется получить доступ к последнему созданному прогону в инспекторе данных моделирования, используйте Simulink.sdi.Run.getLatest функция.

  • Если требуется получить доступ к прогону, который соответствует текущему или последнему завершенному моделированию модели, используйте Simulink.sdi.getCurrentSimulationRun функция.

Можно также программно создать Simulink.sdi.Run объект для импорта данных в инспектор данных моделирования.

  • Создайте пустой прогон в инспекторе расчетных данных с помощью Simulink.sdi.Run.create функция.

  • Создайте пустой прогон в инспекторе расчетных данных или импортируйте данные в инспектор расчетных данных с помощью Simulink.sdi.createRun.

Совет

Используйте add функции или Simulink.sdi.addToRun функция для импорта данных в пустую Run объект.

Свойства

развернуть все

Это свойство доступно только для чтения.

Уникальный числовой идентификатор для прогона, возвращаемый как целое число.

Имя запуска, указанное как символьный вектор или строка.

По умолчанию Name пустое свойство при использовании Simulink.sdi.Run.create для создания прогона.

Можно указать имя прогона при использовании Simulink.sdi.createRun для создания прогона.

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

Пример: 'Run 1: vdp'

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

Пример: 'Initial simulation'

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

Пример: 'Gain = 2'

Дата и время создания прогона, возвращенного как datetime объект.

Пример: 07-Dec-2019 13:55:25

Типы данных: datetime

Это свойство доступно только для чтения.

Индекс прогона в инспекторе данных моделирования при создании прогона, возвращаемый как целое число. RunIndex соответствует номеру прогона в имени прогона при использовании индекса прогона в качестве части правила именования прогона.

При удалении прогонов из инспектора расчетных данных значение RunIndex свойство может не соответствовать индексу идентификатора выполнения в векторе, возвращаемом Simulink.sdi.getAllRunIDs функция.

Это свойство доступно только для чтения.

Количество сигналов в прогоне, возвращаемых в виде целого числа.

Имя модели, моделируемой для создания прогона, возвращаемое в виде символьного вектора. Model пустое свойство для прогонов, созданных путем импорта данных в инспектор данных моделирования.

Режим моделирования, используемый при моделировании, в котором был создан прогон, возвращаемый как символьный вектор. SimMode пустое свойство для прогонов, созданных путем импорта данных в инспектор данных моделирования.

Первый момент времени, совместно используемый всеми сигналами в прогоне, возвращаемый как скаляр.

Последний момент времени, совместно используемый всеми сигналами в ходе выполнения, возвращен в виде скаляра.

Версия Simulink ®, использованная для моделирования, создавшего прогон, возвращена в виде символьного вектора. SLVersion пустое свойство для прогонов, созданных путем импорта данных в инспектор данных моделирования.

Версия модели, которая была смоделирована для создания прогона, возвращенная в виде символьного вектора. Версия модели сохраняется в свойствах модели. ModelVersion пустое свойство для прогонов, созданных путем импорта данных в инспектор данных моделирования.

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

Имя машины, использованной для выполнения моделирования, создавшего прогон, возвращаемое в виде символьного вектора. MachineName пустое свойство для прогонов, созданных путем импорта данных в инспектор данных моделирования.

Операционная система на компьютере, используемом для моделирования, возвращается в виде символьного вектора. Platform пустое свойство для участков, не соответствующих моделированию.

Пример: 'PCWIN64'

Имя задачи моделирования, соответствующее выполнению, возвращаемое в виде символьного вектора. TaskName пустое свойство, если прогон не был создан с использованием работников Toolbox™ параллельных вычислений.

Тип решателя, использованного в моделировании, который создал прогон, возвращенный как 'Variable-Step' или 'Fixed-Step'. SolverType пустое свойство для прогонов, созданных путем импорта данных в инспектор данных моделирования.

Имя решателя, использованного в моделировании для создания прогона, возвращаемого в виде символьного вектора. SolverName пустое свойство для прогонов, созданных путем импорта данных в инспектор данных моделирования.

Пример: ode45

Размер шага, используемый решателем во время моделирования, возвращаемый как символьный вектор. Если при моделировании использовался решатель с фиксированным шагом, SolverStepSize свойство указывает фиксированный размер шага, используемый в моделировании. Если при моделировании использовался решатель с переменным шагом, SolverStepSize свойство указывает максимальный размер шага, используемый при моделировании.

Пример: '0.4'

Статус моделирования, возвращаемый как символьный вектор. Когда моделирование выполняется, Status свойство - 'Running'. Когда моделирование приостановлено или завершено, Status свойство принимает значение из StopEvent области Simulink.SimulationMetadata объект StopEvent собственность. StopEvent свойство имеет одно из следующих значений:

  • ReachedStopTime - Моделирование завершено без сообщений об ошибках, не включая ошибки, указанные в StopFcn обратный вызов, который выполняется после остановки моделирования.

  • ModelStop - Блок или решатель остановил моделирование перед временем остановки моделирования.

  • StopCommand - Нажмите кнопку Stop или set_param вызов функции завершил моделирование.

  • DiagnosticError - Сообщение об ошибке завершило моделирование.

  • KeyboardControlC - A Ctrl+C ввод с клавиатуры завершил моделирование.

  • PauseCommand - Кнопка паузы или set_param вызов функции приостановил моделирование.

  • ConditionalPause - Условная точка останова приостановила моделирование.

  • PauseTime - Указанное время паузы приостановило моделирование.

  • StepForward - Моделирование приостановлено после перехода вперед при переходе к моделированию.

  • StepBackward - Моделирование приостановлено после шага назад при переходе к моделированию.

  • TimeOut - Моделирование остановлено после того, как время выполнения моделирования превысило время ожидания, указанное с помощью 'TimeOut' пара имя-значение для sim функция.

Блок, выдавший событие остановки, остановившее моделирование, возвращенный как Simulink.SimulationData.BlockPath объект.

Переведенное описание остановки моделирования, возвращаемое в виде символьного вектора. StopEventDescription содержит описание события остановки и связанное с ним время моделирования, если применимо. StopEventDescription свойство принимает значение из StopEventDescription области Simulink.SimulationMetadata объект ExecutionInfo собственность.

Пример: 'Pause command issued at time 100'

Ошибки, возникшие во время моделирования, возвращенные в виде символьного вектора.

Предупреждения, возникшие во время моделирования, возвращенные в виде символьного вектора.

Время, необходимое для инициализации модели для моделирования, создавшего прогон, возвращаемое как двойное. ModelInitializationTime пустое свойство для прогонов, созданных путем импорта данных в инспектор данных моделирования.

Время выполнения моделирования, которое создало прогон, возвращенное как двойное. ModelExecutionTime пустое свойство для прогонов, созданных путем импорта данных в инспектор данных моделирования.

Время завершения моделирования, которое создало прогон, возвращенное как двойное. ModelTerminationTime пустое свойство для прогонов, созданных путем импорта данных в инспектор данных моделирования.

Общее время моделирования, при котором был создан прогон, возвращенное как двойное. ModelTotalElapsedTime пустое свойство для прогонов, созданных путем импорта данных в инспектор данных моделирования.

Указанная пользователем строка, соответствующая моделированию, возвращается в виде символьного вектора. Часто, UserString содержит краткое описание моделирования. Вы указываете UserString для моделирования в Simulink.SimulationInput объект для моделирования.

Функции объекта

addДобавление сигналов к Simulink.sdi.Run объект
exportЭкспорт выполнения в базовое рабочее пространство или файл
getAllSignalIDsПолучение всех идентификаторов сигналов в Simulink.sdi.Run объект
getAllSignalsПолучить все сигналы в Simulink.sdi.Run объект
getDatasetRefСоздание объекта Simulink.sdi.DatasetRef для прогона
getSignalByIndexПолучить сигнал в Simulink.sdi.Run объект по индексу
getSignalIDByIndexПолучить идентификатор сигнала для сигнала с заданным индексом в Simulink.sdi.Run объект
getSignalIDsByNameПолучение идентификаторов сигналов внутри Simulink.sdi.Run объект с использованием имени сигнала
getSignalsByNameСигналы доступа в Simulink.sdi.Run объект с использованием имени сигнала
isValidSignalIDПроверьте, соответствует ли идентификатор сигнала сигналу в Simulink.sdi.Run объект

Примеры

свернуть все

В этом примере показано, как получить доступ к Simulink.sdi.Run для запуска инспектора данных моделирования, созданного с помощью сигналов регистрации. От Simulink.sdi.Run объект, который вы можете получить Simulink.sdi.Signal объекты, содержащие записанные данные сигнала и метаданные. Вы можете использовать Signal объекты и plotOnSubPlot для печати данных в инспекторе расчетных данных.

Создание прогона моделирования и доступ к Run Объект

ex_vdp модель регистрирует два сигнала. Чтобы создать прогон моделирования, содержащий записанные данные, смоделируйте модель.

sim('ex_vdp');

Инспектор данных моделирования отслеживает выполнение, присваивая уникальный числовой идентификатор выполнения каждому выполнению, созданному путем моделирования, импорта данных или открытия сеанса. Для доступа к объекту прогона только что выполненного моделирования используйте Simulink.sdi.getAllRunIDs и возьмите идентификатор последнего прогона в возвращенном векторе.

runIDs = Simulink.sdi.getAllRunIDs;
runID = runIDs(end);

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

vdpRun = Simulink.sdi.getRun(runID);

vdpRun.SignalCount
ans = int32
    2

Печать данных с использованием Signal Объекты

Используйте getSignalByIndex для доступа к сигналам от Run объект, fuelRun.

signal1 = getSignalByIndex(vdpRun,1);
signal2 = getSignalByIndex(vdpRun,2);

Используйте Simulink.sdi.setSubPlotLayout для задания компоновки «3 на 1».

Simulink.sdi.setSubPlotLayout(2,1)

Перед выводом данных на печать используйте Simulink.sdi.clearAllSubPlots для очистки всех уже выведенных на печать данных.

Simulink.sdi.clearAllSubPlots

Постройте график по одному сигналу на каждом вложенном графике. Для печати сигналов на первом вложенном графике можно установить checked свойство для сигнала. Для вывода на печать сигналов на подсхемах, отличных от первого, используйте plotOnSubPlot функция.

signal1.Checked = true;
plotOnSubPlot(signal2,2,1,true);

Просмотр выводимых на печать данных

Чтобы просмотреть только что созданные графики, откройте инспектор расчетных данных с помощью Simulink.sdi.view функция.

В этом примере показано, как создать прогон, добавить в него данные, а затем просмотреть данные в инспекторе данных моделирования.

Создание данных для прогона

Создать timeseries объекты, содержащие данные для синусоидального сигнала и косинусного сигнала. Дать каждому timeseries объект описательное имя.

time = linspace(0,20,100);

sine_vals = sin(2*pi/5*time);
sine_ts = timeseries(sine_vals,time);
sine_ts.Name = 'Sine, T=5';

cos_vals = cos(2*pi/8*time);
cos_ts = timeseries(cos_vals,time);
cos_ts.Name = 'Cosine, T=8';

Создание прогона и добавление данных

Используйте Simulink.sdi.view для открытия инспектора данных моделирования.

Simulink.sdi.view

Чтобы импортировать данные в инспектор данных моделирования из рабочей области, создайте Simulink.sdi.Run с использованием Simulink.sdi.Run.create функция. Добавление информации о выполнении в метаданные с помощью Name и Description свойства Run объект.

sinusoidsRun = Simulink.sdi.Run.create;
sinusoidsRun.Name = 'Sinusoids';
sinusoidsRun.Description = 'Sine and cosine signals with different frequencies';

Используйте add добавление данных, созданных в рабочей области, в пустой прогон.

add(sinusoidsRun,'vars',sine_ts,cos_ts);

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

Используйте getSignalByIndex функция для доступа Simulink.sdi.Signal объекты, содержащие данные сигнала. Вы можете использовать Simulink.sdi.Signal свойства объекта для задания стиля и цвета линии для сигнала и вывода его на печать в Инспекторе данных моделирования. Укажите LineColor и LineDashed свойства для каждого сигнала.

sine_sig = getSignalByIndex(sinusoidsRun,1);
sine_sig.LineColor = [0 0 1];
sine_sig.LineDashed = '-.';

cos_sig = sinusoidsRun.getSignalByIndex(2);
cos_sig.LineColor = [0 1 0];
cos_sig.LineDashed = '--';

Используйте Simulink.sdi.setSubPlotLayout для конфигурирования 2около-1 компоновка вложенной печати в области печати «Инспектор расчетных данных». Затем используйте plotOnSubplot функция для построения графика синусоидального сигнала на верхнем субплоте и косинусного сигнала на нижнем субплоте.

Simulink.sdi.setSubPlotLayout(2,1);

plotOnSubPlot(sine_sig,1,1,true);
plotOnSubPlot(cos_sig,2,1,true);

Закрытие инспектора данных моделирования и сохранение данных

По завершении проверки данных напечатанного сигнала можно закрыть инспектор данных моделирования и сохранить сеанс в файле MLDATX.

Simulink.sdi.close('sinusoids.mldatx')

В этом примере выполняется параллельное моделирование модели. slexAircraftExample с различными временными константами входного фильтра и показывает несколько способов доступа к данным с помощью программного интерфейса Simulation Data Inspector.

Установка

Сначала убедитесь, что инспектор данных моделирования пуст, а поддержка панели инструментов параллельных вычислений настроена на автоматический импорт запусков, созданных на локальных рабочих. Затем создайте вектор значений параметров фильтра для использования в каждом моделировании.

% Make sure the Simulation Data Inspector is empty, and PCT support is
% enabled. 
Simulink.sdi.clear
Simulink.sdi.enablePCTSupport('local')

% Define Ts values
Ts_vals = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1]; 

Инициализация параллельных работников

Используйте gcp для создания пула локальных работников для выполнения параллельных моделирований, если они еще не созданы. В spmd кодовый блок, загрузите slexAircraftExample и выберите сигналы для регистрации. Чтобы избежать проблем параллелизма данных, используйте sim в parforсоздайте временный каталог для каждого работника, который будет использоваться во время моделирования.

p = gcp;
Starting parallel pool (parpool) using the 'local' profile ...
connected to 4 workers.
spmd
    
    % Load system and select signals to log
    load_system('slexAircraftExample')
    Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot', 1, 'on')
    Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model', 4, 'on')
    
    % Create temporary directory on each worker
    workDir = pwd;
    addpath(workDir)
    tempDir = tempname;
    mkdir(tempDir)
    cd(tempDir)
    
end

Запустить параллельное моделирование

Использовать parfor для параллельного выполнения семи имитаций. Выберите значение для Ts для каждого моделирования и изменить значение Ts в рабочем пространстве модели. Затем запустите моделирование и создайте массив Simulink.sdi.WorkerRun для доступа к данным с помощью инспектора расчетных данных. После parfor цикл, использовать другой spmd для удаления временных каталогов из рабочих.

parfor index = 1:7
    
    % Select value for Ts
    Ts_val = Ts_vals(index);
    
    % Change the filter time constant and simulate
    modelWorkspace = get_param('slexAircraftExample','modelworkspace');
    modelWorkspace.assignin('Ts',Ts_val)
    sim('slexAircraftExample')
    
    % Create a worker run for each simulation
    workerRun(index) = Simulink.sdi.WorkerRun.getLatest
    
end

spmd
        
    % Remove temporary directories
    cd(workDir)
    rmdir(tempDir, 's')
    rmpath(workDir)
    
end

Получение объектов набора данных из выходных данных параллельного моделирования

getDataset метод помещает данные из WorkerRun в Dataset чтобы можно было легко выполнить постобработку.

ds(7) = Simulink.SimulationData.Dataset;

for a = 1:7
    ds(a) = workerRun(a).getDataset;
end
ds(1)
ans = 
Simulink.SimulationData.Dataset '' with 2 elements

                         Name        BlockPath                                
                         __________  ________________________________________ 
    1  [1x1 Signal]      alpha, rad  ...rcraftExample/Aircraft Dynamics Model
    2  [1x1 Signal]      Stick       slexAircraftExample/Pilot               

  - Use braces { } to access, modify, or add elements using index.

Получение объектов DatasetRef из выходных данных параллельного моделирования

Для работы с большими данными используйте getDatasetRef для ссылки на данные, связанные с WorkerRun.

for b = 1:7
    datasetRef(b) = workerRun(b).getDatasetRef;
end

datasetRef(1)
ans = 
  DatasetRef with properties:

           Name: 'Run 3: slexAircraftExample'
            Run: [1×1 Simulink.sdi.Run]
    numElements: 2

Обработка данных параллельного моделирования в инспекторе данных моделирования

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

for c = 1:7
    
    Runs(c) = workerRun(c).getLocalRun;
    Ts_val_str = num2str(Ts_vals(c));
    desc = strcat('Ts = ', Ts_val_str);
    Runs(c).Description = desc;
    Runs(c).Name = strcat('slexAircraftExample run Ts=', Ts_val_str);
    
end

Очистить рабочие репозитории

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

Simulink.sdi.cleanupWorkerResources

Альтернативы

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

Представлен в R2012b