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 парные аргументы и возвращают результат сравнения в 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')
out_1 = 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')
out_2 = 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 = getResultByIndex(runResult,1);
figure(1)
plot(signalResult_Ww.Diff)

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

Настройка

Загрузите модель и отметьте 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
out_1 = sim('slexAircraftExample');

Измените параметр модели

Измените параметр модели Ts в рабочем пространстве модели, чтобы изменить постоянную времени входа фильтр lowpass.

% Change input filter time constant
modelWorkspace = get_param('slexAircraftExample','modelworkspace');
assignin(modelWorkspace,'Ts',1)

% Simulate again
out_2 = 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 = getResultByIndex(diffRun1,1);
sig2Result1 = getResultByIndex(diffRun1,2);

% Check whether signals matched
sig1Result1.Status
ans = 
OutOfTolerance
sig2Result1.Status
ans = 
OutOfTolerance

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

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

% Get signal object for sigID1
run1 = Simulink.sdi.getRun(runID1);
sigID1 = getSignalIDByIndex(run1,1);
sigID2 = getSignalIDByIndex(run1,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 = getResultByIndex(diffRun2,1);
sig2Result2 = getResultByIndex(diffRun2,2);

% Check the result
sig1Result2.Status
ans = 
WithinTolerance
sig2Result2.Status
ans = 
WithinTolerance

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

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

Запустите путем загрузки 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
out_1 = sim('slexAircraftExample');

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

% Modify the value of model workspace variable Ts
modelWorkspace.assignin('Ts',0.2);
 
% Simulate again with the new value of Ts
out_2 = 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';
    fprintf(displayStr,sig1.Name,sig2.Name,resultAtIdx.Status);
end
Signals alpha, rad and alpha, rad: OutOfTolerance 
Signals Stick and Stick: WithinTolerance 

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

свернуть все

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

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

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

Задайте дополнительные разделенные запятой пары Name,Value аргументы. 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