Simulink.sdi.compareRuns

Сравните данные в двух запусках симуляции

Описание

пример

diffResult = Simulink.sdi.compareRuns(runID1,runID2) сравнивает данные в запусках, которые соответствуют runID1 и runID2 и возвращает результат в Simulink.sdi.DiffRunResult объект diffResult. Сравнение использует Инспектора Данных моделирования алгоритм сравнения. Для получения дополнительной информации об алгоритме, смотрите, Как Инспектор Данных моделирования Сравнивает Данные.

пример

diffResult = Simulink.sdi.compareRuns(runID1,runID2,Name,Value) сравнивает запуски симуляции, которые соответствуют runID1 и runID2 использование опций задано одним или несколькими Name,Value парные аргументы. Для получения дополнительной информации о том, как опции могут влиять на сравнение, смотрите, Как Инспектор Данных моделирования Сравнивает Данные.

Примеры

свернуть все

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

Создайте данные моделирования

Во-первых, создайте данные моделирования путем симуляции модели это данные логов. Этот пример использует ex_sldemo_absbrake модель и анализирует эффект изменения Desired relative slip значение.

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

load_system('ex_sldemo_absbrake')

set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.24')
out_1 = sim('ex_sldemo_absbrake');

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

set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.25')
out_2 = sim('ex_sldemo_absbrake');

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

Во-первых, используйте 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: 2
      WithinTolerance: 2
            Unaligned: 0
        UnitsMismatch: 0
                Empty: 0
             Canceled: 0
          EmptySynced: 0
     DataTypeMismatch: 0
         TimeMismatch: 0
    StartStopMismatch: 0
          Unsupported: 0

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

Постройте результаты сравнения

Можно использовать графики анализировать результаты сравнения. Доступ к результату сигнала для Ww сигнал от DiffRunResult объект, который содержит результаты сравнения с помощью getResultByIndex функция. Проверяйте Status свойство Simulink.sdi.DiffSignalResult объект.

signalResult_Ww = getResultByIndex(runResult,1)
signalResult_Ww = 
  DiffSignalResult with properties:

           Status: OutOfTolerance
          AlignBy: 'Path'
        SignalID1: 43582
        SignalID2: 43628
    MaxDifference: 12.4878
            Sync1: [1x1 timeseries]
            Sync2: [1x1 timeseries]
             Diff: [1x1 timeseries]

signalResult_Ww.Status
ans = 
OutOfTolerance

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

figure(1)
plot(signalResult_Ww.Diff)

Сохраните результаты сравнения

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

saveResult(runResult,'desiredSlipResults')

Файл MLDATX desiredSlipResults создается в рабочей директории. Используйте Simulink.sdi.load функционируйте или open функционируйте, чтобы просмотреть результаты в файле MLDATX.

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

Сконфигурируйте модель

Загрузите модель и отметьте представляющие интерес сигналы для логгирования. Этот пример данные логов для q и alpha сигналы.

load_system('slexAircraftExample')

Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',3,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')

Запустите симуляции

Запуститесь симуляции с различным lowpass фильтруют постоянные времени, чтобы сгенерировать результаты выдержать сравнение. slexAircraftExample модель хранит переменные, сопоставленные моделью в рабочем пространстве модели. Чтобы изменить значение постоянной времени, получите доступ к рабочему пространству модели и используйте assignin функция.

out1 = sim('slexAircraftExample');

modelWorkspace = get_param('slexAircraftExample','modelworkspace');
assignin(modelWorkspace,'Ts',1)

out2 = sim('slexAircraftExample');

Доступ и сравнивает результаты симуляции

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

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

Используйте Simulink.sdi.compareRuns функция, чтобы сравнить данные из симуляций. Затем смотрите Status свойство результата сигнала видеть, находились ли сигналы в пределах допуска по умолчанию 0.

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

sig1Result1 = getResultByIndex(diffRun1,1);
sig2Result1 = getResultByIndex(diffRun1,2);

sig1Result1.Status
ans = 
OutOfTolerance
sig2Result1.Status
ans = 
OutOfTolerance

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

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

Задавать допуски, первый доступ Simulink.sdi.Signal объекты, которые соответствуют каждому сигналу в запусках, которые вы хотите сравнить.

run1 = Simulink.sdi.getRun(runIDTs1);
sigID1 = getSignalIDByIndex(run1,1);
sigID2 = getSignalIDByIndex(run1,2);

