Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

Simulink.sdi.DiffRunResult

実行比較結果へのアクセス

説明

Simulink.sdi.DiffRunResult オブジェクトは実行比較メタデータおよび比較結果へのアクセスを提供します。関数 getSignalByIndex を使用して、実行比較の各信号に対するメタデータと比較結果にアクセスします。

作成

Simulink.sdi.DiffRunResult オブジェクトはシミュレーション データ インスペクターを使用して比較を実行すると作成されます。

UI を使用してデータを比較する場合、関数 Simulink.sdi.getCurrentComparison を使用して Simulink.sdi.DiffRunResult オブジェクトの結果にアクセスします。

関数 Simulink.sdi.compareRuns または関数 compare を使用したプログラムによる比較は DiffRunResult オブジェクトを返します。

プロパティ

すべて展開する

このプロパティは読み取り専用です。

DiffRunResult オブジェクトの作成に使用される MATLAB® のバージョン。文字ベクトルとして返されます。

このプロパティは読み取り専用です。

比較ベースライン実行の実行識別子。整数として返されます。

このプロパティは読み取り専用です。

比較対象の実行の実行識別子。整数として返されます。

このプロパティは読み取り専用です。

比較の 2 つの実行間に整列された信号の数。整数として返されます。比較のための信号の整列方法の詳細については、信号の整列を参照してください。

このプロパティは読み取り専用です。

Simulink.sdi.DiffRunResult オブジェクトが作成された日付と時刻。datetime オブジェクトとして返されます。

データ型: datetime

このプロパティは読み取り専用です。

実行比較に使用されるグローバル許容誤差値。フィールドをもつ構造体として返されます。

  • AbsTol — 実行比較で使用されるグローバルな絶対許容誤差。

  • RelTol — 実行比較で使用されるグローバルな相対許容誤差。

  • TimeTol — 実行比較で使用されるグローバルな時間の許容誤差。

比較するために許容誤差を使用して計算する方法の詳細については、許容誤差の指定を参照してください。

このプロパティは読み取り専用です。

比較結果の概要。信号の比較結果に含まれる可能性がある各 Status に対してフィールドをもつ構造体として返されます。各フィールドの値は、対応する Status をもつ実行比較の信号の数を示します。

  • WithinTolerance — 信号比較が完了し、比較したすべてのデータ点が指定した許容誤差内にあります。

  • OutOfTolerance — 信号比較が完了し、比較した一部のデータ点が指定した許容誤差外にあります。

  • Unaligned — ベースライン実行からの信号が比較対象の実行の信号と整列しませんでした。

  • Empty — ベースライン実行または比較対象の実行で整列後の信号にデータは含まれていません。

  • EmptySynced — ベースライン実行または比較対象の実行で同期後の信号にデータは含まれていません。空の同期後の信号とは、信号がオーバーラップしないか、intersection 同期メソッドを指定した場合は、同じ時間点が含まれないことを意味します。

  • Canceled — ユーザーが比較をキャンセルしたため、信号結果は計算されませんでした。

  • Pending — 比較は処理中であり、信号結果の計算は開始していません。

  • Processing — 信号結果比較が処理中です。

  • UnitsMismatch — ベースライン実行と比較対象の実行で信号単位が一致しません。

  • DataTypeMismatch — ベースライン実行と比較対象の実行で信号データ型が一致しません。信号データ型をチェックするように設定された比較の結果のみが、このステータスをもつことができます。

  • TimeMismatch — ベースライン実行と比較対象の実行で信号時間ベクトルが一致しません。信号時間ベクトルをチェックするように設定された比較の結果のみが、このステータスをもつことができます。

  • StartStopMismatch — ベースライン実行と比較対象の実行で信号開始時間と終了時間が一致しません。信号開始時間と終了時間をチェックするように設定された比較の結果のみが、このステータスをもつことができます。

  • Unsupported — シミュレーション データ インスペクターの比較アルゴリズムは、この信号のタイプをサポートしていません。たとえば、double に変換すると精度が低下するデータ型をもつ信号はサポートされていません。

整列、許容誤差、同期の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。追加のメタデータをチェックするように比較を設定する方法の詳細については、Simulink.sdi.compareRuns を参照してください。

このプロパティは読み取り専用です。

比較に使用される構成オプション。n 行 2 列の cell 配列として返されます。cell 配列の各行は比較に使用されるオプションに対応しています。すべての比較で整列された信号単位が一致しなければならないため、Options プロパティには単位が一致しなければならないことを示す行が常に含まれます。その他の可能な構成オプションは、関数 Simulink.sdi.compareRuns の名前と値のペアに対応します。

  • DataType

  • Time

  • StartStop

  • StopOnFirstMismatch

このプロパティは読み取り専用です。

実行比較のステータス。比較がどのように終了したのかを示し、次のいずれかとして返されます。

  • Completed — 比較はすべての結果を計算して終了した

  • Canceled — 比較はユーザーが UI で比較演算をキャンセルしたために終了した

  • Stopped — 比較は、比較で不一致が検出され、最初の不一致で終了するように設定されていたため終了した

