Можно использовать возможности Моделирования Data Inspector из командной строки MATLAB® с помощью Моделирования API Data Inspector.
Моделирование Data Inspector организует данные в выполнениях и сигналах, присваивая уникальную числовую идентификацию каждому выполнению и сигналу. Некоторое Моделирование API-функции Data Inspector использует выполнение и идентификаторы сигнала к справочным данным, вместо того, чтобы принять выполнение или сам сигнал как входной параметр. Чтобы получить доступ к идентификаторам выполнения в рабочей области, можно использовать Simulink.sdi.getAllRunIDs или Simulink.sdi.getRunIDByIndex. Можно получить доступ к идентификаторам сигнала через объект Simulink.sdi.Run с помощью метода Simulink.sdi.Run.getSignalIDByIndex.
Simulink.sdi.Run и классы Simulink.sdi.Signal обеспечивают доступ к вашим данным и позволяют вам просматривать и изменять выполнение и метаданные сигнала. Можно изменить Моделирование настройки Data Inspector с помощью функций как Simulink.sdi.setSubPlotLayout, Simulink.sdi.setRunNamingRule и Simulink.sdi.setMarkersOn. Чтобы восстановить настройки по умолчанию Data Inspector Моделирования, используйте Simulink.sdi.clearPreferences.
Этот пример показывает, как создать выполнение, добавьте данные к нему, и затем просмотрите данные в Моделировании Data Inspector.
Создайте данные для выполнения
Этот пример создает объекты timeseries для синуса и косинуса. Чтобы визуализировать ваши данные, Моделирование, Data Inspector требует, по крайней мере, временного вектора, который соответствует вашим данным.
% 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';
Создайте моделирование запущенный Data Inspector и добавьте свои данные
Чтобы предоставить Моделированию доступ Data Inspector к вашим данным, используйте метод create и создайте выполнение. Этот пример изменяет некоторые свойства выполнения помочь идентифицировать данные. Можно легко просмотреть выполнение и предупредить о свойствах с Моделированием Data Inspector.
% 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, который может использоваться, чтобы построить график сигнала в Моделировании Data Inspector. Можно также программно управлять аспектами внешнего вида графика, такими как цвет и стиль строки, представляющей сигнал. Этот пример настраивает размещение подграфика и характеристики сигнала.
% 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
Закройте моделирование Data Inspector и сохраните свои данные
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
Этот пример показывает, как сравнить выполнения данных моделирования и анализировать результаты сравнения с Моделированием Data Inspector программируемый интерфейс.
Сгенерируйте выполнения данных моделирования
Моделируйте модель с различными значениями Desired relative slip, чтобы создать выполнения данных моделирования, чтобы анализировать с Моделированием Data Inspector программируемый интерфейс.
% 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 и Моделирование Data Inspector, чтобы оценить эффект изменения временной константы для фильтра нижних частот после входного параметра управления.
Настройка
Загрузите модель и отметьте 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
Этот пример показывает, как создать отчеты с помощью Моделирования Data Inspector программируемый интерфейс. Можно создать отчет для нанесенных на график сигналов в Осмотреть панели или для данных сравнения в Сравнить панели. Этот пример сначала генерирует данные путем моделирования модели, затем показывает, как создать отчет Inspect Signals. Чтобы запустить пример точно как показано, гарантируйте, что Моделирование репозиторий Data Inspector запускается пустой с функции 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 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)
Создайте отчет сигналов, нанесенных на график в, осматривают панель
Можно включать больше данных в отчет путем добавления большего количества столбцов с помощью Моделирования Data Inspector пользовательский интерфейс, или можно задать информацию, вы хотите в отчете программно с Парами "имя-значение" и классом перечисления 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)