sig1 = Simulink.sdi.getSignal(sigID1);
sig2 = Simulink.sdi.getSignal(sigID2);

Проверяйте Name свойство идентифицировать каждый Signal объект.

sig1.Name
ans = 
'q, rad/sec'
sig2.Name
ans = 
'alpha, rad'

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

sig1.AbsTol = 0.1;
sig1.TimeTol = 0.6;

Задайте абсолютный допуск 0.2 и допуск времени 0.8 для alpha сигнал с помощью AbsTol и TimeTol свойства alpha предупредите об объекте в базовом запуске.

sig2.AbsTol = 0.2;
sig2.TimeTol = 0.8;

Сравните запуски снова и получите доступ к результатам.

diffRun2 = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);
sig1Result2 = getResultByIndex(diffRun2,1);
sig2Result2 = getResultByIndex(diffRun2,2);

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

sig1Result2.Status
ans = 
WithinTolerance
sig2Result2.Status
ans = 
WithinTolerance

Можно использовать Simulink.sdi.compareRuns функция, чтобы сравнить данные сигнала и метаданные, включая тип данных и запуститься и времена остановки. Одно сравнение может проверять на несоответствия в одной или нескольких частях метаданных. Когда вы проверяете на несоответствия в метаданных сигнала, Summary свойство Simulink.sdi.DiffRunResult объект может отличаться от основного сравнения потому что Status свойство для Simulink.sdi.DiffSignalResult объект может указать на несоответствие метаданных. Можно сконфигурировать сравнения с помощью Simulink.sdi.compareRuns функция для импортированных данных и для данных регистрируется от симуляции.

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

Создайте данные о рабочей области

Simulink.sdi.compareRuns функция сравнивает данные временных рядов. Создайте данные для синусоиды, чтобы использовать в качестве базового сигнала, с помощью timeseries формат. Дайте timeseries имя Wave Data.

time = 0:0.1:20;
sig1vals = sin(2*pi/5*time);
sig1_ts = timeseries(sig1vals,time);
sig1_ts.Name = 'Wave Data';

Создайте вторую синусоиду, чтобы выдержать сравнение с базовым сигналом. Используйте немного отличающийся временной вектор и ослабьте сигнал, таким образом, два сигнала не идентичны. Бросьте данные сигнала к single тип данных. Также назовите этот timeseries объект Wave Data. Инспектор Данных моделирования алгоритм сравнения выровняет эти сигналы для сравнения с помощью имени.

time2 = 0:0.1:22;
sig2vals = single(0.98*sin(2*pi/5*time2));
sig2_ts = timeseries(sig2vals,time2);
sig2_ts.Name = 'Wave Data';

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

Simulink.sdi.compareRuns функция сравнивает данные, содержавшиеся в Simulink.sdi.Run объекты. Используйте Simulink.sdi.createRun функция, чтобы создать запуски в Инспекторе Данных моделирования для данных. Simulink.sdi.createRun функция возвращает ID запуска для каждого созданного запуска.

runID1 = Simulink.sdi.createRun('Baseline Run','vars',sig1_ts);
runID2 = Simulink.sdi.createRun('Compare to Run','vars',sig2_ts);

Можно использовать Simulink.sdi.compareRuns функция, чтобы сравнить запуски. Алгоритм сравнения преобразует данные сигнала в double тип данных и синхронизирует данные сигнала прежде, чем вычислить сигнал различия.

basic_DRR = Simulink.sdi.compareRuns(runID1,runID2);

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

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

Различие между сигналами вне допуска.

Сравните запуски и проверку на соответствие типа данных

В зависимости от ваших системных требований можно хотеть типы данных для сигналов, которые вы сравниваете с соответствием. Можно использовать Simulink.sdi.compareRuns функция, чтобы сконфигурировать алгоритм сравнения, чтобы проверять на и сообщить о неверных типах данных.

dataType_DRR = Simulink.sdi.compareRuns(runID1,runID2,'DataType','MustMatch');
dataType_DRR.Summary
ans = struct with fields:
       OutOfTolerance: 0
      WithinTolerance: 0
            Unaligned: 0
        UnitsMismatch: 0
                Empty: 0
             Canceled: 0
          EmptySynced: 0
     DataTypeMismatch: 1
         TimeMismatch: 0
    StartStopMismatch: 0
          Unsupported: 0