このプロパティは読み取り専用です。

残りの信号を比較せずに実行比較が終了する原因となった信号比較の信号結果。Simulink.sdi.DiffSignalResult オブジェクトとして返されます。不一致が検出されずに比較が終了した場合、または最初の不一致で比較が終了するように比較が設定されていない場合、StopReason プロパティは空です。関数 Simulink.sdi.compareRuns'StopOnFirstMismatch' の名前と値のペアを使用して、最初の不一致で終了するようにシミュレーションを設定できます。

オブジェクト関数

getResultByIndex信号の比較結果を返す
saveResult比較結果の MLDATX ファイルへの保存

すべて折りたたむ

シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、比較で使用するための信号の許容誤差値を指定できます。この例では slexAircraftExample モデルとシミュレーション データ インスペクターを使用し、制御入力の後にローパス フィルターの時定数を変更することによる影響を評価します。

モデルの設定

モデルを読み込んで、関心のある信号をログ記録用にマークします。この例では、q 信号と alpha 信号のデータを記録します。

load_system('slexAircraftExample')

Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',3,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')

シミュレーションの実行

異なるローパス フィルターの時定数でシミュレーションを実行し、比較する結果を生成します。slexAircraftExample モデルは、そのモデルに関連付けられている変数をモデル ワークスペースに格納します。時定数値を変更するには、モデル ワークスペースにアクセスして関数 assignin を使用します。

out1 = sim('slexAircraftExample');

modelWorkspace = get_param('slexAircraftExample','modelworkspace');
assignin(modelWorkspace,'Ts',1)

out2 = sim('slexAircraftExample');

シミュレーション結果へのアクセスと比較

シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、シミュレーション結果にアクセスします。各シミュレーションによって、一意の実行 ID をもつ実行がシミュレーション データ インスペクターに作成されます。実行 ID を使用して、シミュレーション結果を比較します。

runIDs = Simulink.sdi.getAllRunIDs;
runIDTs1 = runIDs(end-1);
runIDTs2 = runIDs(end);

関数 Simulink.sdi.compareRuns を使用して、シミュレーションで得たデータを比較します。次に、信号結果の Status プロパティを検査し、信号が既定の許容誤差 0 の範囲内にあるかどうかを確認します。

diffRun1 = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);

sig1Result1 = getResultByIndex(diffRun1,1);
sig2Result1 = getResultByIndex(diffRun1,2);

sig1Result1.Status
ans = 
OutOfTolerance
sig2Result1.Status
ans = 
OutOfTolerance

信号の許容誤差を使用して実行を比較

既定では、信号はすべての許容誤差値に 0 を使用するため、信号が同一でない場合は、比較によって許容誤差外の結果が返されます。時定数の変更の影響をさらに解析するために、信号の許容誤差値を指定します。比較する実行内の Simulink.sdi.Signal オブジェクトのプロパティを使用して、プログラムによる比較の許容誤差を指定できます。比較ではベースラインの Signal オブジェクトに対して指定された許容誤差が使用されます。この例では、時間の許容誤差と絶対許容誤差の組み合わせを指定します。

許容誤差を指定するには、まず比較する必要がある実行内の各信号に対応する Simulink.sdi.Signal オブジェクトにアクセスします。

run1 = Simulink.sdi.getRun(runIDTs1);
sigID1 = getSignalIDByIndex(run1,1);
sigID2 = getSignalIDByIndex(run1,2);

sig1 = Simulink.sdi.getSignal(sigID1);
sig2 = Simulink.sdi.getSignal(sigID2);

Name プロパティをチェックして、各 Signal オブジェクトを特定します。

sig1.Name
ans = 
'q, rad/sec'
sig2.Name
ans = 
'alpha, rad'

ベースラインの実行で q 信号オブジェクトの AbsTol プロパティと TimeTol プロパティを使用する q 信号に対して、0.1 の絶対許容誤差と 0.6 の時間の許容誤差を指定します。

sig1.AbsTol = 0.1;
sig1.TimeTol = 0.6;

ベースラインの実行で alpha 信号オブジェクトの AbsTol プロパティと TimeTol プロパティを使用する alpha 信号に対して、0.2 の絶対許容誤差と 0.8 の時間の許容誤差を指定します。

sig2.AbsTol = 0.2;
sig2.TimeTol = 0.8;

実行を再度比較し、結果にアクセスします。

diffRun2 = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);
sig1Result2 = getResultByIndex(diffRun2,1);
sig2Result2 = getResultByIndex(diffRun2,2);

比較結果が指定された許容誤差の範囲内にあるかどうかを判断するには、各信号の Status プロパティをチェックします。

sig1Result2.Status
ans = 
WithinTolerance
sig2Result2.Status
ans = 
WithinTolerance

