Можно использовать возможности Данных моделирования Inspector из MATLAB® командная строка с использованием Данных моделирования Inspector API.
Данные моделирования Inspector организуют данные в запусках и сигналах, присваивая уникальную числовую идентификацию каждому запуску и сигналу. Некоторые функции Данных моделирования Inspector API используют идентификаторы запуска и сигнала для ссылки на данные, а не для принятия самого запуска или сигнала в качестве входа. Для доступа к идентификаторам запуска в рабочей области можно использовать Simulink.sdi.getAllRunIDs
или Simulink.sdi.getRunIDByIndex
. Вы можете получить доступ к идентификаторам сигнала через Simulink.sdi.Run
объект с использованием getSignalIDByIndex
способ.
The Simulink.sdi.Run
и Simulink.sdi.Signal
классы обеспечивают доступ к вашим данным и позволяют вам просматривать и изменять метаданные запуска и сигнала. Можно изменить настройки Данные Моделирования Inspector, используя такие функции, как Simulink.sdi.setSubPlotLayout
, Simulink.sdi.setRunNamingRule
, и Simulink.sdi.setMarkersOn
. Чтобы восстановить настройки Данных моделирования Inspector по умолчанию, используйте Simulink.sdi.clearPreferences
.
В этом примере показов, как создать запуск, добавить к нему данные и затем просмотреть данные в Данные моделирования 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')
Можно использовать программный интерфейс Данные Моделирования Inspector для сравнения сигналов в течение одного запуска. Этот пример сравнивает входной и выходной сигналы продольного контроллера самолета.
Во-первых, загрузите сеанс, содержащий данные.
Simulink.sdi.load('AircraftExample.mldatx');
Используйте Simulink.sdi.Run.getLatest
для доступа к последнему запуску в данных.
aircraftRun = Simulink.sdi.Run.getLatest;
Затем можно использовать Simulink.sdi.getSignalsByName
функция для доступа к Stick
сигнал, который представляет вход контроллера, и alpha, rad
сигнал, который представляет выход.
stick = getSignalsByName(aircraftRun,'Stick'); alpha = getSignalsByName(aircraftRun,'alpha, rad');
Перед сравнением сигналов можно задать значение допуска, которое будет использоваться для сравнения. Сравнения используют значения допуска, заданные для базового сигнала в сравнении, поэтому установите абсолютную погрешность значение 0.1
на Stick
сигнал.
stick.AbsTol = 0.1;
Теперь сравните сигналы, используя Simulink.sdi.compareSignals
функция. The Stick
сигнал является базовой линией, и alpha, rad
сигнал является сигналом для сравнения с базовой линией.
comparisonResults = Simulink.sdi.compareSignals(stick.ID,alpha.ID); match = comparisonResults.Status
match = OutOfTolerance
Результат сравнения вышел за пределы допуска. Можно использовать Simulink.sdi.view
функция для открытия Данных моделирования Inspector для просмотра и анализа результатов сравнения.
Можно задать значения глобальных допусков, которые будут использоваться при сравнении двух запусков симуляции. Значения глобального допуска применяются ко всем сигналам в запуск. В этом примере показано, как задать значения глобальных допусков для сравнения запусков и как анализировать и сохранить результаты сравнения.
Во-первых, загрузите файл сеанса, содержащий данные для сравнения. Файл сеанса содержит данные для четырех симуляций продольного контроллера самолета. В этом примере сравниваются данные из двух запусков, которые используют различные временные константы входного фильтра.
Simulink.sdi.load('AircraftExample.mldatx');
Для доступа к данным запуска для сравнения используйте Simulink.sdi.getAllRunIDs
функция для получения идентификаторов запуска, которые соответствуют последним двум запускам симуляции.
runIDs = Simulink.sdi.getAllRunIDs; runID1 = runIDs(end - 1); runID2 = runIDs(end);
Используйте Simulink.sdi.compareRuns
функция для сравнения запусков. Задайте глобальную относительную погрешность значение 0.2
и глобальное значение допуска по времени 0.5
.
runResult = Simulink.sdi.compareRuns(runID1,runID2,'reltol',0.2,'timetol',0.5);
Проверьте Summary
свойство возвращенного Simulink.sdi.DiffRunResult
объект, чтобы увидеть, были ли сигналы в пределах значений допуска или вне допуска.
runResult.Summary
ans = struct with fields:
OutOfTolerance: 0
WithinTolerance: 3
Unaligned: 0
UnitsMismatch: 0
Empty: 0
Canceled: 0
EmptySynced: 0
DataTypeMismatch: 0
TimeMismatch: 0
StartStopMismatch: 0
Unsupported: 0
Все три результата сравнения сигналов попали в заданный глобальный допуск.
Результаты сравнения можно сохранить в файле MLDATX с помощью saveResult
функция.
saveResult(runResult,'InputFilterComparison');
Можно программно задать значения допуска сигнала для использования в сравнениях, выполненных с помощью Данных моделирования Inspector. В этом примере вы сравниваете данные, собранные путем симуляции модели продольной системы управления рейсом самолета. Каждая симуляция использует разное значение для временной константы входного фильтра и регистрирует входные и выходные сигналы. Вы анализируете эффект изменения постоянной времени путем сравнения результатов с помощью Данные Моделирования Inspector и допусков сигнала.
Во-первых, загрузите файл сеанса, который содержит данные моделирования.
Simulink.sdi.load('AircraftExample.mldatx');
Файл сеанса содержит четыре запусков. В этом примере вы сравниваете данные первых двух запусков в файле. Доступ к Simulink.sdi.Run
объекты для первых двух запусков, загруженные из файла.
runIDs = Simulink.sdi.getAllRunIDs; runIDTs1 = runIDs(end-3); runIDTs2 = runIDs(end-2);
Теперь сравните эти два запусков, не задавая никаких допусков.
noTolDiffResult = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);
Используйте getResultByIndex
функция для доступа к результатам сравнения для q
и alpha
сигналы.
qResult = getResultByIndex(noTolDiffResult,1); alphaResult = getResultByIndex(noTolDiffResult,2);
Проверьте Status
из каждого результата сигнала, чтобы увидеть, попадает ли результат сравнения в наш вне допуска.
qResult.Status
ans = OutOfTolerance
alphaResult.Status
ans = OutOfTolerance
В сравнении использовалось значение 0
для всех допусков, поэтому OutOfTolerance
результат означает, что сигналы не идентичны.
Можно дополнительно проанализировать эффект постоянной времени, задав значения допуска для сигналов. Задайте допуски путем установки свойств для Simulink.sdi.Signal
объекты, которые соответствуют сравниваемым сигналам. В сравнениях используются допуски, заданные для базовых сигналов. Этот пример задает временным допуском и абсолютной погрешностью.
Чтобы задать допуск, сначала получите доступ к Signal
объекты из запуска опорной структуры.
runTs1 = Simulink.sdi.getRun(runIDTs1); qSig = getSignalsByName(runTs1,'q, rad/sec'); alphaSig = getSignalsByName(runTs1,'alpha, rad');
Задайте абсолютную погрешность 0.1
и временной допуск 0.6
для q
сигнал с использованием AbsTol
и TimeTol
свойства.
qSig.AbsTol = 0.1; qSig.TimeTol = 0.6;
Задайте абсолютную погрешность 0.2
и временной допуск 0.8
для alpha
сигнал.
alphaSig.AbsTol = 0.2; alphaSig.TimeTol = 0.8;
Сравните результаты еще раз. Получите доступ к результатам сравнения и проверьте Status
свойство для каждого сигнала.
tolDiffResult = Simulink.sdi.compareRuns(runIDTs1,runIDTs2); qResult2 = getResultByIndex(tolDiffResult,1); alphaResult2 = getResultByIndex(tolDiffResult,2); qResult2.Status
ans = WithinTolerance
alphaResult2.Status
ans = WithinTolerance
Инспектор данных моделирования