Результатом сравнения сигнала является теперь DataTypeMismatch потому что данными для базового сигнала является double тип данных, в то время как данными для сигнала по сравнению с базовой линией является single тип данных.

Сравните запуски и проверяйте на соответствие запуска и времени остановки

Можно использовать Simulink.sdi.compareRuns функция, чтобы сконфигурировать алгоритм сравнения, чтобы проверять, имеют ли выровненные сигналы то же самое, запускается и времена остановки.

startStop_DRR = Simulink.sdi.compareRuns(runID1,runID2,'StartStop','MustMatch');
startStop_DRR.Summary
ans = struct with fields:
       OutOfTolerance: 0
      WithinTolerance: 0
            Unaligned: 0
        UnitsMismatch: 0
                Empty: 0
             Canceled: 0
          EmptySynced: 0
     DataTypeMismatch: 0
         TimeMismatch: 0
    StartStopMismatch: 1
          Unsupported: 0

Результатом сравнения сигнала является теперь StartStopMismatch потому что сигналы, созданные в рабочей области, имеют различные времена остановки.

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

Сгенерируйте данные моделирования, чтобы выдержать сравнение

Запустите путем загрузки slexAircraftExample система и отмечающие представляющие интерес сигналы для логгирования.

load_system('slexAircraftExample')

Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot',1,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',... 
    4,'on')

Этот пример запускает две симуляции slexAircraftExample модель с различными значениями для переменной Ts. Используйте get_param получить доступ к рабочему пространству модели для slexAircraftExample модель. Затем присвойте значение для переменной и запустите первую симуляцию.

modelWorkspace = get_param('slexAircraftExample','modelworkspace');
modelWorkspace.assignin('Ts',0.1);

out_1 = sim('slexAircraftExample');

Измените значение Ts и запустите вторую симуляцию. Затем,

modelWorkspace.assignin('Ts',0.2);

out_2 = sim('slexAircraftExample');
 

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

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

Задайте критерии выравнивания сравнения

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

alignMethods = [Simulink.sdi.AlignType.SignalName
               Simulink.sdi.AlignType.BlockPath
               Simulink.sdi.AlignType.SID];

Сравните запуски с заданными критериями выравнивания

Сравните данные моделирования в своих двух запусках, с помощью критериев выравнивания, которые вы задали. Сравнение использует маленький допуск времени, чтобы составлять эффект различий в размере шага, используемом решателем на переходе входа прямоугольной волны.

diffResults = Simulink.sdi.compareRuns(runID1,runID2,'align',alignMethods,...
    'timetol',0.005);

Проверяйте результаты сравнения на выровненные сигналы

Можно использовать getResultByIndex метод, чтобы получить доступ к сравнению приводит для выровненных сигналов к запускам, которые вы сравнили. Можно использовать Count свойство Simulink.sdi.DiffRunResult возразите, чтобы настроить for цикл, чтобы проверять Status свойство для каждого Simulink.sdi.DiffSignalResult объект.

numComparisons = diffResults.count;

for k = 1:numComparisons
    resultAtIdx = getResultByIndex(diffResults,k);
    
    sigID1 = resultAtIdx.signalID1;
    sigID2 = resultAtIdx.signalID2;
    
    sig1 = Simulink.sdi.getSignal(sigID1);
    sig2 = Simulink.sdi.getSignal(sigID2);
    
    displayStr = 'Signals %s and %s: %s \n';
    fprintf(displayStr,sig1.Name,sig2.Name,resultAtIdx.Status);
end
Signals alpha, rad and alpha, rad: OutOfTolerance 
Signals Stick and Stick: WithinTolerance 

Входные параметры

свернуть все

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

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

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'abstol',x,'align',alignOpts

Опции выравнивания сигнала в виде разделенной запятой пары, состоящей из 'Align' и массив строк или массив векторов символов.

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

ЗначениеВыравнивается
Simulink.sdi.AlignType.BlockPathПуть к исходному блоку для сигнала
Simulink.sdi.AlignType.SIDИдентификатор Simulink® Определяет местоположение Компонентов Схемы Используя Идентификаторы Simulink
Simulink.sdi.AlignType.SignalNameИмя сигнала
Simulink.sdi.AlignType.DataSourceПуть переменной в рабочей области MATLAB®

