モデル操作点を使用したシミュレーション ワークフローの高速化
システムを効果的に設計するために、モデルを繰り返しシミュレートして、さまざまな入力、境界条件、動作条件に基づいてシステムを解析できます。多くのアプリケーションでは、モデル化およびシミュレートする必要があるシステムは、重要な動的動作を伴う始動フェーズを示します。たとえば、飛行機のモデルの一連のシミュレーションでは、各航空機操縦の前に飛行の離陸段階が発生します。そのようなシステムに対して一連のシミュレーションを実行する場合、モデルの操作点を使用して一連のシミュレーションに必要な時間を短縮できます。
始動フェーズを 1 回シミュレートします。
始動フェーズの終了時に最終操作点を保存します。
各シミュレーションの初期状態として始動フェーズの終了時のモデルの操作点を使用します。
モデルの操作点には、ブロックの状態、非表示のブロックの状態、ソルバーの状態、実行エンジンの状態など、シミュレーションの再開に必要なすべての情報が含まれています。操作点を初期状態として使用してシミュレーションを再開すると、シミュレーション結果は、同等のシミュレーションを最初から実行した場合の結果と完全に一致します。
操作点を保存せずに最終状態を保存した場合、状態ログで取得されたブロックの状態のみが保存されます。ブロックの状態だけでは、シミュレーションを再開するには不十分である場合があります。詳細については、Save Block States and Simulation Operating Pointsを参照してください。
次のフロー チャートは、初期操作点から一連のシミュレーションを実行するワークフローをまとめたものです。初期操作点から開始する各シミュレーションでは、毎回始動フェーズをシミュレートすることなく、調整可能なパラメーターなどのモデルの一部を変更して、さまざまなシナリオをシミュレートできます。
モデルの操作点の保存
[コンフィギュレーション パラメーター] ダイアログ ボックスを使用して、最終操作点を保存するようにモデルを構成できます。
[モデル化] タブの [設定] で、[モデル設定] をクリックします。
[コンフィギュレーション パラメーター] ダイアログ ボックスで、[データのインポート/エクスポート] ペインを選択します。
[データのインポート/エクスポート] ペインで [最終状態] および [最終の操作点を保存] を選択します。
[OK] をクリックします。
モデルの操作点は常に、Simulink.op.ModelOperatingPoint
オブジェクトとして保存されます。既定では、シミュレーション結果は単一の Simulink.SimulationOutput
オブジェクトとして返されます。モデルの操作点は、[コンフィギュレーション パラメーター] ダイアログ ボックスの [最終状態] ボックス、または FinalStateName
パラメーターを使用して指定した名前をもつ SimulationOutput
オブジェクトのプロパティに保存されます。
最終操作点を保存するように構成されたモデルをシミュレートすると、次のときにモデルの操作点が保存され、ワークスペースで使用できるようになります。
シミュレーションが完了した。
Stop ブロックなどのブロックのシミュレーションが停止した。
[停止] をクリックするか、関数
set_param
を使用して停止するシミュレーション コマンドを実行することで、シミュレーションを停止した。[一時停止] をクリックするか、関数
set_param
を使用して一時停止するシミュレーション コマンドを実行することで、シミュレーションを一時停止した。
シミュレーション中の任意の時点でモデルの操作点を保存するには、シミュレーションを一時停止し、関数 get_param
を使用してモデルの CurrentOperatingPoint
パラメーターの値を取得します。
op = get_param(mdl,"CurrentOperatingPoint");
シミュレーションで複数の操作点を保存できるため、要件に応じて複数の操作点の 1 つからシミュレーションを続行できます。
モデルの操作点の復元
モデルの操作点からシミュレーションを再開するには、再開するシミュレーションの終了時間を指定し、初期状態の読み込みを有効にして、モデルの操作点を表す Simulink.op.ModelOperatingPoint
オブジェクトを初期状態として指定します。
[シミュレーション] タブの [シミュレーション] セクションの [終了時間] フィールドに、モデルの操作点を表す
ModelOperatingPoint
オブジェクトのsnapshotTime
プロパティの値より大きい値を入力します。[モデル化] タブの [設定] で、[モデル設定] をクリックします。
[コンフィギュレーション パラメーター] ダイアログ ボックスで、[データのインポート/エクスポート] ペインを選択します。
[データのインポート/エクスポート] ペインで [初期状態] を選択します。
[初期状態] フィールドに、モデルの操作点が含まれている変数の名前を指定します。たとえば、既定の変数名を使用して最終操作点を保存した場合は、「
xFinal
」と入力します。[OK] をクリックします。
シミュレーションの初期状態をモデルの操作点として指定すると、シミュレーションの開始時間は変更されません。初期操作点からのシミュレーションでは、操作点が作成されたシミュレーションを続行するため、両方のシミュレーションの開始時間が同じになります。また、開始時間は、すべての時間および時間依存変数の基準の役割も果たします。たとえば、ブロックの操作点情報には、操作点が保存された時点までにシミュレーションでそのブロックに対して発生したサンプル時間ヒットの数が含まれる場合があります。
たとえば、モデルの始動フェーズのシミュレーションを 0 秒から 100 秒まで実行し、100 秒の時点でモデルの操作点を保存するとします。100 秒から 200 秒までシミュレーションを実行するには、以下のようにします。
モデルの終了時間を 200 秒として指定します。
シミュレーションの初期状態を、100 秒の時点で保存したモデルの操作点として指定します。
モデルの開始時間は 0 秒のままにします。
シミュレーションを実行すると、モデルの操作点を復元する一環として、シミュレーション時間 100 秒が復元されます。モデルの操作点が保存された時点までにモデル内のブロックに 10 個のサンプル時間ヒットがあったという情報が、モデルの操作点に含まれているとします。再開されたシミュレーションの最初のタイム ステップは、100 を基準とした最初のヒットではなく、0 を基準としたブロックの 11 番目のサンプル時間ヒットとして認識されます。
100 秒から 200 秒まで実行したシミュレーションの最終操作点を保存すると、その操作点を別のシミュレーションの初期状態として使用してシミュレーションを再度続行できます。たとえば、2 番目のシミュレーションの終了時に保存された操作点を 3 番目のシミュレーションの初期状態として指定することで、別のシミュレーションを 200 秒から 250 秒まで実行できます。
初期操作点から開始するシミュレーションの開始時間が ModelOperatingPoint
オブジェクトの startTime
プロパティの値に一致していない場合、警告が出され、startTime
プロパティの値がシミュレーションの開始時間として使用されます。
モデルの操作点の保存と復元に関する追加の考慮事項
モデルの操作点の保存と復元の間にモデルに加えた変更は、シミュレーションの操作点の有効性やシミュレーション結果に影響する可能性があります。
モデルに構造的な変更を加えると、操作点は有効ではなくなり、常にエラーが出されます。
モデルの名前変更やログ設定の変更など、非構造的な変更を加えると、その変更がインターフェイスのチェックサムに影響した場合にのみ、既定で警告が出されます。
モデルに対する非構造的な変更は通常、モデルの操作点を復元する機能には影響しませんが、シミュレーション結果に影響する可能性があります。非構造的な変更がインターフェイスのチェックサムに影響した場合の診断動作を指定するには、[操作点復元インターフェイスのチェックサムの不一致] パラメーターを使用します。
既定では、別のリリースで保存された操作点からモデルをシミュレートしようとすると、エラーが出されます。代わりに、警告を出し、ModelOperatingPoint
オブジェクトの loggedStates
プロパティに保存されているブロックの状態を復元するように構成できます。ただし、シミュレーション結果は、初期操作点なしで開始時間からシミュレーションを実行した場合の結果と一致しない可能性があります。詳細については、異なるリリースの操作点オブジェクトを参照してください。
すべてのブロック、機能、モデル化パターン、およびシミュレーション モードがモデルの操作点の保存と復元をサポートしているわけではありません。場合によっては、モデルの操作点の制限を回避するために、モデルの操作点なしでブロックの状態を保存および復元できます。詳細については、Save Block States and Simulation Operating Pointsを参照してください。
機能またはモデル化パターン | 考慮事項または制限事項 |
---|---|
シミュレーション モード | モデルの操作点の保存と復元は、ノーマル、アクセラレータ、およびラピッド アクセラレータのシミュレーションでサポートされています。 あるシミュレーション モードで実行されたシミュレーションで操作点を保存し、別のシミュレーション モードで実行されるシミュレーションでその操作点を復元することはできません。 ラピッド アクセラレータ シミュレーションでは追加の制限が適用されます。 |
ラピッド アクセラレータ シミュレーション | ラピッド アクセラレータ シミュレーションでのモデルの操作点の保存と復元には、次の制限があります。
以下のブロックは、ラピッド アクセラレータ シミュレーションにおけるモデルの操作点の保存と復元をサポートしていません。
|
モデル参照 | 操作点の保存と復元は、ローカル ソルバーを使用するように構成された参照モデルを 1 つ以上含むモデルの階層構造に対してはサポートされません。詳細については、Use Local Solvers in Referenced Modelsを参照してください。 アクセラレータ モードでシミュレートするように構成された参照モデル内のブロックでは、ブロックの状態などの操作点情報は変更できません。 次のブロックは、アクセラレータ モードでシミュレートするように構成された参照モデル内にある場合、モデルの操作点をサポートしていません。
|
MATLAB Function ブロック | モデルの操作点の保存と復元は通常、MATLAB Function ブロックが含まれているモデルではサポートされています。ただし、MATLAB® コードで特定の構造を使用すると、サポートに影響することがあります。 モデルの操作点の保存と復元は、ハンドル オブジェクト データ型または 1 つ以上のハンドル オブジェクトを含む値をもつ永続変数を使用しているコードを使用している MATLAB Function ブロックが含まれているモデルではサポートされていません。 |
カスタム C コード | 静的変数や副次的な影響 (ファイルへの書き込みなど) をもつカスタム C コードを呼び出すブロックでは、操作点情報が正しくないことがあります。 |
S-Function | S-Function を作成するとき、操作点準拠を設定することで、S-Function の操作点情報を保存および復元する方法を指定できます。
操作点情報を保存しないように S-Function が操作点準拠を構成している場合でも、S-Function ブロックの出力は操作点の一部として保存されます。モデルの操作点の保存と復元は、カスタム データ型の出力を生成する S-Function ではサポートされていません。詳細については、Configure Custom Data Typesを参照してください。 |
コード生成 | Simulink® Coder™ や Embedded Coder® を使用してモデルに対して生成したコードでモデルの操作点を保存または復元することはできません。 |
Stack (DSP System Toolbox) ブロック | [フル スタックをプッシュ] パラメーター値が [フル スタックをプッシュ] パラメーター値が |
Queue (DSP System Toolbox) ブロック | [フル レジスタにプッシュ] パラメーター値が [フル レジスタにプッシュ] パラメーター値が |
モデル名のプログラムによるインターフェイス | モデル名をプログラムによるインターフェイスとして使用する場合、操作点を状態の入力として指定することはできません。詳細については、Use Model Name as Programmatic Interfaceを参照してください。 |