シミュレーションのフェーズ

モデルのシミュレーションプロセスは、評価、コンパイル、シミュレーションという3つのフェーズで実行されます。最初に評価とコンパイルのフェーズが発生し、シミュレーションフェーズで処理される構造が生成されます。

評価

評価フェーズはシミュレーションプロセスの最初のフェーズで、コンパイルフェーズに必要なデータの階層構造を作成します。

新しいデータ構造

評価フェーズでは、.scmファイルで定義されているモデル構造に基づいて、新しいデータ構造が作成されます。この新しいデータ構造は元のモデル構造のように階層構造ですが、評価プロセスでは参照先のライブラリブロックのコンテンツが取得および追加されるため、新しいデータ構造にはもっと多くのブロックが含まれていることがあります。統合された参照ブロックがスーパーブロックの場合、この統合アクションによって階層レベルが増加します。プログラム可能なスーパーブロックが評価プロセスで拡張および統合化された場合も、同じことが起こります。新しいデータ構造では元の構造にあったブロックが一部失われることもあります。特に、このフェーズで処理される一部の仮想ブロックがこれに該当します。評価の終了時には、データ構造に外部参照は含まれなくなります。

計算

評価プロセスでは、また、ブロックパラメーターのすべての数値が計算されてデータ構造に保存され、後にシミュレーションフェーズで使用できるようになります。一般的にブロックパラメーターの値はOML式で指定され、適切な作業領域で評価される必要があります。適切な作業領域の計算とブロックパラメーター式の評価は、評価フェーズで実行されます。本ソフトウェアで使用されるスコーピング規則に従って、各ダイアグラムの作業領域が計算されます。このためには、最初にモデルの初期化スクリプトを実行し、次に現在のダイアグラムにつながっているすべてのダイアグラムのダイアグラムコンテキストを上から下へと実行し、最後に現在のダイアグラムそのもののコンテキストを実行します。次に、現在のダイアグラムのブロックのブロックパラメーター値が、この作業領域で評価されます。このスコーピング規則により、ユーザーはモデルとダイアグラムをパラメーター化できます。例えば、初期化スクリプトまたはダイアグラムコンテキストで定義された変数の値を変更することで、複数ブロックの挙動が一度に変更されます。こうした変数は、それぞれモデルパラメーターおよびダイアグラムパラメーターと呼ばれますが、これらのパラメーターは、複数の場所で使用されるOML変数の値の更新だけでなく、汎用モデルの構築にも使用できます。例えば、一意のダイアグラムを使用して、すべての線形システムに対するLQGコントローラーフィードバックシステムを認識し、制御されたシステムの入力および出力数をパラメーター化することもできます。

コンパイル

コンパイルフェーズでは、評価フェーズで作成されたデータ構造の順序を計算します。

評価フェーズで提供されるデータの階層構造には、ブロックパラメーターのすべての数値が含まれるので、シミュレーションフェーズでブロックシミュレーション関数を呼び出すために必要な情報も含まれています。しかし、このデータ構造ですぐにはシミュレーションできません。シミュレーションフェーズには、ブロックシミュレーション関数を呼び出す順序が必要です。この順序の計算(様々なモデルの順序のより正確な計算)が、コンパイルフェーズの主な目的です。

コンパイルは2つのステージで実行されます。まず、評価フェーズから提供されたデータの階層構造を平坦化します。継承メカニズムやSetおよびGetブロックもこのステージで処理されます。最終的にモデルは、リンクで接続された基本ブロックを含む1つ(1層)のダイアグラムにまとめられます。このステージでは、アトミックスーパーブロックは基本ブロックとして表示され、それぞれのコンテンツは別々に処理されます。

コンパイルの2番目のステージでは、後のシミュレーションフェーズで使用するスケジューリングテーブルを計算します。シミュレーションモードごとに1つのテーブルが構築され、ここにはブロックのリストと、シミュレーションフェーズ中にブロックが呼び出される順序が含まれます。これらのスケジューリングテーブルにより、シミュレーションフェーズが非常に効率的に実行できるようになり、シミュレーションフェーズで実行時にスケジューリングを行う必要がなくなります。

シミュレーション

シミュレーションフェーズでは、スケジューリングテーブルと、コンパイルフェーズで生成されたその他の情報に基づいて、シミュレーションが実行されます。