メモ
R2019a では、SimState
オブジェクトの名前が ModelOperatingPoint
に変更されました。
システムを効果的に設計するために、モデルを繰り返しシミュレートして、さまざまな入力、境界条件、動作条件に基づいてシステムを解析できます。多くのアプリケーションでは、複数のシミュレーションを実行する場合、重要な動的動作を伴う始動フェーズは共通です。たとえば、ガス タービン エンジンのコールド スタートは、飛行機の操縦前に発生します。複数のシミュレーションを実行する際の理想的な方法は次のとおりです。
始動フェーズを 1 回シミュレートします。
始動フェーズの終了時にシミュレーション スナップショットを保存します。
そのスナップショットをそれぞれの状況や操縦の初期状態として使用します。
シミュレーションのスナップショットの保存には ModelOperatingPoint
オブジェクトを使用します。スナップショットを保存した後、以降のシミュレーションでは、ModelOperatingPoint
オブジェクトを復元して初期条件の設定に使用します。
ModelOperatingPoint
オブジェクトには次の情報が格納されます。
ログが作成された状態
ソルバーおよび実行エンジンの状態
ゼロクロッシングを登録するブロックのゼロクロッシング信号
モデル内の一部のブロックの出力値
Simulink® では、状態情報として出力値が効果的に使用されているかどうかを判定するためにブロックの接続などの情報を解析します。
ModelOperatingPoint
オブジェクトには以下のブロックのログに記録されない状態も格納されます。
Transport Delay
Variable Transport Delay
From Workspace
For Each Subsystem
条件付き実行サブシステム
Stateflow
MATLAB System
Simscape™ Multibody™ Second Generation
ModelOperatingPoint
オブジェクトでは、これらの情報が格納されるため、操作点から開始したシミュレーションと最初から実行したシミュレーションの結果が同じになります。
ModelOperatingPoint
オブジェクトでシミュレーションのスナップショットを保存すると、モデルのログが作成された状態以外の情報も保存されます。シミュレーションを中断なしで実行した場合と同じ結果を得るには、それらのすべての情報を復元します。たとえば、ソルバー情報が影響するシミュレーションの場合、ModelOperatingPoint
を使用せずにブロックの状態を変更すると異なる結果になることがあります。
操作点はシミュレーション中に複数保存し、それらの任意の操作点からシミュレーションを再開できます。
ModelOperatingPoint
オブジェクトでは、Transport Delay ブロックなど、通常は特定の状態に戻すことが難しいブロックの状態も復元されます。Transport Delay ブロックの状態は、[最終状態] コンフィギュレーション パラメーターを使用してデータのログを作成した場合、構造体形式または配列形式で保存されません。
シミュレーション状態は、[コンフィギュレーション パラメーター] の [データのインポート/エクスポート] ペインにある [最終状態] オプションを使用して保存することもできます。ただし、このオプションで保存されるのは "ログが作成された" 状態 (ブロックの連続状態と離散状態) だけです。これらの状態はモデルの完全なシミュレーション状態の一部にすぎません。ブロックのログに記録されない状態に関する情報は含まれません。ブロックを適切に実行するには、それらの情報も必要になります。
操作点は、最終ステップの始めに次のいずれかの方法で保存できます。
最後の [終了時間]。
[一時停止] または [停止] ボタンでシミュレーションを中断したとき。get_param('modelName','CurrentOperatingPoint')
を使用してシミュレーションを一時停止したときにも操作点を保存できます。
set_param
またはブロック (Stop ブロックなど) を使用してシミュレーションを停止したとき。
[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[最終状態] チェック ボックスをオンにします。[最終の操作点を保存] チェック ボックスが選択可能になります。
[最終の操作点を保存] チェック ボックスをオンにします。
[最終状態] テキスト ボックスに ModelOperatingPoint
オブジェクトの変数名を入力します。
モデルのシミュレーションを実行します。
set_param
で sim
コマンドを使用します。SaveOperatingPoint
パラメーターを 'on'
に設定します。
fuelsys set_param('fuelsys','SaveFinalState','on','FinalStateName',... 'myOperPoint','SaveOperatingPoint','on'); simOut = sim('fuelsys','StopTime','10') myOperPoint = simOut.myOperPoint
ヒント
操作点を保存する前に、[コンフィギュレーション設定] 、 [シミュレーション ターゲット] 、 [詳細設定パラメーター] の [ブロック削減] パラメーターを無効にします。
モデルを変更した後、ModelOperatingPoint
オブジェクトを使用してシミュレーション スナップショットを復元します。[開始時間] の値は、操作点を生成したシミュレーションの値と同じになります。元のシミュレーションと現在のシミュレーションの両方において、この値がすべての時間と時間依存変数の基準値になります。たとえば、ブロックは、シミュレーションが開始されてから発生したサンプル時間のヒット数を ModelOperatingPoint
オブジェクトとして保存し復元できます。
0 ~ 100 秒の範囲で実行したモデルを 100 ~ 200 秒の範囲で実行するとします。[開始時間] は、元のシミュレーションでも現在のシミュレーションでも 0 秒です。現在のシミュレーションの初期時間は 100 秒です。また、元のシミュレーション中にブロックで 10 のサンプル時間のヒットがあった場合、Simulink は、次のサンプル時間のヒットは 100 秒ではなく 0 秒を基準として、11 番目のヒットであると認識します。
メモ
ModelOperatingPoint
を復元する前に [開始時間] を変更した場合、Simulink によって、[開始時間] の値が ModelOperatingPoint
に保存されている値に置き換えられます。
[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[ワークスペースから読み込み] にある [初期状態] チェック ボックスをオンにします。テキスト ボックスが入力可能になります。
テキスト ボックスに ModelOperatingPoint
が格納された変数の名前を入力します。
[終了時間] の値を操作点を保存した時間よりも後の時間に設定します。
上記の例で保存した操作点を復元するようにシミュレーションを設定するには次のようにします。
set_param('fuelsys','LoadInitialState','on','InitialState',... 'myOperPoint'); myOperPoint = simOut.myOperPoint
モデルをシミュレートするときに ModelOperatingPoint
オブジェクトが復元されます。
R2010a 以降のリリースで保存された ModelOperatingPoint
オブジェクトを使用してモデルの ModelOperatingPoint
を復元することができます。ただし、この方法で復元できるのは、モデルのログが作成された状態だけです。ModelOperatingPoint
の保存に使用された Simulink のバージョンは、ModelOperatingPoint
オブジェクトの [バージョン] パラメーターで確認できます。
Simulink では、初期状態として指定された ModelOperatingPoint
オブジェクトが現在のリリースで保存されたものかどうかを確認します。Simulink の既定の設定では、ModelOperatingPoint
が現在のリリースで保存されたものでなければエラー メッセージが表示されます。Simulink で警告としてメッセージを表示できるように診断を設定することによって、可能な限り多くの値の復元を試みることができます。ここで最善の結果が得られるように復元を有効にするには、[コンフィギュレーション パラメーター] ダイアログ ボックスで、[Operating Point object from earlier release] のメッセージを [警告]
に設定します。19a では、以前の SimState
という名前のオブジェクトが ModelOperatingPoint
オブジェクトとして読み込まれます。