関数 Simulink.sdi.compareRuns を使用して、データ型と開始時間および終了時間を含む信号データとメタデータを比較できます。単一の比較で 1 つ以上のメタデータに不一致があるかどうかをチェックする場合があります。信号メタデータに不一致があるかどうかをチェックすると、Simulink.sdi.DiffSignalResult オブジェクトの Status プロパティがメタデータの不一致を示している可能性があるため、Simulink.sdi.DiffRunResult オブジェクトの Summary プロパティが基本的な比較と異なる場合があります。関数 Simulink.sdi.compareRuns を使用して、インポートされたデータとシミュレーションからログ記録されたデータの比較を構成できます。

この例では、DiffSignalResult オブジェクトの Summary が信号の不一致に関する特定の情報をどのように提供できるのかを示す、ワークスペース データから 3 つの方法で作成された実行の比較を構成します。

ワークスペース データの作成

関数 Simulink.sdi.compareRuns は時系列データを比較します。ベースライン信号として使用する正弦波のデータを timeseries 形式を使用して作成します。timeseriesWave Data という名前を付けます。

time = 0:0.1:20;
sig1vals = sin(2*pi/5*time);
sig1_ts = timeseries(sig1vals,time);
sig1_ts.Name = 'Wave Data';

2 つ目の正弦波を作成してベースライン信号と比較します。少し異なる時間ベクトルを使用して信号を減衰し、2 つの信号が同一でなくなるようにします。信号データを single データ型にキャストします。この timeseries オブジェクトにも Wave Data という名前を付けます。シミュレーション データ インスペクターの比較アルゴリズムは名前を使用した比較のためにこれらの信号を整列します。

time2 = 0:0.1:22;
sig2vals = single(0.98*sin(2*pi/5*time2));
sig2_ts = timeseries(sig2vals,time2);
sig2_ts.Name = 'Wave Data';

シミュレーション データ インスペクターでの実行の作成と比較

関数 Simulink.sdi.compareRunsSimulink.sdi.Run オブジェクトに含まれるデータを比較します。関数 Simulink.sdi.createRun はシミュレーション データ インスペクターでデータ用に実行を作成します。関数 Simulink.sdi.createRun は作成された各実行について実行 ID を返します。

runID1 = Simulink.sdi.createRun('Baseline Run','vars',sig1_ts);
runID2 = Simulink.sdi.createRun('Compare to Run','vars',sig2_ts);

関数 Simulink.sdi.compareRuns を使用して実行を比較できます。比較アルゴリズムは信号データを double データ型に変換し、差分信号を計算する前に信号データを同期します。

basic_DRR = Simulink.sdi.compareRuns(runID1,runID2);

返された Simulink.sdi.DiffRunResult オブジェクトの Summary プロパティをチェックし、比較の結果を確認します。

basic_DRR.Summary
ans = struct with fields:
       OutOfTolerance: 1
      WithinTolerance: 0
            Unaligned: 0
        UnitsMismatch: 0
                Empty: 0
             Canceled: 0
          EmptySynced: 0
     DataTypeMismatch: 0
         TimeMismatch: 0
    StartStopMismatch: 0
          Unsupported: 0

信号間の差が許容誤差から外れています。

実行を比較してデータ型の一致をチェック

システム要件に応じて、比較する信号のデータ型を一致させる場合があります。関数 Simulink.sdi.compareRuns を使用し、データ型に不一致があるかどうかをチェックしてレポートする比較アルゴリズムを構成できます。

dataType_DRR = Simulink.sdi.compareRuns(runID1,runID2,'DataType','MustMatch');
dataType_DRR.Summary
ans = struct with fields:
       OutOfTolerance: 0
      WithinTolerance: 0
            Unaligned: 0
        UnitsMismatch: 0
                Empty: 0
             Canceled: 0
          EmptySynced: 0
     DataTypeMismatch: 1
         TimeMismatch: 0
    StartStopMismatch: 0
          Unsupported: 0

ベースライン信号のデータは double データ型であるのに対し、ベースラインと比較した信号のデータが single データ型であるため、信号比較の結果は DataTypeMismatch になります。

実行を比較し、開始時間と終了時間の一致をチェック

関数 Simulink.sdi.compareRuns を使用して、整列された信号の開始時間と終了時間が同じであるかどうかをチェックする比較アルゴリズムを構成できます。

startStop_DRR = Simulink.sdi.compareRuns(runID1,runID2,'StartStop','MustMatch');
startStop_DRR.Summary
ans = struct with fields:
       OutOfTolerance: 0
      WithinTolerance: 0
            Unaligned: 0
        UnitsMismatch: 0
                Empty: 0
             Canceled: 0
          EmptySynced: 0
     DataTypeMismatch: 0
         TimeMismatch: 0
    StartStopMismatch: 1
          Unsupported: 0

ワークスペースで作成された信号に異なる終了時間があるため、信号の比較結果は StartStopMismatch になります。

代替方法

シミュレーション データ インスペクター UI を使用して、比較結果を表示および検証できます。詳細については、シミュレーション データの比較を参照してください。

ソフトウェア テストについては、Simulink.sdi.constraints.MatchesSignal 制約を参照してください。

R2012b で導入