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

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

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

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

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

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

Создайте данные для запуска

Создайте 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 функционируйте, чтобы открыть Инспектора Данных моделирования.

Simulink.sdi.view

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

Отобразите данные на графике в инспекторе данных моделирования

Используйте getSignalByIndex функционируйте, чтобы получить доступ к Simulink.sdi.Signal объекты, которые содержат данные сигнала. Можно использовать Simulink.sdi.Signal свойства объектов, чтобы задать стиль линии и цвет для сигнала и построить его в Инспекторе Данных моделирования. Задайте 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- 1 размещение подграфика в Инспекторе Данных моделирования область графического вывода. Затем используйте plotOnSubplot функционируйте, чтобы построить сигнал синуса на главном подграфике и сигнал косинуса на более низком подграфике.

Simulink.sdi.setSubPlotLayout(2,1);

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

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

Когда вы закончили смотреть нанесенные на график данные сигнала, можно закрыть Инспектора Данных моделирования и сохранить сеанс в файл MLDATX.

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

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

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

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

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 функция. Stick сигнал является базовой линией и alpha, rad сигнал является сигналом выдержать сравнение с базовой линией.

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

    OutOfTolerance

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

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

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

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

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

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

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

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

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 = 
  ComparisonSignalStatus enumeration

    OutOfTolerance

alphaResult.Status
ans = 
  ComparisonSignalStatus enumeration

    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 = 
  ComparisonSignalStatus enumeration

    WithinTolerance

alphaResult2.Status
ans = 
  ComparisonSignalStatus enumeration

    WithinTolerance

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

Похожие темы