メインコンテンツ

Simulink.SimulationOutput

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

説明

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

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

out.logsout

作成

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

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

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

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

    simparsim、および batchsim の各関数を使用するか Simulation オブジェクトを使用してシミュレーションを実行する場合、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 オブジェクト内のシミュレーション結果へのアクセス
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

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

モデル LoggingBlocks_NotSSO[単一のシミュレーション出力] パラメーターを無効にして保存されています。ワークフローによっては、このモデルのシミュレーションで、シミュレーション結果が単一の Simulink.SimulationOutput オブジェクトとして返されません。

モデルのシミュレーションを実行するには、[実行] をクリックします。あるいは、コマンド ウィンドウで start シミュレーション コマンドを発行します。

set_param(mdl,SimulationCommand="start")

シミュレーションの結果が単一の出力として返されない場合、それぞれのログ記録方法とログ記録ブロックからのデータがワークスペース内の個別の変数に保存されます。たとえば、最上位の出力端子のログ データは、既定の変数名 yout を使用してワークスペースに保存されます。

The workspace panel contains these variables: logsout, mdl, recordout, ScopeData, simout, tout, and yout.

ログ記録方法に関連付けられている変数の名前を使用して、ログ記録されたデータにプログラムによってアクセスできます。たとえば、Record ブロックを使用してログ記録されたデータにアクセスするには、コマンド ウィンドウで「recordout」と入力します。

The Command Window displays the contents of the variable named recordout. The variable contains a Dataset object that contains three signals logged using the Record block: Big Sine, Chirp, and Square Wave.

[単一のシミュレーション出力] パラメーターが無効になっているため、プログラムで sim 関数のモデル名の構文を使用して名前と値の引数を何も指定せずにモデルをシミュレートすると、シミュレーションで時間ベクトルのみが返されます。

out = sim(mdl)
out = 51×1

         0
    0.2000
    0.4000
    0.6000
    0.8000
    1.0000
    1.2000
    1.4000
    1.6000
    1.8000
    2.0000
    2.2000
    2.4000
    2.6000
    2.8000
      ⋮

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

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

  1. Simulink ツールストリップの [モデル化] タブで [モデル設定] をクリックします。

  2. [コンフィギュレーション パラメーター] ダイアログ ボックスで、[データのインポート/エクスポート] ペインを選択します。

  3. [単一のシミュレーション出力] を選択します。

  4. [OK] をクリックします。

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

set_param(mdl,ReturnWorkspaceOutputs="on")

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

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

clear logsout recordout ScopeData simout tout yout

モデルを再度シミュレートします。[実行] をクリックするか、sim 関数を使用してプログラムでモデルをシミュレートします。

out = sim(mdl);

これで、ワークスペースにログ記録されたすべてのシミュレーション データが out という名前の単一の変数に格納されます。

The Workspace panel 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: [1×1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 1
            Values: [1×1 timeseries]


  Methods, Superclasses

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

out.recordout{1}.Values
  timeseries

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

  More properties, Methods

時間値は 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
    1.8186
    1.6170
    1.3509
    1.0310
    0.6700
      ⋮

シミュレーション結果を単一の出力オブジェクトとして返すようにしてモデルをシミュレートすると、すべてのログ データおよびシミュレーション メタデータに 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 関数は、結果をシミュレーションのすべてのログ データが格納された Simulink.SimulationOutput オブジェクトとして返します。ブロックごと、ログのタイプごとのデータは、ブロックまたはモデルで指定されているログ変数の名前と一致するプロパティとして保存されます。

out = sim(simin);

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

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

simout = out.simout
  timeseries

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

  More properties, Methods

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.

SimulationOutput オブジェクトの SimulationMetadata プロパティ内のシミュレーション メタデータにアクセスします。

simmetadata = out.SimulationMetadata
simmetadata = 
  SimulationMetadata with properties:

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

シミュレーション メタデータは Simulink.SimulationMetadata オブジェクトとして返されます。SimulationMetadata オブジェクトは、オブジェクトのプロパティで情報を構造体としてグループ化したものです。

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

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

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

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

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

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

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

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

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

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");

モデルのシミュレーションを実行します。

out = sim(mdl);

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

props = who(out)
props = 5×1 cell
    {'logsout'  }
    {'recordout'}
    {'simout'   }
    {'tout'     }
    {'yout'     }

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

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

    logsout    simout    tout    

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

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

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

    SineWaveParameters    logsout    simout    tout    

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

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

mdl = "ex_sldemo_bounce";
simin = Simulink.SimulationInput(mdl);

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

blk = mdl + "/Initial Velocity";
simin = setBlockParameter(simin,blk,"Value","z");

エラーによってスクリプトの実行が中断されないように、SimulationInput オブジェクトで CaptureErrors パラメーターを有効にします。CaptureErrors パラメーターを有効にすると、シミュレーション中に発生するエラーと警告が SimulationOutput オブジェクトで取得され、コマンド ウィンドウやスクリプトで報告されません。

simin = setModelParameter(simin,CaptureErrors="on");

モデルのシミュレーションを実行します。シミュレーションを実行するために、sim 関数は Simulink エディターでモデルを開くことなくモデルを読み込みます。

out = sim(simin);

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

sldiagviewer.reportSimulationMetadataDiagnostics(out)

バージョン履歴

R2009b で導入

すべて展開する