Можно использовать возможности Инспектора Данных моделирования из командной строки 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)
Инспектор данных моделирования