Simulink.sdi.compareRuns

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

Синтаксис

diffResult = Simulink.sdi.compareRuns(runID1,runID2)
diffResult = Simulink.sdi.compareRuns(runID1,runID2,Name,Value)

Описание

пример

diffResult = Simulink.sdi.compareRuns(runID1,runID2) сравнивает данные в выполнениях, соответствующих runID1 и runID2, возвращая результат в объекте Simulink.sdi.DiffRunResult, diffResult.

пример

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

Примеры

свернуть все

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

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

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

Настройка

Загрузите модель и отметьте 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

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

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

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

% Load the model slexAircraftExample
load_system('slexAircraftExample')

% Mark signals for logging
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot',1,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',... 
    4,'on')

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

% Get the model workspace and set the value of variable Ts
modelWorkspace = get_param('slexAircraftExample','modelworkspace');
modelWorkspace.assignin('Ts',0.1);

% Configure model "slexAircraftExample" for logging and simulate
sim('slexAircraftExample')

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

% Modify the value of model workspace variable Ts
modelWorkspace.assignin('Ts',0.2);
 
% Simulate again with the new value of Ts
sim('slexAircraftExample')
      
% Get run IDs for simulations
runIDs = Simulink.sdi.getAllRunIDs;
runID1 = runIDs(end-1);
runID2 = runIDs(end);

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

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

% Define the alignment criteria for the comparison to align signals by
% name, then by block path, then by SID
alignMethods = [Simulink.sdi.AlignType.SignalName
               Simulink.sdi.AlignType.BlockPath
               Simulink.sdi.AlignType.SID];

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

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

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

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

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

% Check the number of comparisons in the result
numComparisons = diffResults.count;
      
% Display result for each signal in command window
for k = 1:numComparisons
    
    resultAtIdx = diffResults.getResultByIndex(k);
 
    % Get signal IDs for each comparison result
    sigID1 = resultAtIdx.signalID1;
    sigID2 = resultAtIdx.signalID2;
    
    sig1 = Simulink.sdi.getSignal(sigID1);
    sig2 = Simulink.sdi.getSignal(sigID2);
 
    % Display whether signals match
    displayStr = 'Signals %s and %s %s \n';
    if resultAtIdx.match
       fprintf(displayStr,sig1.Name,sig2.Name,'match');
    else
       fprintf(displayStr,sig1.Name,sig2.Name,'do not match');
    end
    
end
Signals alpha, rad and alpha, rad do not match 
Signals Stick and Stick match 

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

свернуть все

Числовая идентификация для Baseline, запущенного в сравнении.

Числовая идентификация для Compare to, запущенного в сравнении.

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

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

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

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

ЗначениеВыравнивается
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.

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

Пример: 0.5

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

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

Пример: 0.1

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

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

Пример: 0.2

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

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

свернуть все

Объект Simulink.sdi.DiffRunResult, который обеспечивает доступ к результатам сравнения.

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