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

Можно использовать возможности Данных моделирования Inspector из MATLAB® командная строка с использованием Данных моделирования Inspector API.

Данные моделирования Inspector организуют данные в запусках и сигналах, присваивая уникальную числовую идентификацию каждому запуску и сигналу. Некоторые функции Данных моделирования Inspector API используют идентификаторы запуска и сигнала для ссылки на данные, а не для принятия самого запуска или сигнала в качестве входа. Для доступа к идентификаторам запуска в рабочей области можно использовать Simulink.sdi.getAllRunIDs или Simulink.sdi.getRunIDByIndex. Вы можете получить доступ к идентификаторам сигнала через Simulink.sdi.Run объект с использованием getSignalIDByIndex способ.

The Simulink.sdi.Run и Simulink.sdi.Signal классы обеспечивают доступ к вашим данным и позволяют вам просматривать и изменять метаданные запуска и сигнала. Можно изменить настройки Данные Моделирования Inspector, используя такие функции, как Simulink.sdi.setSubPlotLayout, Simulink.sdi.setRunNamingRule, и Simulink.sdi.setMarkersOn. Чтобы восстановить настройки Данных моделирования Inspector по умолчанию, используйте Simulink.sdi.clearPreferences.

Создайте запуск и просмотрите данные

В этом примере показов, как создать запуск, добавить к нему данные и затем просмотреть данные в Данные моделирования Inspector.

Создание данных для запуска

Создание timeseries объекты, содержащие данные для синусоидального сигнала и косинусоидального сигнала. Дайте каждый timeseries объект - описательное имя.

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';

Создайте запуск и добавьте данные

Используйте Simulink.sdi.view функция для открытия Данные Моделирования Inspector.

Simulink.sdi.view

Чтобы импортировать данные в Данные моделирования Inspector из рабочей области, создайте Simulink.sdi.Run объект с использованием Simulink.sdi.Run.create функция. Добавьте информацию о запуске к его метаданным с помощью Name и Description свойства Run объект.

sinusoidsRun = Simulink.sdi.Run.create;
sinusoidsRun.Name = 'Sinusoids';
sinusoidsRun.Description = 'Sine and cosine signals with different frequencies';

Используйте add функция для добавления данных, созданных в рабочей области, в пустой запуск.

add(sinusoidsRun,'vars',sine_ts,cos_ts);

Постройте график данных в Данные моделирования Inspector

Используйте getSignalByIndex функция для доступа к Simulink.sdi.Signal объекты, которые содержат сигнальные данные. Можно использовать Simulink.sdi.Signal свойства объекта, чтобы задать стиль линии и цвет для сигнала и построить его в Данные моделирования Inspector. Задайте LineColor и LineDashed свойства для каждого сигнала.

sine_sig = getSignalByIndex(sinusoidsRun,1);
sine_sig.LineColor = [0 0 1];
sine_sig.LineDashed = '-.';

cos_sig = sinusoidsRun.getSignalByIndex(2);
cos_sig.LineColor = [0 1 0];
cos_sig.LineDashed = '--';

Используйте Simulink.sdi.setSubPlotLayout функция для конфигурирования 2-by- 1 subplot размещения в области построения графиков Данных моделирования Inspector. Затем используйте plotOnSubplot функция для построения графика синусоидального сигнала на верхней подграфике и косинусоидального сигнала на нижней подграфике.

Simulink.sdi.setSubPlotLayout(2,1);

plotOnSubPlot(sine_sig,1,1,true);
plotOnSubPlot(cos_sig,2,1,true);

Закройте Данные моделирования Inspector и сохраните данные

После завершения проверки данных нанесенного на график сигнала можно закрыть Данные моделирования Inspector и сохранить сеанс в файле MLDATX.

Simulink.sdi.close('sinusoids.mldatx')

Сравнение двух сигналов в одном и том же запуске

Можно использовать программный интерфейс Данные Моделирования Inspector для сравнения сигналов в течение одного запуска. Этот пример сравнивает входной и выходной сигналы продольного контроллера самолета.

Во-первых, загрузите сеанс, содержащий данные.

Simulink.sdi.load('AircraftExample.mldatx');

Используйте Simulink.sdi.Run.getLatest для доступа к последнему запуску в данных.

aircraftRun = Simulink.sdi.Run.getLatest;

Затем можно использовать Simulink.sdi.getSignalsByName функция для доступа к Stick сигнал, который представляет вход контроллера, и alpha, rad сигнал, который представляет выход.

stick = getSignalsByName(aircraftRun,'Stick');
alpha = getSignalsByName(aircraftRun,'alpha, rad');

Перед сравнением сигналов можно задать значение допуска, которое будет использоваться для сравнения. Сравнения используют значения допуска, заданные для базового сигнала в сравнении, поэтому установите абсолютную погрешность значение 0.1 на Stick сигнал.

stick.AbsTol = 0.1;

Теперь сравните сигналы, используя Simulink.sdi.compareSignals функция. The Stick сигнал является базовой линией, и alpha, rad сигнал является сигналом для сравнения с базовой линией.

comparisonResults = Simulink.sdi.compareSignals(stick.ID,alpha.ID);
match = comparisonResults.Status
match = 
OutOfTolerance

