Main Content

状態情報の保存

各タイム ステップの出力値の計算に加えて、一部のブロックはブロックの状態に関する情報も保存します。シミュレーション全体でブロックの状態がどのように変化するかを解析するために、状態データのログを記録します。モデルの操作点のログをシミュレーション中に記録し、それらの任意の操作点からシミュレーションを再開します。状態のログ記録を有効にして、シミュレーション全体でブロックの状態がどのように変化するかを解析できます。シミュレーションの一時停止時または停止時にブロックの状態のスナップショットをログに記録するには、Final statesのログを記録するようにモデルを構成します。

各シミュレーション ステップの状態情報の保存

シミュレーション中に各シミュレーション ステップのログ状態の状態情報を保存できます。各シミュレーション ステップの状態情報を保存すると、デバッグに役立ちます。

vdp モデルを開きます。

mdl = "vdp";
open_system(mdl)

状態のログ記録を有効にするには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[状態] パラメーターを選択します。

あるいは、プログラムによって状態のログ記録を有効にすることもできます。

set_param(mdl,"SaveState","on")

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

out = sim(mdl);

既定では、ログ記録されたすべてのシミュレーション データが単一の Simulink.SimulationOutput オブジェクトとして out という名前の変数で返されます。

out
out = 
  Simulink.SimulationOutput:
                   tout: [64x1 double] 
                   xout: [1x1 Simulink.SimulationData.Dataset] 
                   yout: [1x1 Simulink.SimulationData.Dataset] 

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

ドット表記を使用して、ログに記録された状態データにアクセスします。既定では、状態データは、変数名 xout を使用して Dataset 形式でログに記録されます。

states = out.xout
states = 
Simulink.SimulationData.Dataset 'xout' with 2 elements

                        Name  BlockPath 
                        ____  _________ 
    1  [1x1 State]      ''    vdp/x1   
    2  [1x1 State]      ''    vdp/x2   

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

中かっこを使用して、Simulink.SimulationData.Dataset オブジェクトの最初の要素の状態データにアクセスします。シミュレーション ステップごとに状態情報がログに記録されます。

stx1 = states{1};
stx1.Values.Data
ans = 64×1

    2.0000
    2.0000
    2.0000
    2.0000
    1.9998
    1.9943
    1.9379
    1.8155
    1.5990
    1.2687
      ⋮

最終状態情報の保存

シミュレーションの一時停止時または停止時にのみ、最終状態をログに記録することで、ブロックの状態のスナップショットを保存することもできます。

シミュレーションの最後に状態情報をログに記録するには、各タイム ステップでの状態情報のログ記録を停止し、Final statesのログ記録を有効にします。[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[状態] パラメーターをクリアします。その後、[最終状態] パラメーターを選択します。

あるいは、プログラムによって最終状態のログ記録に切り替えることもできます。

set_param(mdl,"SaveState","off")
set_param(mdl,"SaveFinalState","on")

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

out = sim(mdl);

ドット表記を使用して、ログに記録された最終状態データにアクセスします。既定では、最終状態データは、変数名 xFinal を使用して Dataset 形式でログに記録されます。

fstates = out.xFinal
fstates = 
Simulink.SimulationData.Dataset 'xFinal' with 2 elements

                        Name  BlockPath 
                        ____  _________ 
    1  [1x1 State]      ''    vdp/x1   
    2  [1x1 State]      ''    vdp/x2   

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

中かっこを使用して、Simulink.SimulationData.Dataset オブジェクトの最初の要素の状態データにアクセスします。最終状態情報は、最後のシミュレーション ステップでのみログに記録されます。

fstx1 = fstates{1};
fstx1.Values.Data
ans = 2.0108

完全なモデルの操作点の保存

最終状態データを別のシミュレーションの初期状態として使用する場合は、完全なモデルの操作点を保存することを検討してください。完全なモデルの操作点を保存することを選択すると、最終的なブロックの状態に加えて、非表示のブロックの状態、ソルバーの状態、実行エンジンの状態、および一部のブロック出力値が保存されます。

[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[最終状態] パラメーターが選択されていることを確認します。次に、Save final operating pointを選択します。

あるいは、プログラムによって完全なモデルの操作点を保存することもできます。

set_param(mdl,"SaveFinalState","on","SaveOperatingPoint","on")

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

out = sim(mdl);

ドット表記により、既定の最終状態変数名 xFinal を使用して完全なモデルの操作点にアクセスします。

out.xFinal
ans = 
    Simulink.op.ModelOperatingPoint

    Operating point of the model 'vdp' at simulation time 20.

  Properties

    loggedStates
    description
    startTime (Read-only)
    snapshotTime (Read-only)

  Methods

    get
    set


参考

モデル設定

オブジェクト

関連するトピック