フォークとジョイン

<< 目次を表示 >>

ページ位置:  シミュレーション > 外部実行の状態マシン >

フォークとジョイン

フォーク要素は、入力した遷移を2つ以上に分割し並行動作せるために利用できます。フォークから出力される遷移にはトリガやガード条件・効果を設定できません。出力された内容は、論理的な並行動作となります。

 

ジョイン要素は、フォークで分割した遷移について、まとめる働きをします。複数の遷移からの入力について、すべての入力が完了するとジョイン要素の先の遷移に進みます。

これらの使い方について、具体的な例で説明します。

 

 

状態マシンのモデリング

 

クラスの定義

 

状態マシン

 

 

シミュレーションのための準備と実行

 

成果物要素

この例では、JavaScriptを言語として指定します。他の言語の場合には、Visual StudioやJDK等の環境が必要となります。

 

 

 

ソースコードの生成

FornNJoinSimulation要素を選択した状態で、「シミュレーション」リボン内の「外部実行」パネルにある「状態マシン」ボタンを押し、「生成・ビルドと実行」 を選択します。

出力先となるディレクトリを指定します。

 

注意:

指定したディレクトリの内容は生成前に削除されます。他のファイルが配置されていない場所を指定して下さい。

 

 

 

シミュレーションの実行

シミュレーションを実行すると、下の画像のようにState1, StateA1, StateB1がアクティブになります。

 

 

シミュレーショントリガサブウィンドウを利用して、トリガを発行します。

 

トリガXを発行すると、StateA1からStateA2へ遷移し、さらにその先のジョイン要素まで遷移します。

 

注意:

ジョイン要素は、入力となるすべての遷移が到達しないと出力の遷移は行われません。上の例では、StateB1からの遷移は行われていませんので、ジョイン要素から先には遷移しません。

 

 

トリガYを発行すると、StateB2に遷移し、さらにジョイン要素に遷移します。これにより、すべての入力遷移が到達したので、出力の遷移が実行され、終了となります。

以下の内容は、シミュレーションサブウィンドウに表示されるログの例です。

 

       myClass[MyClass].Initial_82285__TO__fork_82286_82286_61745 Effect

       myClass[MyClass].StateMachine_State1 ENTRY

       myClass[MyClass].StateMachine_State1 DO

       myClass[MyClass].fork_82286_82286__TO__StateA1_57125 Effect

       myClass[MyClass].StateMachine_State1_StateA1 ENTRY

       myClass[MyClass].StateMachine_State1_StateA1 DO

       myClass[MyClass].fork_82286_82286__TO__StateB1_57126 Effect

       myClass[MyClass].StateMachine_State1_StateB1 ENTRY

       myClass[MyClass].StateMachine_State1_StateB1 DO

       Trigger X

       myClass[MyClass].StateMachine_State1_StateA1 EXIT

       myClass[MyClass].StateA1__TO__StateA2_57135 Effect

       myClass[MyClass].StateMachine_State1_StateA2 ENTRY

       myClass[MyClass].StateMachine_State1_StateA2 DO

       myClass[MyClass].StateMachine_State1_StateA2 EXIT

       myClass[MyClass].StateA2__TO__join_82287_82287_57134 Effect

       Trigger Y

       myClass[MyClass].StateMachine_State1_StateB1 EXIT

       myClass[MyClass].StateB1__TO__StateB2_57133 Effect

       myClass[MyClass].StateMachine_State1_StateB2 ENTRY

       myClass[MyClass].StateMachine_State1_StateB2 DO

       myClass[MyClass].StateMachine_State1_StateB2 EXIT

       myClass[MyClass].StateB2__TO__join_82287_82287_57132 Effect

       myClass[MyClass].StateMachine_State1 EXIT

       myClass[MyClass].join_82287_82287__TO__Final_105754_57130 Effect

 

注意:

実行中の動作シーケンスは、シミュレーションサブウィンドウで確認できます。