フォークとジョイン

<< 目次を表示 >>

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

フォークとジョイン

フォーク要素は、入力した遷移を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

 

注意:

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