Main Content

Simulink.SimulationOutput

シミュレーション出力とメタデータへのアクセス

説明

Simulink.SimulationOutput オブジェクトを使用すると、シミュレーションに関連するすべてのデータに 1 箇所でアクセスできます。オブジェクト上のプロパティには、シミュレーションでログに記録されたすべてのデータと完全なシミュレーション メタデータ (モデル コンフィギュレーション、シミュレーションのタイミング、シミュレーション中に発生したエラーや警告に関する情報など) が含まれます。

単一オブジェクト内のシミュレーション結果にアクセスすると、シミュレーション結果を他のワークスペース データと区別できるようになるため、複数のシミュレーションのデータの管理が簡単になります。Simulink.SimulationOutput オブジェクトには、シミュレーション時に作成された各ログ変数のプロパティが含まれています。たとえば、信号ログを使用してデータをログ記録すると、SimulationOutput オブジェクトには、ログ記録された信号データを含む logsout という既定の名前をもつプロパティが含まれます。シミュレーション結果が単一の SimulationOutput オブジェクトで返された場合にログ記録されたデータにアクセスするには、ドット表記を使用します。

out.logsout

作成

モデルをシミュレートすると、次のいずれかの状況で 1 つ以上の Simulink.SimulationOutput オブジェクトが作成されます。

  • [単一のシミュレーション出力] パラメーターを有効にする。

    既定では、[単一のシミュレーション出力] パラメーターは、新しいモデルを作成すると有効になります。このパラメーターを有効にするには [コンフィギュレーション パラメーター] ダイアログ ボックスを使用します。[モデル化] タブの [設定] で、[モデル設定] をクリックします。次に、[コンフィギュレーション パラメーター] ダイアログ ボックスで [データのインポート/エクスポート] を選択し、[単一のシミュレーション出力] を選択します。

  • [複数のシミュレーション] ペインを使用して一連のシミュレーションを実行する。

  • 1 つ以上の Simulink.SimulationInput オブジェクトを使用してモデルをプログラムによってシミュレートする。

    関数 simparsim、および batchsim を使用してシミュレーションを実行する場合、SimulationInput オブジェクトを使用してシミュレーションを構成できます。

  • 結果を単一のシミュレーション出力として返す関数 sim の構文を使用してモデルをシミュレートする。

    詳細については、sim を参照してください。

プロパティ

すべて展開する

ログ データのプロパティ

Simulink.SimulationOutput オブジェクトには、シミュレーションで作成された各ログ変数のプロパティが含まれています。プロパティの名前は、ログ変数に指定する名前と一致します。たとえば、出力データをログ記録して既定の変数名 yout を使用すると、Simulink.SimulationOutput オブジェクトのプロパティ yout には、ログ記録された出力データが含まれます。

