フラグ

フラグはシミュレーションの特定のフェーズを記述します。モデルでは、フラグでブロックを呼び出し、さまざまな操作を実行できます。

例えば、flag= VssFlag_OutputUpdate (= 1)でブロックを呼び出してその出力を更新でき、flag= VssFlag_Derivatives (= 0)でブロックを呼び出して状態導関数を得ることができます。

各フラグは次のように定義されています。

発行するフラグ番号 フラグ名 このフラグでブロックを呼び出して得られる結果
Flag 0 VssFlag_Derivatives 連続時間の状態の時間導関数を提供することをシミュレーターからブロックに要求します。
Flag 1 VssFlag_OutputUpdate シミュレーターからブロックの出力を要求します。
Flag 2 VssFlag_StateUpdate イベントによって、ブロックの離散時間と連続時間の状態が更新されるように、そのブロックがアクティベートされています。
Flag 3 VssFlag_EventScheduling ブロックは、その1つ以上の出力アクティベーションポートで新しいイベントをプログラムできます。
Flag 4 VssFlag_Initialize シミュレーションの中で、初期化の問題を解決できる初期段階でブロックが呼び出されます。
Flag 5 VssFlag_Terminate シミュレーションが終了した最後の時点、あるいはエラーまたはユーザーの要求によってシミュレーションが停止した最後の時点で、シミュレーターからブロックを一度呼び出します。
Flag 6 VssFlag_Reinitialize ブロックは、その入力値の関数としての連続時間状態をリセットできます。
Flag 7 VssFlag_ReinitializeImplicit イベントがソルバーを再起動した後の陰的モデルで、陰的ブロックがその状態と状態導関数を更新します。
Flag 8 VssFlag_Projection 代数的拘束を伴う ODE によってブロックのダイナミクスが表される場合、シミュレーターからブロックを呼び出して、投影の更新または拘束の残差を計算します。
Flag 9 VssFlag_ZeroCrossings シミュレーターからブロックに、そのゼロクロッシングサーフェスの提供を要求します。
Flag 10 VssFlag_Jacobians シミュレーターからブロックに、モデルの解析ヤコビ行列の提供を要求します。
Flag 11 VssFlag_GotoPause シミュレーションが停止する前に、要求されたジョブを実行するためにブロックが一時停止します。
Flag 12 VssFlag_ReturnFromPause シミュレーションの一時停止を終了したブロックがシミュレーションを再開します。

フラグを使用してCのカスタムブロックのシミュレーション関数を定義する方法を示す例を以下に示します。

VSS_EXPORT void
        CBlockFunction(vss_block *block,int flag)
{
SCSREAL_COP *u1=GetRealInPortPtrs(block,1);
     int mu1=GetInPortSize(block,1,1);
     int nu1=GetInPortSize(block,1,2);
SCSREAL_COP *y1=GetRealOutPortPtrs(block,1);
     int my1=GetOutPortSize(block,1,1);
     int ny1=GetOutPortSize(block,1,2);
     int nevprt=GetEventCode(block);
     switch (flag){
     case VssFlag_Initialize:

       break;
     case VssFlag_Reinitialize:

       break;
     case VssFlag_Terminate:

       break;
     case VssFlag_OutputUpdate:

       break;
     }
}