Пример: [Simulink.sdi.AlignType.SignalName,Simulink.sdi.AlignType.SID] задает выравнивание сигнала по наименованию и затем SID.

Глобальный абсолютный допуск с положительным знаком, используемый во всех сигналах в сравнении запуска в виде разделенной запятой пары, состоящей из 'AbsTol' и скаляр. Для получения дополнительной информации о том, как допуски используются в сравнениях, см. Спецификацию Допуска.

Пример: 0.5

Типы данных: double

Глобальный относительный допуск с положительным знаком, используемый во всех сигналах в сравнении запуска в виде разделенной запятой пары, состоящей из 'RelTol' и скаляр. Относительный допуск выражается как дробный множитель. Например, 0.1 задает 10-процентный допуск. Для получения дополнительной информации о том, как относительный допуск применяется в Инспекторе Данных моделирования, см. Спецификацию Допуска.

Пример: 0.1

Типы данных: double

Глобальный допуск времени с положительным знаком, используемый во всех сигналах в сравнении запуска в виде разделенной запятой пары, состоящей из 'TimeTol' и скаляр. Задайте допуск времени в модулях секунд. Для получения дополнительной информации о допусках в Инспекторе Данных моделирования, см. Спецификацию Допуска.

Пример: 0.2

Типы данных: double

Задайте пару "имя-значение" 'DataType','MustMatch' когда это необходимо, сравнение, чтобы быть чувствительным к неверным типам данных в сравненных сигналах. Когда вы задаете эту пару "имя-значение", алгоритм сравнивает типы данных для выровненных сигналов прежде, чем синхронизировать и сравнить данные сигнала.

Simulink.sdi.compareRuns функция не сравнивает типы данных выровненных сигналов, если вы не задаете эту пару "имя-значение". Алгоритм сравнения может сравнить сигналы с различными типами данных.

Когда типы данных сигнала не соответствуют, Status свойство Simulink.sdi.DiffSignalResult объект для результата установлен в DataTypeMismatch.

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

Задайте пару "имя-значение" 'Time','MustMatch' когда это необходимо, сравнение, чтобы быть чувствительным к несоответствиям во временных векторах сравненных сигналов. Когда вы задаете эту пару "имя-значение", алгоритм сравнивает временные векторы выровненных сигналов прежде, чем синхронизировать и сравнить данные сигнала.

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

Когда временные векторы для сигналов не соответствуют, Status свойство Simulink.sdi.DiffSignalResult объект для результата установлен в TimeMismatch.

Когда вы указываете, что временные векторы должны совпадать и сконфигурировать сравнение, чтобы остановиться на первом несоответствии, несоответствие временного вектора останавливает сравнение. Остановленное сравнение не может вычислить результаты для всех сигналов.

Задайте пару "имя-значение" 'StartStop','MustMatch' когда это необходимо, сравнение, чтобы быть чувствительным к несоответствиям в запуске сигнала и временах остановки. Когда вы задаете эту пару "имя-значение", алгоритм сравнивает запуск и времена остановки для выровненных сигналов прежде, чем синхронизировать и сравнить данные сигнала.

Когда времена запуска и времена остановки не соответствуют, Status свойство Simulink.sdi.DiffSignalResult объект для результата установлен в StartStopMismatch.

Когда вы указываете, что запускаются, и времена остановки должны совпадать и сконфигурировать сравнение, чтобы остановиться на первом несоответствии, несоответствие запуска или времени остановки останавливает сравнение. Остановленное сравнение не может вычислить результаты для всех сигналов.

Останавливается ли сравнение, не сравнивая остающиеся сигналы на первом обнаруженном несоответствии в виде разделенной запятой пары, состоящей из 'StopOnFirstMismatch' и 'Metadata' или 'Any'. Остановленное сравнение не может вычислить результаты для всех сигналов и может возвратить несовпадающий результат более быстро.

  • Metadata — Несоответствие в метаданных для выровненных сигналов заставляет сравнение останавливаться. Сравнения метаданных происходят прежде, чем сравнить данные сигнала.

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

  • Any — Несоответствие в метаданных или данных сигнала для выровненных сигналов заставляет сравнение останавливаться.

Выходные аргументы

свернуть все

Результаты сравнения, возвращенные как Simulink.sdi.DiffRunResult объект.

Представленный в R2011b