Результат сравнения вышел за пределы допуска. Можно использовать Simulink.sdi.view функция для открытия Данных моделирования Inspector для просмотра и анализа результатов сравнения.

Сравнение запусков с глобальным допуском

Можно задать значения глобальных допусков, которые будут использоваться при сравнении двух запусков симуляции. Значения глобального допуска применяются ко всем сигналам в запуск. В этом примере показано, как задать значения глобальных допусков для сравнения запусков и как анализировать и сохранить результаты сравнения.

Во-первых, загрузите файл сеанса, содержащий данные для сравнения. Файл сеанса содержит данные для четырех симуляций продольного контроллера самолета. В этом примере сравниваются данные из двух запусков, которые используют различные временные константы входного фильтра.

Simulink.sdi.load('AircraftExample.mldatx');

Для доступа к данным запуска для сравнения используйте Simulink.sdi.getAllRunIDs функция для получения идентификаторов запуска, которые соответствуют последним двум запускам симуляции.

runIDs = Simulink.sdi.getAllRunIDs;
runID1 = runIDs(end - 1);
runID2 = runIDs(end);

Используйте Simulink.sdi.compareRuns функция для сравнения запусков. Задайте глобальную относительную погрешность значение 0.2 и глобальное значение допуска по времени 0.5.

runResult = Simulink.sdi.compareRuns(runID1,runID2,'reltol',0.2,'timetol',0.5);

Проверьте Summary свойство возвращенного Simulink.sdi.DiffRunResult объект, чтобы увидеть, были ли сигналы в пределах значений допуска или вне допуска.

runResult.Summary
ans = struct with fields:
       OutOfTolerance: 0
      WithinTolerance: 3
            Unaligned: 0
        UnitsMismatch: 0
                Empty: 0
             Canceled: 0
          EmptySynced: 0
     DataTypeMismatch: 0
         TimeMismatch: 0
    StartStopMismatch: 0
          Unsupported: 0

Все три результата сравнения сигналов попали в заданный глобальный допуск.

Результаты сравнения можно сохранить в файле MLDATX с помощью saveResult функция.

saveResult(runResult,'InputFilterComparison');

Анализируйте данные моделирования с помощью допусков сигнала

Можно программно задать значения допуска сигнала для использования в сравнениях, выполненных с помощью Данных моделирования Inspector. В этом примере вы сравниваете данные, собранные путем симуляции модели продольной системы управления рейсом самолета. Каждая симуляция использует разное значение для временной константы входного фильтра и регистрирует входные и выходные сигналы. Вы анализируете эффект изменения постоянной времени путем сравнения результатов с помощью Данные Моделирования Inspector и допусков сигнала.

Во-первых, загрузите файл сеанса, который содержит данные моделирования.

Simulink.sdi.load('AircraftExample.mldatx');

Файл сеанса содержит четыре запусков. В этом примере вы сравниваете данные первых двух запусков в файле. Доступ к Simulink.sdi.Run объекты для первых двух запусков, загруженные из файла.

runIDs = Simulink.sdi.getAllRunIDs;
runIDTs1 = runIDs(end-3);
runIDTs2 = runIDs(end-2);

Теперь сравните эти два запусков, не задавая никаких допусков.

noTolDiffResult = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);

Используйте getResultByIndex функция для доступа к результатам сравнения для q и alpha сигналы.

qResult = getResultByIndex(noTolDiffResult,1);
alphaResult = getResultByIndex(noTolDiffResult,2);

Проверьте Status из каждого результата сигнала, чтобы увидеть, попадает ли результат сравнения в наш вне допуска.

qResult.Status
ans = 
OutOfTolerance
alphaResult.Status
ans = 
OutOfTolerance

В сравнении использовалось значение 0 для всех допусков, поэтому OutOfTolerance результат означает, что сигналы не идентичны.

Можно дополнительно проанализировать эффект постоянной времени, задав значения допуска для сигналов. Задайте допуски путем установки свойств для Simulink.sdi.Signal объекты, которые соответствуют сравниваемым сигналам. В сравнениях используются допуски, заданные для базовых сигналов. Этот пример задает временным допуском и абсолютной погрешностью.

Чтобы задать допуск, сначала получите доступ к Signal объекты из запуска опорной структуры.

runTs1 = Simulink.sdi.getRun(runIDTs1);
qSig = getSignalsByName(runTs1,'q, rad/sec');
alphaSig = getSignalsByName(runTs1,'alpha, rad');

Задайте абсолютную погрешность 0.1 и временной допуск 0.6 для q сигнал с использованием AbsTol и TimeTol свойства.

qSig.AbsTol = 0.1;
qSig.TimeTol = 0.6;

Задайте абсолютную погрешность 0.2 и временной допуск 0.8 для alpha сигнал.

alphaSig.AbsTol = 0.2;
alphaSig.TimeTol = 0.8;

Сравните результаты еще раз. Получите доступ к результатам сравнения и проверьте Status свойство для каждого сигнала.

tolDiffResult = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);
qResult2 = getResultByIndex(tolDiffResult,1);
alphaResult2 = getResultByIndex(tolDiffResult,2);

qResult2.Status
ans = 
WithinTolerance
alphaResult2.Status
ans = 
WithinTolerance

См. также

Похожие темы