Можно использовать возможности Инспектора Данных моделирования из командной строки MATLAB® с помощью Инспектора Данных моделирования API.
Инспектор Данных моделирования организует данные в запусках и сигналах, присваивая уникальную числовую идентификацию каждому запуску и сигналу. Некоторый Инспектор Данных моделирования API-функции использует запуск и идентификаторы сигнала к справочным данным, вместо того, чтобы принять запуск или сам сигнал как вход. Чтобы получить доступ к идентификаторам запуска в рабочей области, можно использовать Simulink.sdi.getAllRunIDs
или Simulink.sdi.getRunIDByIndex
. Можно получить доступ к идентификаторам сигнала через Simulink.sdi.Run
объект с помощью getSignalIDByIndex
метод.
Simulink.sdi.Run
и Simulink.sdi.Signal
классы обеспечивают доступ к вашим данным и позволяют вам просматривать и изменять запуск и метаданные сигнала. Можно изменить Инспектора Данных моделирования настройки с помощью функций как Simulink.sdi.setSubPlotLayout
, Simulink.sdi.setRunNamingRule
, и Simulink.sdi.setMarkersOn
. Чтобы восстановить настройки по умолчанию Инспектора Данных моделирования, использовать Simulink.sdi.clearPreferences
.
В этом примере показано, как создать запуск, добавьте данные в него, и затем просмотрите данные в Инспекторе Данных моделирования.
Создайте данные для запуска
Создайте 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
модель, чтобы продемонстрировать, как сравнить сигналы ввода и вывода системы управления.
Сконфигурируйте и симулируйте модель
slexAircraftExample
модель не делает данных логов. Загрузите модель и отметьте сигналы ввода и вывода для логгирования.
load_system('slexAircraftExample') Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot',1,'on') Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')
Симулируйте модель. Данные для регистрируемых сигналов регистрируют Инспектору Данных моделирования и к рабочей области.
out = sim('slexAircraftExample');
Доступ к данным моделирования
Используйте Инспектора Данных моделирования программируемый интерфейс, чтобы получить доступ к данным. Simulink.sdi.Run.getLatest
функция возвращает последний раз созданный запуск в Инспекторе Данных моделирования репозиторий. Используйте getSignalIDByIndex
функционируйте, чтобы получить доступ к идентификаторам сигнала для регистрируемых сигналов.
aircraftRun = Simulink.sdi.Run.getLatest; signalID1 = getSignalIDByIndex(aircraftRun,1); signalID2 = getSignalIDByIndex(aircraftRun,2);
Задайте значения допуска
Можно задать значения допуска, чтобы использовать в сравнении в качестве свойства в регистрируемом Simulink.sdi.Signal
объект. Используйте Simulink.sdi.getSignal
функционируйте, чтобы получить доступ к Signal
объект с помощью ID сигнала.
signal1 = Simulink.sdi.getSignal(signalID1); signal1.AbsTol = 0.1;
Сравните сигналы
Используйте Simulink.sdi.compareSignals
функция, чтобы сравнить сигналы ввода и вывода. Этот пример использует isValidSignalID
функция, чтобы проверить, что оба идентификатора сигнала все еще допустимы прежде, чем вызвать Simulink.sdi.compareSignals
функция. ID сигнала становится недопустимым, когда сигнал удален от Инспектора Данных моделирования. После сравнения проверяйте состояние в Simulink.sdi.DiffSignalResult
объект.
if (isValidSignalID(aircraftRun,signalID1) && isValidSignalID(aircraftRun,signalID2)) sigDiff = Simulink.sdi.compareSignals(signalID1,signalID2); match = sigDiff.Status end
match = OutOfTolerance
Результат сравнения вне допуска. Можно использовать Simulink.sdi.view
функция, чтобы смотреть и анализировать результаты сравнения.
В этом примере показано, как сравнить запуски данных моделирования и затем анализировать и сохранить результаты с помощью Инспектора Данных моделирования программируемый интерфейс.
Создайте данные моделирования
Во-первых, создайте данные моделирования путем симуляции модели это данные логов. Этот пример использует ex_sldemo_absbrake
модель и анализирует эффект изменения Desired relative slip
значение.
Загрузите модель. Используйте set_param
функция, чтобы задать начальное значение для относительного промаха и симулировать модель.
load_system('ex_sldemo_absbrake') set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.24') out_1 = sim('ex_sldemo_absbrake');
Используйте set_param
функция, чтобы задать различное значение для относительного промаха и симулировать модель снова.
set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.25') out_2 = sim('ex_sldemo_absbrake');
Сравните запуски Используя глобальные значения допуска
Во-первых, используйте 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: 2
WithinTolerance: 2
Unaligned: 0
UnitsMismatch: 0
Empty: 0
Canceled: 0
EmptySynced: 0
DataTypeMismatch: 0
TimeMismatch: 0
StartStopMismatch: 0
Unsupported: 0
Два сравнения сигнала в рамках запуска были в допуске, и два были вне допуска.
Постройте результаты сравнения
Можно использовать графики анализировать результаты сравнения. Доступ к результату сигнала для Ww
сигнал от DiffRunResult
объект, который содержит результаты сравнения с помощью getResultByIndex
функция. Проверяйте Status
свойство Simulink.sdi.DiffSignalResult
объект.
signalResult_Ww = getResultByIndex(runResult,1)
signalResult_Ww = DiffSignalResult with properties: Name: 'yout.Ww' Status: OutOfTolerance AlignBy: 'Path' SignalID1: 127816 SignalID2: 127862 MaxDifference: 12.4878 Sync1: [1x1 timeseries] Sync2: [1x1 timeseries] Diff: [1x1 timeseries]
signalResult_Ww.Status
ans = OutOfTolerance
Ww
результаты сравнения сигнала вне допуска. Постройте сигнал различия анализировать результат.
figure(1) plot(signalResult_Ww.Diff)
Сохраните результаты сравнения
Можно сохранить результаты сравнения в файл MLDATX, чтобы анализировать позже или совместно использовать с коллегой. Используйте saveResult
функция, чтобы сохранить данные о запуске и результаты сравнения.
saveResult(runResult,'desiredSlipResults')
Файл MLDATX desiredSlipResults
создается в рабочей директории. Используйте Simulink.sdi.load
функционируйте или open
функционируйте, чтобы просмотреть результаты в файле MLDATX.
Используя Инспектора Данных моделирования программируемый интерфейс, можно задать значения допуска сигнала, чтобы использовать в сравнениях. Этот пример использует slexAircraftExample
модель и Инспектор Данных моделирования, чтобы оценить эффект изменения постоянной времени для фильтра lowpass после входа управления.
Сконфигурируйте модель
Загрузите модель и отметьте представляющие интерес сигналы для логгирования. Этот пример данные логов для q
и alpha
сигналы.
load_system('slexAircraftExample') Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',3,'on') Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')
Запустите симуляции
Запуститесь симуляции с различным lowpass фильтруют постоянные времени, чтобы сгенерировать результаты выдержать сравнение. slexAircraftExample
модель хранит переменные, сопоставленные моделью в рабочем пространстве модели. Чтобы изменить значение постоянной времени, получите доступ к рабочему пространству модели и используйте assignin
функция.
out1 = sim('slexAircraftExample'); modelWorkspace = get_param('slexAircraftExample','modelworkspace'); assignin(modelWorkspace,'Ts',1) out2 = sim('slexAircraftExample');
Доступ и сравнивает результаты симуляции
Доступ к результатам симуляции с помощью Инспектора Данных моделирования программируемый интерфейс. Каждая симуляция создает запуск в Инспекторе Данных моделирования с уникальным ID запуска. Вы используете идентификаторы запуска, чтобы сравнить результаты симуляции.
runIDs = Simulink.sdi.getAllRunIDs; runIDTs1 = runIDs(end-1); runIDTs2 = runIDs(end);
Используйте Simulink.sdi.compareRuns
функция, чтобы сравнить данные из симуляций. Затем смотрите Status
свойство результата сигнала видеть, находились ли сигналы в пределах допуска по умолчанию 0.
diffRun1 = Simulink.sdi.compareRuns(runIDTs1,runIDTs2); sig1Result1 = getResultByIndex(diffRun1,1); sig2Result1 = getResultByIndex(diffRun1,2); sig1Result1.Status
ans = OutOfTolerance
sig2Result1.Status
ans = OutOfTolerance
Сравните запуски с допусками сигнала
По умолчанию сигналы используют 0
для всех значений допуска, таким образом, сравнение возвращает результаты из допуска, когда сигналы не идентичны. Чтобы далее анализировать эффект изменения постоянной времени, задайте значения допуска для сигналов. Можно задать допуски к программируемому сравнению с помощью свойств Simulink.sdi.Signal
объекты в запусках вы выдерживаете сравнение. Сравнение использует допуски, заданные для базового Signal
объект. Этот пример задает комбинацию времени и абсолютных погрешностей.
Задавать допуски, первый доступ Simulink.sdi.Signal
объекты, которые соответствуют каждому сигналу в запусках, которые вы хотите сравнить.
run1 = Simulink.sdi.getRun(runIDTs1); sigID1 = getSignalIDByIndex(run1,1); sigID2 = getSignalIDByIndex(run1,2); sig1 = Simulink.sdi.getSignal(sigID1); sig2 = Simulink.sdi.getSignal(sigID2);
Проверяйте Name
свойство идентифицировать каждый Signal
объект.
sig1.Name
ans = 'q, rad/sec'
sig2.Name
ans = 'alpha, rad'
Задайте абсолютную погрешность 0.1
и допуск времени 0.6
для q
сигнал с помощью AbsTol
и TimeTol
свойства q
предупредите об объекте в базовом запуске.
sig1.AbsTol = 0.1; sig1.TimeTol = 0.6;
Задайте абсолютную погрешность 0.2
и допуск времени 0.8
для alpha
сигнал с помощью AbsTol
и TimeTol
свойства alpha
предупредите об объекте в базовом запуске.
sig2.AbsTol = 0.2; sig2.TimeTol = 0.8;
Сравните запуски снова и получите доступ к результатам.
diffRun2 = Simulink.sdi.compareRuns(runIDTs1,runIDTs2); sig1Result2 = getResultByIndex(diffRun2,1); sig2Result2 = getResultByIndex(diffRun2,2);
Проверяйте Status
свойство каждого сигнала определить, находились ли результаты сравнения в пределах заданных допусков.
sig1Result2.Status
ans = WithinTolerance
sig2Result2.Status
ans = WithinTolerance
Создайте отчет, который содержит информацию об и графики сигналов, построенных в панели Inspect Инспектора Данных моделирования. По умолчанию отчет содержит метаданные, отображенные для сигналов в таблице на панели Inspect. В этом примере показано, как задать который метаданные включать в отчет.
Загрузите файл сеанса
Этот пример заполняет Инспектора Данных моделирования с данными и построенными сигналами путем загрузки сохраненного файла сеанса. Файл сеанса содержит данные сигнала, а также информацию о нанесенных на график сигналах и размещении графика. Загрузите файл сеанса.
Simulink.sdi.load('ex_sldemo_absbrake_slp_Ww.mldatx');
Создайте отчет для нанесенных на график сигналов
Отчет включает в себя графики и метаданные для нанесенных на график сигналов. По умолчанию отчет включает в себя метаданные, которые соответствуют столбцам, отображенным в таблице сигналов на панели Inspect. Можно включать больше данных в отчет путем отображения большего количества столбцов в панели Inspect. Можно также указать информацию, которую вы хотите в отчете программно с помощью 'ColumnsToReport'
пара "имя-значение" и класс перечисления Simulink.sdi.SignalMetaData
.
signalMetadata = [Simulink.sdi.SignalMetaData.Run, ... Simulink.sdi.SignalMetaData.Line, ... Simulink.sdi.SignalMetaData.BlockName, ... Simulink.sdi.SignalMetaData.SignalName]; Simulink.sdi.report('ReportType','Inspect', 'ReportOutputFile', ... 'absbrake_slp_report.html', 'ColumnsToReport', signalMetadata);
Отчет показывает таблицы метаданных для нанесенных на график сигналов, организованных запуском, выше снимка состояния графика.
В этом примере показано, как использовать Simulink.HMI.InstrumentedSignals
возразите, чтобы сохранить набор регистрируемых сигналов восстановить после выполнения симуляции с различной настройкой логгирования сигнала.
Сохраните начальную настройку логгирования сигнала
Этот пример использует sldemo_fuelsys
модель, которая сконфигурирована, чтобы регистрировать 10 сигналов. Откройте модель и используйте get_param
функция, чтобы получить Simulink.HMI.InstrumentedSignals
объект, представляющий настройку логгирования сигнала.
load_system sldemo_fuelsys initSigs = get_param('sldemo_fuelsys','InstrumentedSignals');
Можно сохранить начальную настройку логгирования сигнала в MAT-файле для дальнейшего использования.
save initial_instSigs.mat initSigs
Удалите все значки логгирования
Чтобы возвратиться к базовой линии никаких регистрируемых сигналов, можно использовать set_param
функция, чтобы удалить все значки логгирования из сигналов в вашей модели. Затем можно легко выбрать различную настройку сигналов войти в систему Редактор Simulink™ или использование Simulink.sdi.markSignalForStreaming
функция.
set_param('sldemo_fuelsys','InstrumentedSignals',[])
Восстановите сохраненную настройку логгирования
После работы с различным набором регистрируемых сигналов можно восстановить сохраненную настройку с помощью Simulink.HMI.InstrumentedSignals
объект. Например, если вы сохраненный настройка логгирования к MAT-файлу, можно загрузить содержимое MAT-файла в рабочую область и использовать set_param
функционируйте, чтобы восстановить ранее сохраненную настройку логгирования.
load initial_instSigs.mat set_param('sldemo_fuelsys','InstrumentedSignals',initSigs)
Инспектор данных моделирования