Смотрите и сравните данные программно

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

Смотрите также

Похожие темы