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

Можно использовать возможности Моделирования 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 запускает программно

Этот пример показывает, как сравнить выполнения данных моделирования и анализировать результаты сравнения с Моделированием 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 программно

Этот пример показывает, как создать отчеты с помощью Моделирования 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)

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

Похожие темы

Была ли эта тема полезной?