ドキュメンテーション センター

  • 評価版
  • 製品アップデート

目次

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

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 オブジェクトでその差異を返します。

入力引数

runID1

実行 ID。比較のために最初の実行を識別する固有の番号。

runID2

実行 ID。比較のために 2 番目の実行を識別する固有の番号。

alignmentMethods

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

整列
Simulink.sdi.AlignType.BlockPath信号のソース ブロックへのパス
Simulink.sdi.AlignType.DataSourceデータ名 (logsout.Stick.Data)
Simulink.sdi.AlignType.SID「Simulink 識別子」
Simulink.sdi.AlignType.SignalNameデータの信号名 (Stick)

出力引数

diff

2 つのシミュレーション実行間の差異を説明した Simulink.sdi.DiffRunResult のインスタンス。

指定された整列アルゴリズムを使用して 2 つのシミュレーション実行間の差異を比較します。関数 Simulink.sdi.compareRuns は比較結果を含む Simulink.sdi.DiffRunResult オブジェクトを返します。

% 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
 

ノーマル モードのシミュレーションと、モデル slexAircraftExample のコード生成結果とを比較します。

% 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

参考

|

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