[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインを使用するか、ログ ブロック (To Workspace ブロックなど) をモデルに追加することにより、ログ記録するデータと変数名を構成します。次の表は、いくつかの一般的なログ手法について、既定のプロパティ名をまとめたものです。

既定のプロパティ名ログ ソース
tout時間のログ[形式] パラメーターで指定された形式。
yout出力のログ[形式] パラメーターで指定された形式。
xout状態のログ[形式] パラメーターで指定された形式。
xFinal最終状態のログ

[最終の操作点を保存] を選択している場合、最終状態は Simulink.op.ModelOperatingPoint オブジェクトとして保存されます。

[最終の操作点を保存] が選択されていない場合、最終状態は [形式] パラメーターの値に従って保存されます。

詳細については、Save Block States and Simulation Operating Pointsを参照してください。

logsout信号のログSimulink.SimulationData.Dataset オブジェクト。
dsmoutデータ ストアのログSimulink.SimulationData.Dataset オブジェクト。
simoutTo Workspace ブロック[保存形式] ブロック パラメーターで指定された形式。
recordoutRecord ブロックSimulink.SimulationData.Dataset オブジェクト。
ScopeDataScope ブロック[保存形式] ブロック パラメーターで指定された形式。

To File ブロック、Record ブロック、または [データセットのデータをファイルにログ] パラメーターを使用してファイルにログ記録したデータは、Simulink.SimulationOutput オブジェクトのプロパティとしては取得されません。

カスタム プロパティ

Simulink.SimulationOutput オブジェクトにプロパティを追加して、追加のデータまたはメタデータを保存できます。たとえば、parsim または batchsim を使用して並列シミュレーションを実行するときに、Simulink.SimulationOutput オブジェクト上でプロパティを定義して並列ワーカーからクライアントへデータを送信することができます。

Simulink.SimulationOutput オブジェクトにプロパティを追加することは、構造体でフィールドを定義することと似ています。たとえば、次のコードは、値が 1 のプロパティ NewProperty を、Simulink.SimulationOutput オブジェクト simOut に追加します。

simOut.NewProperty = 1;

シミュレーション メタデータのプロパティ

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

シミュレーションに関する情報。Simulink.SimulationMetadata オブジェクトとして返されます。SimulationMetadata オブジェクトには以下が含まれます。

  • モデルに関する詳細情報 (モデルのバージョンおよびモデルの作成に使用したソフトウェアのバージョンを含む)

  • シミュレーション中に発生した警告およびエラー

  • タイミング情報 (シミュレーションの初期化や実行のフェーズに要した時間など)

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

シミュレーションからのエラーのメッセージ。文字ベクトルとして返されます。シミュレーションがエラーなしで実行される場合、ErrorMessage プロパティは空です。

ヒント

関数 sim を使用してシミュレーションを実行するときに、CaptureErrors の名前と値の引数を 'on' と指定すると、ErrorMessage プロパティでエラー メッセージが取得されます。既定では、エラーは MATLAB® コマンド ウィンドウで報告され、Simulink.SimulationOutput オブジェクトでは取得されません。

オブジェクト関数

findSimulink.SimulationOutput オブジェクトのプロパティの照会とアクセス
getSimulink.SimulationOutput オブジェクト内のシミュレーション結果へのアクセス
getSimulationMetadataSimulink.SimulationOutput オブジェクト内のシミュレーション メタデータへのアクセス
plotシミュレーション データ インスペクターでデータをプロットする
removePropertyRemove property from Simulink.SimulationOutput object
setUserDataSimulink.SimulationOutput オブジェクト内のメタデータに対するデータの追加
setUserStringSimulink.SimulationOutput オブジェクト内のメタデータに対する string の追加
whoSimulink.SimulationOutput オブジェクトの編集可能なプロパティの名前を取得

すべて折りたたむ

この例のモデルでは、いくつかの異なるログ記録方法を使用してデータをログに記録します。

  • Sine Wave ブロックの出力は、信号のログを使用してログに記録されます。

  • Gain ブロックの出力は、To Workspace ブロックを使用してログに記録されます。

  • Chirp Signal ブロックの出力は、データをワークスペースにログ記録するように構成されている Scope ブロックに接続されます。

  • Gain ブロック、Chirp Signal ブロック、Square Wave Generator ブロックの出力は、Record ブロックを使用してログに記録されます。

  • Square Wave Generator ブロックの出力は、出力ログを使用してログに記録されます。

モデルは時間データを記録するようにも設定されます。

モデルを開きます。

mdl = "LoggingBlocks_NotSSO";
open_system(mdl)

LoggingBlocks_NotSSO model

単一のシミュレーション出力で返されないデータへのアクセス

LoggingBlock_NotSSO モデルは単一の Simulink.SimulationOutput オブジェクトでシミュレーション結果を返すように構成されていません。

[実行] をクリックしてモデルのシミュレーションを実行します。あるいは、プログラムによってモデルをシミュレートします。

sim(mdl)

モデルが単一の出力オブジェクトで結果を返すように構成されていない場合、各ログ記録手法のデータがワークスペース内の個別の変数に記録されます。たとえば、出力データは、既定の変数名 yout を使用してワークスペースにログ記録されます。

The workspace when results are not returned as a single simulation output. The workspace contains these variables: logsout, mdl, recordout, ScopeData, simout, tout, and yout.

使用されているログ記録手法に関連付けられている変数名を使用して、ログ記録されたデータにプログラムによってアクセスできます。たとえば、Record ブロックを使用してログ記録されたデータが含まれている recordout という名前の Simulink.SimulationData.Dataset オブジェクトにアクセスします。

recordout
recordout = 
Simulink.SimulationData.Dataset 'Run 1: LoggingBlocks_NotSSO' with 3 elements

                         Name         PropagatedName  BlockPath                   
                         ___________  ______________  ___________________________ 
    1  [1x1 Signal]      Big Sine     Big Sine        LoggingBlocks_NotSSO/Record
    2  [1x1 Signal]      Chirp        Chirp           LoggingBlocks_NotSSO/Record
    3  [1x1 Signal]      Square Wave  Square Wave     LoggingBlocks_NotSSO/Record

  - Use braces { } to access, modify, or add elements using index.

単一のシミュレーション出力として返されたデータへのアクセス

シミュレーション結果を単一の出力として返すには、[コンフィギュレーション パラメーター] ダイアログ ボックスで [単一のシミュレーション出力] を選択します。

あるいは、関数 set_param を使用してプログラムによって [単一のシミュレーション出力] パラメーターを有効にします。

set_param(mdl,"ReturnWorkspaceOutputs","on")

[単一のシミュレーション出力] パラメーターを有効にすると、ワークスペースにログ記録されたすべてのシミュレーション データが、out という既定の変数名をもつ単一の Simulink.SimulationOutput オブジェクトとして返されます。

単一の SimulationOutput オブジェクトで返されるシミュレーション データがワークスペースに及ぼす影響を確認しやすくするために、以前のログ記録データをワークスペースからクリアできます。

clear

[実行] をクリックしてモデルのシミュレーションを再度実行します。あるいは、プログラムによってモデルをシミュレートします。

mdl = "LoggingBlocks_NotSSO";
out = sim(mdl);

ワークスペースにログ記録されたすべてのシミュレーション データが、out という名前の単一の変数に含まれるようになりました。

The workspace when results are returned as a single simulation output. The workspaces contains the variables mdl and out.

Simulink.SimulationOutput オブジェクト out には、シミュレーション時に作成された各ログ変数のプロパティが含まれています。

out
out = 
  Simulink.SimulationOutput:
              ScopeData: [1x1 Simulink.SimulationData.Dataset] 
                logsout: [1x1 Simulink.SimulationData.Dataset] 
              recordout: [1x1 Simulink.SimulationData.Dataset] 
                 simout: [1x1 timeseries] 
                   tout: [51x1 double] 
                   yout: [1x1 Simulink.SimulationData.Dataset] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

ログ記録されたデータには、ドット表記を使用してアクセスできます。たとえば、Record ブロックを使用してログ記録されたデータにアクセスします。

out.recordout
ans = 
Simulink.SimulationData.Dataset 'Run 2: LoggingBlocks_NotSSO' with 3 elements

                         Name         PropagatedName  BlockPath                   
                         ___________  ______________  ___________________________ 
    1  [1x1 Signal]      Big Sine     Big Sine        LoggingBlocks_NotSSO/Record
    2  [1x1 Signal]      Chirp        Chirp           LoggingBlocks_NotSSO/Record
    3  [1x1 Signal]      Square Wave  Square Wave     LoggingBlocks_NotSSO/Record

  - Use braces { } to access, modify, or add elements using index.

Dataset オブジェクトの要素にアクセスするには、中かっこを使用します。たとえば、インデックス 1 を使用して信号 Big Sine にアクセスします。

out.recordout{1}
ans = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'Big Sine'
    PropagatedName: 'Big Sine'
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 1
            Values: [1x1 timeseries]

信号データは、Signal オブジェクトの Values プロパティに timeseries オブジェクトとして格納されています。

out.recordout{1}.Values
  timeseries

  Common Properties:
            Name: 'Big Sine'
            Time: [51x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [51x1 double]
        DataInfo: tsdata.datametadata

時間値は timeseries オブジェクトの Time プロパティにあります。信号値は Data プロパティにあります。

out.recordout{1}.Values.Data
ans = 51×1

         0
    0.3973
    0.7788
    1.1293
    1.4347
    1.6829
    1.8641
    1.9709
    1.9991
    1.9477
      ⋮

シミュレーション結果を単一の出力オブジェクトとして返すようにしてモデルをシミュレートすると、すべてのログ データおよびシミュレーション メタデータに Simulink.SimulationOutput オブジェクトを使用してアクセスできます。

この例のモデルでは [単一のシミュレーション出力] パラメーターが有効になっており、いくつかの異なるログ記録方法を使用してデータをログに記録します。

  • Sine Wave ブロックの出力は、信号のログを使用してログに記録されます。

  • Gain ブロックの出力は、To Workspace ブロックを使用してログに記録されます。

  • Gain ブロック、Chirp Signal ブロック、Square Wave Generator ブロックの出力は、Record ブロックを使用してログに記録されます。

  • Square Wave Generator ブロックの出力は、出力ログを使用してログに記録されます。

モデルは時間データを記録するようにも設定されます。

モデルを開きます。

mdl = "LoggingBlocks";
open_system(mdl)

The model LoggingBlocks.

Simulink.SimulationInput オブジェクトを作成してシミュレーションをモデル用に構成します。関数 setModelParameter を使用して StopTime パラメーターを 20 に設定します。

simIn = Simulink.SimulationInput(mdl);
simIn = setModelParameter(simIn,'StopTime','20');

モデルをシミュレートします。関数 sim の出力 out は、シミュレーションからログに記録されるすべてのデータが含まれる Simulink.SimulationOutput オブジェクトです。ブロックごと、ログのタイプごとのデータは、ブロックまたはモデルで指定されているログ変数の名前と一致するプロパティとして保存されます。

out = sim(simIn);

ログ データには、ドット表記、関数 get、または関数 find を使用してアクセスできます。

ドット表記を使用して、To Workspace ブロックを使用してログ記録された Big Sine 信号にアクセスします。

simout = out.simout
  timeseries

  Common Properties:
            Name: 'Big Sine'
            Time: [51x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [51x1 double]
        DataInfo: tsdata.datametadata

関数 get を使用して、信号ログを使用してログ記録された Sine 信号にアクセスします。

logsout = get(out,"logsout")
logsout = 
Simulink.SimulationData.Dataset 'logsout' with 1 element

                         Name  BlockPath               
                         ____  _______________________ 
    1  [1x1 Signal]      Sine  LoggingBlocks/Sine Wave

  - Use braces { } to access, modify, or add elements using index.

関数 find を使用して、出力ログを使用してログ記録された Square Wave 信号にアクセスします。

yout = find(out,"yout")
yout = 
Simulink.SimulationData.Dataset 'yout' with 1 element

                         Name         BlockPath             
                         ___________  _____________________ 
    1  [1x1 Signal]      Square Wave  LoggingBlocks/Outport

  - Use braces { } to access, modify, or add elements using index.

シミュレーション メタデータには、ドット表記または関数 getSimulationMetadata を使用してアクセスできます。

simMetadata = getSimulationMetadata(out)
simMetadata = 
  SimulationMetadata with properties:

        ModelInfo: [1x1 struct]
       TimingInfo: [1x1 struct]
    ExecutionInfo: [1x1 struct]
       UserString: ''
         UserData: []

シミュレーション メタデータは Simulink.SimulationMetadata オブジェクトとして返されます。SimulationMetadata オブジェクトは、シミュレーションに関する情報を構造体値をもつプロパティにグループ化し、シミュレーションに関連する string および追加データを指定できるプロパティをもちます。

SimulationMetadata オブジェクト上の ExecutionInfo プロパティにアクセスします。実行情報には、シミュレーションが停止時間 20 まで警告やエラーなしで実行されたことが示されます。

simMetadata.ExecutionInfo
ans = struct with fields:
               StopEvent: 'ReachedStopTime'
         StopEventSource: []
    StopEventDescription: 'Reached stop time of 20'
         ErrorDiagnostic: []
      WarningDiagnostics: [0x1 struct]

Simulink.SimulationOutput オブジェクトはシミュレーションの結果を表します。SimulationOutput オブジェクトには、シミュレーション メタデータとシミュレーションでログに記録されたすべてのデータが含まれます。Simulink.SimulationOutput オブジェクトの内容は、データ ログやカスタムのプロパティを追加または削除することによって変更できます。

モデル LoggingBlocks を開きます。このモデルは複数のログ手法を使用していくつかの入力信号をログ記録します。

  • Sine Wave ブロックの出力は、信号のログを使用してログに記録されます。

  • Gain ブロックの出力は、To Workspace ブロックを使用してログに記録されます。

  • Gain ブロック、Chirp Signal ブロック、Square Wave Generator ブロックの出力は、Record ブロックを使用してログに記録されます。

  • Square Wave Generator ブロックの出力は、出力ログを使用してログに記録されます。

モデルは時間データを記録するようにも設定されます。

mdl = "LoggingBlocks"
mdl = 
"LoggingBlocks"
open_system(mdl);

The LoggingBlocks model

関数 get_param を使用して、Sine Wave ブロックの [振幅] パラメーターと [周波数] パラメーターの値を保存します。構造体 sinConfig に値を保存します。

sinConfig.sinAmp = get_param(strcat(mdl,"/Sine Wave"),"Amplitude");
sinConfig.sinFreq = get_param(strcat(mdl,"/Sine Wave"),"Frequency");

モデルをシミュレートします。

simOut = sim(mdl);

シミュレーション結果には、シミュレーションで作成されたすべてのログ変数が含まれます。関数 who を使用して、変更可能なプロパティのリストを取得します。

props = who(simOut)
props = 5x1 cell
    {'logsout'  }
    {'recordout'}
    {'simout'   }
    {'tout'     }
    {'yout'     }

このシミュレーションでは、Sine Wave ブロックに関連する信号パスのデータのみを保存すると仮定します。関数 removeProperty を使用して、recordout プロパティと yout プロパティを削除します。

simOut = removeProperty(simOut,["recordout" "yout"]);
who(simOut)
This Simulink.SimulationOutput object contains these editable properties:

    logsout    simout    tout    

独自のプロパティをオブジェクトに追加するか、関数 setUserData を使用して Simulink.SimulationMetadata オブジェクト上の UserData プロパティの値を指定することによって、Simulink.SimulationOutput にデータを追加することもできます。

Sine Wave ブロックのパラメーター値を、Simulink.SimulationOutput オブジェクト上のプロパティとして保存すると仮定します。構造体へのフィールドの追加と同じ方法でドット表記を使用することにより、プロパティ SineWaveParameters を追加します。

simOut.SineWaveParameters = sinConfig;
who(simOut)
This Simulink.SimulationOutput object contains these editable properties:

    SineWaveParameters    logsout    simout    tout    

関数 sldiagviewer.reportSimulationMetadataDiagnostics を使用すると、Simulink.SimulationOutput オブジェクトで取得されたエラーと警告のメッセージを診断ビューアーを使用して表示できます。

モデル ex_sldemo_bounce を開きます。

model = "ex_sldemo_bounce";
open_system(model)

Initial Velocity ブロックの "Value" パラメーターの値を未定義の変数 z として指定して、モデルでエラーを発生させます。

set_param("ex_sldemo_bounce/Initial Velocity","Value","z");

Simulink.SimulationInput オブジェクトを作成してシミュレーションを構成します。

simIn = Simulink.SimulationInput(model);

モデルをシミュレートします。StopOnError オプションを off として指定すると、シミュレーション中に発生したエラーと警告が SimulationOutput オブジェクトで取得されます。コマンド ウィンドウやスクリプトでは報告されず、スクリプトの処理が中断されません。

simOut = sim(simIn,"StopOnError","off","ShowProgress","off");

関数 sldiagviewer.reportSimulationMetadataDiagnostics を使用して、シミュレーションからの警告とエラーのメッセージを診断ビューアーに表示します。

sldiagviewer.reportSimulationMetadataDiagnostics(simOut)

バージョン履歴

R2009b で導入