Main Content

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

ステート アクション タイプ

ステートには、entryduringexitbindon の各アクションを含め、さまざまなアクション タイプを設定できます。ステートのアクションを指定するには、全体として次の形式をもつステート アクション ラベルを使用します。

name/
entry:entry actions
during:during actions
exit:exit actions
bind:data_name, event_name
on event_name:on event_name actions
on message_name:on message_name actions

ステートの名前の後に、異なるタイプのアクションを別々の行に指定します。これらのアクションは任意の順序で入力できます。ステートメントに対しアクション タイプを明示的に指定 "しない" 場合、チャートではそのステートメントを組み合わせの entry,during アクションとして扱います。

たとえば、次のチャートにはさまざまなステート アクション タイプが含まれています。

以下の表は、様々なステート アクション タイプをまとめたものです。

ステート アクション省略形説明
entryenステートがアクティブになった時点で実行します。
exitexステートがアクティブであり、ステートからの遷移が発生した時点で実行します。
duringduステートがアクティブであり、特定のイベントが発生した時点で実行します。
bindなしイベントまたはデータ オブジェクトをバインドして、イベントのブロードキャストまたはデータ値の変更をステートとその子のみに限定します。

on event_name

なしステートがアクティブであり、event_name のブロードキャストを受信した時点で実行します。

on message_name

なしメッセージ message_name が使用可能なときに実行します。

on after(n,event_name)

on after(n,sec)

on after(n,msec)

on after(n,usec)

なし

次の場合に実行します。

  • 関連付けられたステートがアクティブになってからのイベント event_name の発生回数が n 回以上である。

  • 関連付けられたステートがアクティブになってから経過した時間が n 単位以上である。

詳細については、after を参照してください。

on at(n,event_name)

on at(n,sec)

なし

次の場合に実行します。

  • 関連付けられたステートがアクティブになってからのイベント event_name の発生回数が厳密に n 回である。

  • 関連付けられたステートがアクティブになってからの経過時間が厳密に n 秒である。

詳細については、at を参照してください。

on before(n,event_name)

on before(n,sec)

on before(n,msec)

on before(n,usec)

なし

次の場合に実行します。

  • 関連付けられたステートがアクティブになってからのイベント event_name の発生回数が n 回未満である。

  • 関連付けられたステートがアクティブになってから経過した時間が n 単位未満である。

詳細については、before を参照してください。

on every(n,event_name)

on every(n,sec)

なし

次の時点で実行します。

  • 関連付けられたステートがアクティブになってから、イベント event_namen 回発生するたび

  • 関連付けられたステートがアクティブになってから n 秒ごと

詳細については、every を参照してください。

entry アクション

entry アクションは、ステートがアクティブになると実行されます。entry アクションは、接頭辞 entry (または省略形 en) と、その後にコロン (:) および 1 つ以上のアクションを続けて構成されます。複数の entry アクションを区切るには、セミコロンまたはコンマを使用します。アクションを別々の行に入力することもできます。

前述の例では、チャートがデフォルト遷移を行ってステート A がアクティブになると、entry アクション id = x+y が実行されます。チャートまたはステートに入るを参照してください。

exit アクション

exit アクションは、ステートがアクティブで、そのステートからの遷移が発生すると実行されます。exit アクションは、接頭辞 exit (または省略形 ex) と、その後にコロン (:) および 1 つ以上のアクションを続けて構成されます。複数の exit アクションを区切るには、セミコロンまたはコンマを使用します。アクションを別々の行に入力することもできます。

前述の例では、チャートがステート A からステート B または C への遷移のいずれかを行うと、exit アクション time_out が実行されます。ステートを出るを参照してください。

during アクション

during アクションは、ステートがアクティブで、イベントが発生し、他のステートまたは現在のステートへの有効な遷移が存在しないときに実行されます。during アクションは、接頭辞 during (または省略形 du) とそれに続くコロン (:) および 1 つ以上のアクションで構成されます。複数の during アクションを区切るには、セミコロンまたはコンマを使用します。アクションを別々の行に入力することもできます。

前述の例では、他のステートへの有効な遷移が存在しないので、ステート C がアクティブであると必ず during アクション switch_on() が実行されます。Stateflow チャートの実行を参照してください。

bind アクション

bind アクションを使用すると、データおよびイベントをステートにバインドできます。bind アクションは、接頭辞 bind とそれに続くにコロン (:) および 1 つ以上のイベントまたはデータで構成されます。複数のイベントおよびデータを区切るには、セミコロンまたはコンマを使用します。イベントやデータを別々の行に入力することもできます。

特定のステートにバインドされたデータの変更やイベントのブロードキャストを行えるのは、ステートとその子だけです。他のステートは、バインドされたデータを読み取ったりバインドされたイベントをリッスンできますが、バインドされたデータを変更したり、バインドされたイベントを送信することはできません。

bind アクションは、バインド ステートがアクティブかどうかにかかわらず、チャートに対して適用されます。前述の例では、ステート A に対する bind アクション bind: id, time_out が、データ id とイベント time_out をステート A にバインドします。これにより、チャートの他のステート (およびその子) による id の変更や、イベント time_out のブロードキャストは禁止されます。

データを変更したりまたはその他のステートにバインドするイベントをブロードキャストしたりするアクションがその他のステートに含まれている場合は、解析エラーが発生します。このチャートには、解析エラーを生成する 2 つのステート アクションが含まれています。

ステート アクション解析エラーの理由
bind: id ステート B1 つのステートだけが、ステート A にバインドされたデータ id を変更できる
entry: time_out ステート C1 つのステートだけが、ステート A にバインドされたイベント time_out をブロードキャストできる

Function-Call イベントをステートにバインドすると、呼び出し元の Function-Call Subsystem もバインドされます。Function-Call Subsystem は、バインド ステートへ入ると有効になり、バインド ステートから出ると無効になります。この動作に関する詳細は、bind アクションによる Function-Call Subsystem の制御 を参照してください。

bind アクションは、Simulink® モデルの Stateflow® でのみサポートされます。

on アクション

on アクションは、ステートがアクティブであり、イベントまたはメッセージを受け取ると実行されます。on アクションは、接頭辞 on とそれに続く一意のイベント event_name またはメッセージ message_name、コロン (:)、および 1 つ以上のアクションで構成されます。複数の on アクションを区切るには、セミコロンまたはコンマを使用します。アクションを別々の行に入力することもできます。

複数のイベントまたはメッセージに対するアクションを指定できます。たとえば、異なるイベントにより異なるアクションをトリガーするには、ステート アクション ラベルに複数の on アクション ステートメントを入力します。

on ev1: action1();
on ev2: action2();
複数のイベントが同時に発生する場合、対応する on アクションは、ステート アクション ラベルでの表示順に実行されます。たとえば、前述の例では、イベント ev1 および ev2 が同時に発生した場合、action1() が最初に実行されて action2() が 2 番目に実行されます。Stateflow チャートの実行を参照してください。

関連するトピック