チャートの実行タイプ
Stateflow チャートのライフ サイクル
Stateflow® チャートは、以下に示す複数の実行ステージを経て実行されます。
ステージ | 説明 |
---|---|
非アクティブ | チャートにアクティブなステートが存在していない |
アクティブ | チャートにアクティブなステートが存在している |
スリープ | チャートにアクティブなステートは存在しているが、処理する対象のイベントは存在していない |
Simulink® モデルによって最初に Stateflow チャートがトリガーされた時点では、チャートは非アクティブであり、アクティブなステートは存在していません。実行後、Simulink モデルの初期トリガー イベントの処理が完了したチャートは、モデルに制御を戻して、スリープ状態に移行します。次の Simulink トリガー イベントで、チャートはスリープ状態からアクティブ ステージに移行します。
イベントを使用してチャートを実行を参照してください。
非アクティブなチャートの実行
チャートが非アクティブで、Simulink モデルからのイベントで最初にトリガーされるとき、まず既定のフロー チャートが実行されます (一連のフロー チャートの実行順序を参照)。このアクションによってステートへの移行が行われず、チャートにパラレル構造が設定されている場合は、各パラレル ステートがアクティブになります (チャートまたはステートに入るを参照)。
既定のフロー パスの実行によってステート Entry が発生しなかった場合は、ステートの矛盾エラーが発生します。
アクティブなチャートの実行
チャートは Simulink モデルによって最初にトリガーされた後に、アクティブなチャートになります。モデルから別のイベントを受信した場合は、再びアクティブ チャートとして実行されます。チャートにステートが存在しない場合は、実行ごとにチャートが初期化されることになります。そうでない場合は、アクティブなサブステートが実行されます。パラレル ステートは、アクティブになるのと同じ順序で実行されます。
チャートの初期化実行
Stateflow チャートが入力イベントの受信時にのみ実行されるように設定できます。既定では、これらのチャートは最初の入力イベントを受信するまで非アクティブのままとなります。
シミュレーション開始と同時にチャートをアクティブにする必要がある場合は、[初期化時に指定されたチャートを実行 (入力)] チャート プロパティを有効にします。このオプションをオンにすると、チャートのステート構成は、最初の入力イベントの発生時ではなく、ゼロ時間で初期化されます。S-Function の mdlInitializeConditions() (Simulink) フェーズに対応する時間 0 でのモデル初期化フェーズ中に、チャートのデフォルト遷移パスが実行されます。詳細については、初期化時に指定されたチャートを実行 (入力)を参照してください。
メモ
このチャートの出力が SimEvents® ブロックに接続される場合は、このチェック ボックスを選択しないでください。Stateflow チャートと SimEvents ブロックを組み合わせてモデルで使用する方法の詳細は、SimEvents ドキュメンテーションを参照してください。
初期化フェーズの過渡特性を考慮して、初期化時に実行されるチャートのデフォルト遷移パスに含まれる特定のアクションと、そのアクションに関連するステート entry アクションは実行しないでください。以下のガイドラインに従います。
チャートの入力端子に接続されたブロックで出力が初期化されていない可能性があるので、チャート入力データにアクセスしないでください。
他のチャートは初期化されていない可能性があるので、エクスポートされたグラフィカル関数を他のチャートから呼び出さないでください。
Triggered Subsystem は初期化されていない可能性があるので、関数呼び出し出力イベントをブロードキャストしないでください。
チャートの入力データへの無効なアクセスに対する診断アクションのレベルを制御するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[診断] 、 [Stateflow] ペインで、[チャート初期化の無効な入力データ アクセス] パラメーターを [なし]
、[警告]
、または [エラー]
に設定します。既定の設定は [警告]
です。詳細については、Invalid input data access in chart initialization (Simulink)を参照してください。
ステートを含んでいないチャートでは、[初期化時に指定されたチャートを実行 (入力)] チャート プロパティは無視されます。
初期化時の実行の例
この例では、Pulse ブロックが 2 秒に 1 回チャートをトリガーします。Pulse ブロックがチャートをトリガーするたびに、チャートは 1 つのステップを実行します。チャートはトリガー間でステップを実行しません。
チャートには、初期値が 0
のシンボル output
が含まれています。entry
アクションが実行されると、output
の値は 1 に変更されます。during
アクションが実行されると、output
の値は 2
に変更されます。
[初期化時に指定されたチャートを実行 (入力)] チャート プロパティを無効にすると、チャートはシミュレーション開始時に非アクティブになります。
2 秒後、Pulse ブロックがチャートをトリガーします。チャートは Set_Output
ステートに入ります。entry
アクションが実行され、output
が 1 に設定されます。
4 秒後、Pulse ブロックがもう一度チャートをトリガーします。チャートは Set_Output
ステートのままとなります。during
アクションが実行され、output
が 2
に設定されます。
[初期化時に指定されたチャートを実行 (入力)] チャート プロパティを有効にすると、シミュレーション開始と同時にチャートが 1 ステップ実行されます。チャートは Set_Output
ステートに入ります。entry
アクションが実行され、output
が 1 に設定されます。
2 秒後、Pulse ブロックがチャートをトリガーします。チャートは Set_Output
ステートのままとなります。during
アクションが実行され、output
が 2
に設定されます。