ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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

ステートには、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)

なしステートがアクティブになり、event_name のブロードキャストを n 回、受信してから実行する

on before(n, event_name)

なしステートがアクティブになり、event_name のブロードキャストを n 回、受信する前に実行する

on at(n, event_name)

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

on every(n, event_name)

なしステートがアクティブになり、event_name のブロードキャストを n 回、受信するたびに実行する

afterbeforeat、および every 時相論理演算子の詳細については、時相論理を使用したチャート実行の制御 を参照してください。

メモ

絶対時間のキーワード secmsec、および usec を使用して、時相論理演算子 after および before を呼び出すことができます。詳細については、絶対時間の時相論理演算子 を参照してください。

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 の制御 を参照してください。

on アクション

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

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

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

関連するトピック