ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Simulink.sdi.compareRuns

2 つのシミュレーション実行間の信号データを比較する

構文

  • diff = Simulink.sdi.compareRuns(runID1,runID2)
  • diff = Simulink.sdi.compareRuns(runID1,runID2,alignmentMethods)

説明

diff = Simulink.sdi.compareRuns(runID1,runID2) は、2 つのシミュレーション実行間で一致する信号を比較し、Simulink.sdi.DiffRunResult オブジェクトでその差異を返します。

diff = Simulink.sdi.compareRuns(runID1,runID2,alignmentMethods) は、指定された整列アルゴリズムを使用して 2 つのシミュレーション実行間で一致する信号を比較し、Simulink.sdi.DiffRunResult オブジェクトでその差異を返します。

すべて折りたたむ

% Load the model 'slexAircraftExample'
load_system('slexAircraftExample');

% Configure model "slexAircraftExample" for logging
set_param('slexAircraftExample','SolverType','Fixed-Step','SaveOutput','on',...
          'SaveFormat','StructureWithTime','ReturnWorkspaceOutputs','on');

% CD to temporary directory and build   
cd(tempdir);
rtwbuild('slexAircraftExample');

% Run the executable 
if ispc
   system('slexAircraftExample');
elseif unix
   system('./slexAircraftExample');
end

% Create a run using the slexAircraftExample.mat placed in the current directory
[run1ID,~,~] = Simulink.sdi.createRun('My Run','file','slexAircraftExample.mat');

% Configure model "slexAircraftExample" for logging and simulate
simOut = sim('slexAircraftExample','SaveOutput','on',...
             'SaveFormat','StructureWithTime',...
             'ReturnWorkspaceOutputs','on',...
             'SolverType','Fixed-Step');

% Create another run from the simulation
[run2ID,~,~] = Simulink.sdi.createRun('My Run','namevalue',...
                                      {'MyData'},{simOut});

% Compare the two runs
difference = Simulink.sdi.compareRuns(run1ID,run2ID);

% Number of comparisons in result
numComparisons = difference.count;

% Iterate through each result element
for i = 1:numComparisons
   % Get result at index i
   resultAtIdx = difference.getResultByIndex(i);
  
   % Get signal IDs for each comparison result
   sig1 = resultAtIdx.signalID1;
   sig2 = resultAtIdx.signalID2;
  
   % Display if signals match or not
   displayStr = 'Signals with IDs %d and %d %s \n';
   if resultAtIdx.match
      fprintf(displayStr,sig1,sig2,'match.');
   else
      fprintf(displayStr,sig1,sig2,'do not match.');
end

% Plot tolerance and difference results in a figure
f1 = figure;
plot(resultAtIdx.tol,'Color','r'); 
hold on;
plot(resultAtIdx.diff,'Color','g'); 
legend('Tolerance','Difference');
end
% Configure model "slexAircraftExample" for logging and simulate
simOut = sim('slexAircraftExample','SaveOutput','on',...
              'SaveFormat','StructureWithTime',...
              'ReturnWorkspaceOutputs','on');
 
% Create a run and get signal IDs
run1ID = Simulink.sdi.createRun('My Run','namevalue',...
                                 {'simOut'},{simOut});
 
% Get and change one of the parameters of the model
mws = get_param('slexAircraftExample','modelworkspace');
wsMq = mws.evalin('Mq');
mws.assignin('Mq',3*wsMq);
 
% Simulate again
simOut = sim('slexAircraftExample','SaveOutput','on',...
              'SaveFormat','StructureWithTime',...
              'ReturnWorkspaceOutputs','on');
      
% Create another run and get signal IDs
run2ID = Simulink.sdi.createRun('New Run','namevalue',...
                                {'simOut'},{simOut});
 
% Define the alignment algorithms for comparison.
% Align the data first by data name, then by block path, then by SID.
algorithms = [Simulink.sdi.AlignType.DataSource
               Simulink.sdi.AlignType.BlockPath
               Simulink.sdi.AlignType.SID];
 
% Compare the two runs
difference = Simulink.sdi.compareRuns(run1ID,run2ID,algorithms);
      
% Number of comparisons in result
numComparisons = difference.count;
      
% Iterate through each result element
for i = 1:numComparisons
    % Get result at index i
    resultAtIdx = difference.getResultByIndex(i);
 
    % Get signal IDs for each comparison result
    sig1 = resultAtIdx.signalID1;
    sig2 = resultAtIdx.signalID2;
 
    % Display if signals match or not
    displayStr = 'Signals with IDs %d and %d %s \n';
    if resultAtIdx.match
       fprintf(displayStr,sig1,sig2,'match');
    else
       fprintf(displayStr,sig1,sig2,'do not match');
    end
 
    % Plot tolerance and difference results in a figure
    f1 = figure;
    plot(resultAtIdx.tol,'Color','r'); 
    hold on;
    plot(resultAtIdx.diff,'Color','g'); 
    legend('Tolerance','Difference');
end

関連する例

入力引数

すべて折りたたむ

実行 ID。比較のために最初の実行を識別する一意の番号。整数として指定します。

実行 ID。比較のために 2 番目の実行を識別する一意の番号。整数として指定します。

3 つの整列アルゴリズムを指定する配列。データは配列の最初の要素の値、次に 2 番目の要素、さらに 3 番目の要素によって順次整列されます。配列内の最初の 3 つの値のみが考慮されます。配列では次の値を使用できます。

整列
Simulink.sdi.AlignType.BlockPath信号のソース ブロックへのパス
Simulink.sdi.AlignType.DataSourceデータ名 (たとえば、logsout.Stick.Data)
Simulink.sdi.AlignType.SID「Simulink 識別子を使用したブロック線図コンポーネントの検索」
Simulink.sdi.AlignType.SignalName信号名

たとえば、[Simulink.sdi.AlignType.DataSource,Simulink.sdi.AlignType.BlockPath,Simulink.sdi.AlignType.SID] は整列配列にすることができます。

出力引数

すべて折りたたむ

2 つのシミュレーション実行の間の差異を含む Simulink.sdi.DiffRunResult オブジェクトのインスタンス。

R2011b で導入

この情報は役に立ちましたか?