Main Content

チャートでの望ましくない再帰の回避

再帰は、同じレベルのチャート階層におけるパラレル ステート間のサブステート遷移を制御する際に役立つことがあります。たとえば、指示のあるイベント ブロードキャストをパラレル ステートから兄弟関係のパラレル ステートに送って、サブステート遷移を指定することができます。このタイプの再帰的動作は望ましく、また効率的でもあります。詳細については、ローカル イベントをブロードキャストしてパラレル ステートを同期を参照してください。

しかし、チャートの実行時に望ましくない再帰が発生することもあります。望ましくない回帰を避けるため、再帰関数の呼び出しや指示のないローカル イベント ブロードキャストは使用しないでください。

再帰関数の呼び出し

チャートに fg、および h という関数があるとします。これらの関数は、グラフィカル関数、真理値表関数、MATLAB® 関数、または Simulink® 関数のどのような組み合わせでもかまいません。

再帰的動作を避けるには、以下を行わないでください。

  • f を呼び出す h を呼び出す gf で呼び出す。

  • fg、または h でこれらの関数自体を呼び出す。

指示のないローカル イベント ブロードキャスト

指示のないイベント ブロードキャストは、そのブロードキャストが認識されるすべてのステートにローカル イベントを送信します。指示のないイベント ブロードキャストの形式は以下のとおりです。

send(event_name)
ここで event_name はローカル イベントです。

再帰動作を避けるため、次の構文を使用して、指示のないイベント ブロードキャストを指示のあるイベント ブロードキャストに置き換えます。

send(event_name,state_name)
ここで event_name はチャート内のローカル イベント、state_name は遷移先ステートです。

  • ローカル イベント ブロードキャストがステート アクション内で発生する場合は、遷移先ステートがチャート階層において遷移元ステートの先祖ではないことを確認します。

  • ローカル イベント ブロードキャストが遷移内で発生する場合は、次を確認してください。

    • 遷移先ステートがチャート階層において遷移の先祖ではないこと。

    • 遷移が送信先ステートに接続していないこと。

詳細については、ローカル イベントをブロードキャストしてパラレル ステートを同期を参照してください。

シミュレーション時に Stateflow® チャートは指示のないローカル イベント ブロードキャストを検出できます。診断アクションのレベルを制御するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[診断][Stateflow] ペインで、[指示のないイベント ブロードキャスト] パラメーターを [なし][警告]、または [エラー] に設定します。既定の設定は [警告] です。詳細については、指示のないイベント ブロードキャスト (Simulink)を参照してください。

参考

関連するトピック