チャートでの望ましくない再帰の回避
再帰は、同じレベルのチャート階層におけるパラレル ステート間のサブステート遷移を制御する際に役立つことがあります。たとえば、指示のあるイベント ブロードキャストをパラレル ステートから兄弟関係のパラレル ステートに送って、サブステート遷移を指定することができます。このタイプの再帰的動作は望ましく、また効率的でもあります。詳細については、ローカル イベントをブロードキャストしてパラレル ステートを同期を参照してください。
しかし、チャートの実行時に望ましくない再帰が発生することもあります。望ましくない回帰を避けるため、再帰関数の呼び出しや指示のないローカル イベント ブロードキャストは使用しないでください。
再帰関数の呼び出し
チャートに f
、g
、および h
という関数があるとします。これらの関数は、グラフィカル関数、真理値表関数、MATLAB® 関数、または Simulink® 関数のどのような組み合わせでもかまいません。
再帰的動作を避けるには、以下を行わないでください。
f
を呼び出すh
を呼び出すg
をf
で呼び出す。f
、g
、またはh
でこれらの関数自体を呼び出す。
指示のないローカル イベント ブロードキャスト
指示のないイベント ブロードキャストは、そのブロードキャストが認識されるすべてのステートにローカル イベントを送信します。指示のないイベント ブロードキャストの形式は以下のとおりです。
send(event_name)
event_name
はローカル イベントです。再帰動作を避けるため、次の構文を使用して、指示のないイベント ブロードキャストを指示のあるイベント ブロードキャストに置き換えます。
send(event_name,state_name)
event_name
はチャート内のローカル イベント、state_name
は遷移先ステートです。
ローカル イベント ブロードキャストがステート アクション内で発生する場合は、遷移先ステートがチャート階層において遷移元ステートの先祖ではないことを確認します。
ローカル イベント ブロードキャストが遷移内で発生する場合は、次を確認してください。
遷移先ステートがチャート階層において遷移の先祖ではないこと。
遷移が送信先ステートに接続していないこと。
詳細については、ローカル イベントをブロードキャストしてパラレル ステートを同期を参照してください。
シミュレーション時に Stateflow® チャートは指示のないローカル イベント ブロードキャストを検出できます。診断アクションのレベルを制御するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[診断] 、 [Stateflow] ペインで、[指示のないイベント ブロードキャスト] パラメーターを [なし]
、[警告]
、または [エラー]
に設定します。既定の設定は [警告]
です。詳細については、指示のないイベント ブロードキャスト (Simulink)を参照してください。