Можно использовать возможности Инспектора Данных моделирования из командной строки MATLAB® с помощью Инспектора Данных моделирования API.
Инспектор Данных моделирования организует данные в запусках и сигналах, присваивая уникальную числовую идентификацию каждому запуску и сигналу. Некоторый Инспектор Данных моделирования API-функции использует запуск и идентификаторы сигнала к справочным данным, вместо того, чтобы принять запуск или сам сигнал как вход. Чтобы получить доступ к идентификаторам запуска в рабочей области, можно использовать Simulink.sdi.getAllRunIDs
или Simulink.sdi.getRunIDByIndex
. Можно получить доступ к идентификаторам сигнала через Simulink.sdi.Run
объект с помощью Simulink.sdi.Run.getSignalIDByIndex
метод.
Simulink.sdi.Run
и Simulink.sdi.Signal
классы обеспечивают доступ к вашим данным и позволяют вам просматривать и изменять запуск и метаданные сигнала. Можно изменить Инспектора Данных моделирования настройки с помощью функций как Simulink.sdi.setSubPlotLayout
, Simulink.sdi.setRunNamingRule
, и Simulink.sdi.setMarkersOn
. Чтобы восстановить настройки по умолчанию Инспектора Данных моделирования, используйте Simulink.sdi.clearPreferences
.
В этом примере показано, как создать запуск, добавьте данные в него, и затем просмотрите данные в Инспекторе Данных моделирования.
Создайте данные для запуска
Этот пример создает timeseries
объекты для синуса и косинуса. Чтобы визуализировать ваши данные, Инспектор Данных моделирования требует, по крайней мере, временного вектора, который соответствует вашим данным.
% Generate timeseries data 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';
Создайте запущенного инспектора данных моделирования и добавьте свои данные
Чтобы предоставить Инспектора Данных моделирования доступ к вашим данным, используйте create
метод и создает запуск. Этот пример изменяет некоторые свойства запуска помочь идентифицировать данные. Можно легко просмотреть запуск и предупредить о свойствах с Инспектором Данных моделирования.
% Create a run sinusoidsRun = Simulink.sdi.Run.create; sinusoidsRun.Name = 'Sinusoids'; sinusoidsRun.Description = 'Sine and cosine signals with different frequencies'; % Add timeseries data to run sinusoidsRun.add('vars', sine_ts, cos_ts);
Отобразите свои данные на графике Используя Simulink.sdi.Signal
Объект
getSignalByIndex
метод возвращает Simulink.sdi.Signal
объект, который может использоваться, чтобы построить сигнал в Инспекторе Данных моделирования. Можно также программно управлять аспектами внешнего вида графика, такими как цвет и стиль линии, представляющей сигнал. Этот пример настраивает размещение подграфика и характеристики сигнала.
% Get signal, modify its properties, and change Checked property to true sine_sig = sinusoidsRun.getSignalByIndex(1); sine_sig.LineColor = [0 0 1]; sine_sig.LineDashed = '-.'; sine_sig.Checked = true; % Add another subplot for the cosine signal Simulink.sdi.setSubPlotLayout(2, 1); % Plot the cosine signal and customize its appearance cos_sig = sinusoidsRun.getSignalByIndex(2); cos_sig.LineColor = [0 1 0]; cos_sig.plotOnSubPlot(2, 1, true); % View the signal in the Simulation Data Inspector Simulink.sdi.view
Закройте инспектора данных моделирования и сохраните свои данные
Simulink.sdi.close('sinusoids.mat')
Этот пример использует slexAircraftExample
модель, чтобы продемонстрировать сравнение ввода и вывода сигнализирует для системы управления. Пример отмечает сигналы для потоковой передачи, затем получает объект запуска для запущенной симуляции. Идентификаторы сигнала от объекта запуска задают сигналы, которые будут сравнены.
% Load model slexAircraftExample and mark signals for streaming load_system('slexAircraftExample') Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot',1,'on') Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on') % Simulate model slexAircraftExample out = sim('slexAircraftExample'); % Get run IDs for most recent run allIDs = Simulink.sdi.getAllRunIDs; runID = allIDs(end); % Get Run object aircraftRun = Simulink.sdi.getRun(runID); % Get signal IDs signalID1 = getSignalIDByIndex(aircraftRun,1); signalID2 = getSignalIDByIndex(aircraftRun,2); if (isValidSignalID(aircraftRun,signalID1)) % Change signal tolerance signal1 = Simulink.sdi.getSignal(signalID1); signal1.AbsTol = 0.1; end if (isValidSignalID(aircraftRun,signalID1) && isValidSignalID(aircraftRun,signalID2)) % Compare signals sigDiff = Simulink.sdi.compareSignals(signalID1,signalID2); % Check whether signal result status match = sigDiff.Status end
match = OutOfTolerance
То В этом примере показано, как сравнить запуски данных моделирования и анализировать сравнение, заканчивается с Инспектором Данных моделирования программируемый интерфейс.
Сгенерируйте запуски данных моделирования
Симулируйте модель с различным Desired relative slip
значения, чтобы создать запуски данных моделирования, чтобы анализировать с Инспектором Данных моделирования программируемый интерфейс.
% Open model load_system('ex_sldemo_absbrake') % Set the desired slip ratio to 0.24 and simulate set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.24') out_1 = sim('ex_sldemo_absbrake'); % Change the desired slip ratio to 0.25 and simulate set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.25') out_2 = sim('ex_sldemo_absbrake');
Сравните запуски с глобальным допуском
Получите идентификаторы запуска для запусков, которые вы только создали с Simulink.sdi.getAllRunIDs
функция. Затем сравните запуски с помощью глобального относительного допуска и глобального допуска времени, чтобы анализировать, соответствуют ли данные спецификациям.
% Get run IDs for last two runs runIDs = Simulink.sdi.getAllRunIDs; runID1 = runIDs(end - 1); runID2 = runIDs(end); % Compare runs runResult = Simulink.sdi.compareRuns(runID1,runID2,'reltol',0.2,'timetol',0.5);
Создайте график результата сравнения
Используйте Simulink.sdi.DiffRunResult
возразите, что вы создали на предыдущем шаге с Simulink.sdi.compareRuns
получить доступ к данным для Ww
предупредите о результате построить его в фигуре.
% Plot the |Ww| signal difference
signalResult_Ww = getResultByIndex(runResult,1);
figure(1)
plot(signalResult_Ww.Diff)
Можно изменить значения допуска на основе сигнала сигналом, чтобы оценить эффект изменения параметра модели. Этот пример использует slexAircraftExample
модель и Инспектор Данных моделирования, чтобы оценить эффект изменения постоянной времени для фильтра lowpass после входа управления.
Настройка
Загрузите модель и отметьте q, rad/sec
и alpha, rad
сигналы для логгирования. Затем симулируйте модель, чтобы создать базовый запуск.
% Load example model load_system('slexAircraftExample') % Mark the q, rad/sec and alpha, rad signals for logging Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',3,'on') Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on') % Simulate system out_1 = sim('slexAircraftExample');
Измените параметр модели
Измените параметр модели Ts
в рабочем пространстве модели, чтобы изменить постоянную времени входа фильтр lowpass.
% Change input filter time constant modelWorkspace = get_param('slexAircraftExample','modelworkspace'); assignin(modelWorkspace,'Ts',1) % Simulate again out_2 = sim('slexAircraftExample');
Сравните запуски и смотрите результаты
Используйте Simulink.sdi.compareRuns
функция, чтобы сравнить данные из симуляций. Затем смотрите match
свойство результата сигнала видеть, находились ли сигналы в пределах допуска по умолчанию 0.
% Get run data runIDs = Simulink.sdi.getAllRunIDs; runID1 = runIDs(end - 1); runID2 = runIDs(end); % Compare runs diffRun1 = Simulink.sdi.compareRuns(runID1,runID2); % Get signal result sig1Result1 = getResultByIndex(diffRun1,1); sig2Result1 = getResultByIndex(diffRun1,2); % Check whether signals matched sig1Result1.Status
ans = OutOfTolerance
sig2Result1.Status
ans = OutOfTolerance
Сравните запуски с допусками сигнала
Сигналы не соответствовали в допуске по умолчанию 0. Чтобы далее анализировать эффект изменения постоянной времени, добавьте допуски сигнала в сравнение с базовыми свойствами сигнала определить допуск, требуемый для передачи. Этот пример использует комбинацию времени и абсолютных допусков.
% Get signal object for sigID1 run1 = Simulink.sdi.getRun(runID1); sigID1 = getSignalIDByIndex(run1,1); sigID2 = getSignalIDByIndex(run1,2); sig1 = Simulink.sdi.getSignal(sigID1); sig2 = Simulink.sdi.getSignal(sigID2); % Set tolerances for q, rad/sec sig1.AbsTol = 0.1; sig1.TimeTol = 0.6; % Set tolerances for alpha, rad sig2.AbsTol = 0.2; sig2.TimeTol = 0.8; % Run the comparison again diffRun2 = Simulink.sdi.compareRuns(runID1,runID2); sig1Result2 = getResultByIndex(diffRun2,1); sig2Result2 = getResultByIndex(diffRun2,2); % Check the result sig1Result2.Status
ans = WithinTolerance
sig2Result2.Status
ans = WithinTolerance
В этом примере показано, как создать отчеты с помощью Инспектора Данных моделирования программируемый интерфейс. Можно создать отчет для нанесенных на график сигналов в панели Inspect или для данных о сравнении в Сравнить панели. Этот пример сначала генерирует данные путем симуляции модели, затем показывает, как создать Inspect Signals
отчет. Чтобы запустить пример точно как показано, гарантируйте, что Инспектор Данных моделирования репозиторий запускает пустой с Simulink.sdi.clear
функция.
Сгенерируйте данные
Этот пример генерирует данные с помощью модели ex_sldemo_absbrake
с двумя различными желаемыми отношениями промаха.
% Ensure Simulation Data Inspector is empty Simulink.sdi.clear % Open model load_system('ex_sldemo_absbrake') % Set slip ratio and simulate model set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.24') sim('ex_sldemo_absbrake'); % Set new slip ratio and simulate model again set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.25') sim('ex_sldemo_absbrake');
Постройте сигналы в панели Inspect
Inspect Signals
отчет включает в себя все сигналы, построенные в графической области просмотра панели Inspect и всех отображенных метаданных для нанесенных на график сигналов.
% Get Simulink.sdi.Run objects runIDs = Simulink.sdi.getAllRunIDs; runID1 = runIDs(end-1); runID2 = runIDs(end); run1 = Simulink.sdi.getRun(runID1); run2 = Simulink.sdi.getRun(runID2); % Get Simulink.sdi.Signal objects for slp signal run1_slp = run1.getSignalByIndex(4); run2_slp = run2.getSignalByIndex(4); % Plot slp signals run1_slp.plotOnSubPlot(1, 1, true) run2_slp.plotOnSubPlot(1, 1, true)
Создайте отчет сигналов, нанесенных на график в панели Inspect
Можно включать больше данных в отчет путем добавления большего количества столбцов с помощью Инспектора Данных моделирования пользовательский интерфейс, или можно указать информацию, вы хотите в отчете программно с Парами "имя-значение" и классом перечисления Simulink.sdi.SignalMetaData
. В этом примере показано, как задать данные в отчете программно.
% Specify report parameters reportType = 'Inspect Signals'; reportName = 'Data_Report.html'; signalMetadata = [Simulink.sdi.SignalMetaData.Run, ... Simulink.sdi.SignalMetaData.Line, ... Simulink.sdi.SignalMetaData.BlockName, ... Simulink.sdi.SignalMetaData.SignalName]; Simulink.sdi.report('ReportToCreate', reportType, 'ReportOutputFile', ... reportName, '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)
Инспектор данных моделирования