フラグ
フラグはシミュレーションの特定のフェーズを記述します。モデルでは、フラグでブロックを呼び出し、さまざまな操作を実行できます。
例えば、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;
}
}