Simulink.sdi.Run

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

Описание

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

Создание

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

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

    Совет

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

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

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

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

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

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

Совет

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

Свойства

расширить все

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

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

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

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

Вы можете задать имя запуска, когда вы используете Simulink.sdi.createRun функция для создания запуска.

Когда вы создаете запуск путем симуляции модели, которая регистрирует данные, имя запуска генерируется согласно правилу именования прогона в Данные моделирования Inspector. Вы можете изменить правило именования прогона в Данные моделирования Inspector в пользовательском интерфейсе или с помощью 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример: 'PCWIN64'

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

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

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

Пример: ode45

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

Пример: '0.4'

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

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

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

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

  • DiagnosticError - Сообщенная ошибка завершила симуляцию.

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

  • PauseCommand - Нажмите Pause кнопку или set_param вызов функции приостановил симуляцию.

  • ConditionalPause - Условная точка останова приостановила симуляцию.

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

  • StepForward - Симуляция приостановилась после шага вперед во время шага симуляции.

  • StepBackward - Симуляция приостановилась после шага назад во время шага симуляции.

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

Блок, который выдал событие остановки, которое остановило симуляцию, вернулся как Simulink.SimulationData.BlockPath объект.

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

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

Ошибки, возникшие во время симуляции, возвращаются как вектор символов.

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

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

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

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

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

Заданная пользователем строка, которая соответствует симуляции, возвращается как вектор символов. Часто, 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 объект для запуска Данные Моделирования Inspector, созданный с помощью сигналов регистрации. Из Simulink.sdi.Run объект, который можно получить Simulink.sdi.Signal объекты, которые содержат записанные в журнал данные о сигнале и метаданные. Можно использовать Signal объекты и plotOnSubPlot функция для построения графика данных в Данные моделирования Inspector.

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

The 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);

Просмотр нанесенных на график данных

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

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

Создание данных для запуска

Создание 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 функция для открытия Данные Моделирования Inspector.

Simulink.sdi.view

Чтобы импортировать данные в Данные моделирования Inspector из рабочей области, создайте 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);

Постройте график данных в Данные моделирования Inspector

Используйте getSignalByIndex функция для доступа к Simulink.sdi.Signal объекты, которые содержат сигнальные данные. Можно использовать Simulink.sdi.Signal свойства объекта, чтобы задать стиль линии и цвет для сигнала и построить его в Данные моделирования Inspector. Задайте 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-by- 1 subplot размещения в области построения графиков Данных моделирования Inspector. Затем используйте plotOnSubplot функция для построения графика синусоидального сигнала на верхней подграфике и косинусоидального сигнала на нижней подграфике.

Simulink.sdi.setSubPlotLayout(2,1);

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

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

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

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

Этот пример выполняет параллельные симуляции модели slexAircraftExample с различными временными константами входного фильтра и показывает несколько способов доступа к данным с помощью программного интерфейса Данные Моделирования Inspector.

Setup

Начните, убедившись, что Данные Моделирования Inspector пусты, а поддержка Parallel Computing Toolbox сконфигурирована для автоматического импорта запусков, созданных локальными работниками. Затем создайте вектор значений параметров фильтра для использования в каждой симуляции.

% 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 объекты для доступа к данным с помощью Данных моделирования Inspector. После 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

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

The 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

Обработайте данные параллельного моделирования в Данные моделирования Inspector

Можно также создать локальные Run объекты для анализа и визуализации данных с помощью Данных моделирования Inspector 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

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

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

Введенный в R2012b