Можно использовать возможности Инспектора Данных моделирования из командной строки 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 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 = aircraftRun.getSignalIDByIndex(1); signalID2 = aircraftRun.getSignalIDByIndex(2); if (aircraftRun.isValidSignalID(signalID1)) % Change signal tolerance signal1 = Simulink.sdi.getSignal(signalID1); signal1.AbsTol = 0.1; end if (aircraftRun.isValidSignalID(signalID1) && aircraftRun.isValidSignalID(signalID2)) % Compare signals sigDiff = Simulink.sdi.compareSignals(signalID1,signalID2); % Check whether signals match within tolerance match = sigDiff.match end
match = logical
0
Этот пример показывает, как сравнить выполнения данных моделирования и анализировать результаты сравнения с Инспектором Данных моделирования программируемый интерфейс.
Сгенерируйте выполнения данных моделирования
Моделируйте модель с различными значениями 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') 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') 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 = runResult.getResultByIndex(1);
figure(1)
plot(signalResult_Ww.Diff)
Можно изменить значения допуска на основе сигнала сигналом, чтобы оценить эффект изменения параметра модели. Этот пример использует модель slexAircraftExample
и Инспектора Данных моделирования, чтобы оценить эффект изменения временной константы для фильтра нижних частот после входа управления.
Настройка
Загрузите модель и отметьте 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 sim('slexAircraftExample')
Измените параметр модели
Измените параметр модели Ts
в рабочем пространстве модели, чтобы изменить временную константу входного фильтра нижних частот.
% Change input filter time constant modelWorkspace = get_param('slexAircraftExample','modelworkspace'); modelWorkspace.assignin('Ts',1) % Simulate again 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 = diffRun1.getResultByIndex(1); sig2Result1 = diffRun1.getResultByIndex(2); % Check whether signals matched sig1Result1.Match
ans = logical
0
sig2Result1.Match
ans = logical
0
Сравните выполнения с допусками сигнала
Сигналы не соответствовали в допуске по умолчанию 0. Чтобы далее анализировать эффект изменения временной константы, добавьте допуски сигнала в сравнение с базовыми свойствами сигнала определить допуск, требуемый для передачи. Этот пример использует комбинацию времени и абсолютных допусков.
% Get signal object for sigID1 run1 = Simulink.sdi.getRun(runID1); sigID1 = run1.getSignalIDByIndex(1); sigID2 = run1.getSignalIDByIndex(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 = diffRun2.getResultByIndex(1); sig2Result2 = diffRun2.getResultByIndex(2); % Check the result sig1Result2.Match
ans = logical
1
sig2Result2.Match
ans = logical
1
Этот пример показывает, как создать отчеты с помощью Инспектора Данных моделирования программируемый интерфейс. Можно создать отчет для нанесенных на график сигналов в Осмотреть панели или для данных о сравнении в Сравнить панели. Этот пример сначала генерирует данные путем симуляции модели, затем показывает, как создать отчет 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')
ans = Simulink.SimulationOutput: sldemo_absbrake_output: [1x1 Simulink.SimulationData.Dataset] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char]
% Set new slip ratio and simulate model again set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.25') sim('ex_sldemo_absbrake')
ans = Simulink.SimulationOutput: sldemo_absbrake_output: [1x1 Simulink.SimulationData.Dataset] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char]
Постройте сигналы в осмотреть панели
Отчет Inspect Signals
включает в себя все сигналы, построенные в графической области просмотра Осмотреть панели и всех отображенных метаданных для нанесенных на график сигналов.
% 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)
Создайте отчет сигналов, нанесенных на график в, осматривают панель
Можно включать больше данных в отчет путем добавления большего количества столбцов с помощью Инспектора Данных моделирования пользовательский интерфейс, или можно указать информацию, вы хотите в отчете программно с Парами "имя-значение" и классом перечисления 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
и сохраните начальный набор регистрируемых сигналов.
% Load model load_system sldemo_fuelsys % Get Simulink.HMI.InstrumentedSignals object initSigs = get_param('sldemo_fuelsys', 'InstrumentedSignals'); % Save logging configuration to file for future use save initial_instSigs.mat initSigs
Удалите все значки журналирования
Возвратитесь к базовой линии никаких регистрируемых сигналов, таким образом, можно легко выбрать различную настройку сигналов регистрировать.
% Clear all logging signals set_param('sldemo_fuelsys', 'InstrumentedSignals', [])
Восстановите сохраненную настройку журналирования
После работы с различным набором регистрируемых сигналов можно легко восстановить сохраненную настройку с объектом Simulink.HMI.InstrumentedSignals
.
% Load the saved configuration load initial_instSigs.mat % Restore logging configuration set_param('sldemo_fuelsys', 'InstrumentedSignals', initSigs)
Инспектор данных моделирования