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. Для получения дополнительной информации о том, как Моделирование Data Inspector выравнивает сигналы для сравнения, смотрите, Как Моделирование Data Inspector Сравнивает Данные.

Примеры

свернуть все

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

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

Моделируйте модель с различными значениями Desired relative slip, чтобы создать выполнения данных моделирования, чтобы анализировать с Моделированием Data Inspector программируемый интерфейс.

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

Настройка

Загрузите модель и отметьте 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 с двумя различными значениями Ts, чтобы сгенерировать два выполнения моделирования для сравнения.

% Configure model "slexAircraftExample" for logging and simulate
simOut = sim('slexAircraftExample', 'SaveOutput', 'on', 'SaveFormat', ...
                'Dataset', 'ReturnWorkspaceOutputs', 'on');
 
% Create a run from the simulation output
runID1 = Simulink.sdi.createRun('My Run', 'namevalue', {'simOut'}, ...
                                    {simOut});
 
% Get workspace and change workspace variable Ts
modelWorkspace = get_param('slexAircraftExample', 'modelworkspace');
modelWorkspace.assignin('Ts', 0.2);
 
% Simulate again
simOut = sim('slexAircraftExample', 'SaveOutput', 'on', 'SaveFormat', ...
                'Dataset', 'ReturnWorkspaceOutputs', 'on');
      
% Create another run and get signal IDs
runID2 = Simulink.sdi.createRun('New Run', 'namevalue', {'simOut'}, ...
                                    {simOut});

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

Прежде, чем запустить сравнение, задайте, как вы хотите, чтобы Моделирование Data Inspector выровняло сигналы между выполнениями. Этот пример выравнивает сигналы их именем, затем их блоком 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, alignMethods);

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

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

% Check the number of comparisons in the result
numComparisons = diffResults.count;
      
% Iterate through each element and display results 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 with IDs %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 with IDs Actuator Model and Actuator Model do not match 
Signals with IDs Integrate qdot and Integrate qdot do not match 
Signals with IDs Integrate and Integrate do not match 
Signals with IDs Alpha-sensor Low-pass Filter and Alpha-sensor Low-pass Filter do not match 
Signals with IDs Pitch Rate Lead Filter and Pitch Rate Lead Filter do not match 
Signals with IDs Proportional plus integral compensator and Proportional plus integral compensator do not match 
Signals with IDs Stick Prefilter and Stick Prefilter do not match 
Signals with IDs Q-gust model and Q-gust model do not match 
Signals with IDs W-gust model(1) and W-gust model(1) do not match 
Signals with IDs W-gust model(2) and W-gust model(2) do not match 
Signals with IDs alpha, rad and alpha, rad do not match 

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

свернуть все

Числовая идентификация для Базового выполнения в сравнении.

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

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

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

Пример: 'abstol', x, 'выравниваются', alignOpts

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

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

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

Пример: 0.5

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

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

Пример: 0.1

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

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

Пример: 0.2

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

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

свернуть все

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

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

Была ли эта тема полезной?