<< 目次を表示 >> ページ位置: シミュレーション > 外部実行の状態マシン > 履歴 |
履歴疑似状態は状態内の領域に配置されている子状態について、親状態を抜ける際の最後の子状態の情報を保持し、次に親状態に遷移したときに同じ子状態から再開する動作履歴を表現する便利な要素です。親状態から他の状態に遷移して戻る場合のほか、自己遷移の場合にも有効です。
履歴には次の2つの種類があります。
ここでは、この動作の違いを具体的に説明するために、クラスDeepTurbineManagerとShallowTurbineManagerの2つを定義します。内容はほとんど同じですが、配置される履歴要素の種類のみが異なります。
どちらの場合もコンポジット状態Turbine_01, Turbine_02, Turbine_03があり、それぞれOffとOnの状態を持ちます。それぞれに履歴状態が配置されています。
これらの違いをシミュレーション機能を利用すると容易に把握できます。
クラスDeepTurbineManagerが持つ状態マシンの内容は以下の通りです。
クラスShallowTurbineManagerが持つ状態マシンの内容は以下の通りです。
ヒント: |
履歴要素をダイアグラム内で右クリックし、「追加設定 | 深い履歴」 を実行することで、浅い履歴と深い履歴を切り替えられます。 |
初回の実行時
シミュレーションの実行時は、状態Turbine_01と子状態Offがアクティブになります。
トリガ [MODE, SPEED] を発行します。
その結果、以下の状態がアクティブになります。
ここまでの動作はdeepManagerとshallowManagerで共通です。
トリガ: [NEXT] を発行します。
以下の内容は、シミュレーションサブウィンドウに表示されるログの例です。
01 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01_On_High EXIT
02 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01_On EXIT
03 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01 EXIT
04 shallowManager[ShallowTurbineManager].Turbine_01__TO__History2_105720_61730 Effect
05 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02 ENTRY
06 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02 DO
07 shallowManager[ShallowTurbineManager].History2_105720__TO__Off_61731 Effect
08 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02_Off ENTRY
09 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02_Off DO
注意: |
deepManagerクラスの場合も、上記のログは同じになりますので割愛します。 |
これらの内容からわかること:
そして、以下の状態がアクティブになります。
ここまでの動作もdeepManagerとshallowManagerで共通です。
トリガ: [NEXT] を、そして続いて [MODE]を発行します。
以下の内容は、シミュレーションサブウィンドウに表示されるログの例です。
Trigger [NEXT]
01 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02_Off EXIT
02 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02 EXIT
03 shallowManager[ShallowTurbineManager].Turbine_02__TO__History3_105713_61725 Effect
04 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03 ENTRY
05 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03 DO
06 shallowManager[ShallowTurbineManager].Initial_105706__TO__Off_61718 Effect
07 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_Off ENTRY
08 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_Off DO
Trigger [MODE]
(以下省略)
注意: |
deepManagerクラスの場合も、上記のログは同じになりますので割愛します。 |
これらの内容からわかること:
そして、以下の状態がアクティブになります。
ここまでの動作もdeepManagerとshallowManagerで共通です。
内部に保持されている履歴情報
ここまでのシミュレーション動作の結果、内部に保持されている履歴は次の状態となります。
Turbine_01
Turbine_02
Turbine_03
ここで、トリガ NEXT を発行すると、再度状態Turbine_01がアクティブになります。
以下の内容は、シミュレーションサブウィンドウに表示されるログの例です。
shallowManager:の場合:
Trigger [NEXT]
01 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_On_Low EXIT
02 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_On EXIT
03 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03 EXIT
04 shallowManager[ShallowTurbineManager].Turbine_03__TO__History1_105711_61732 Effect
05 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01 ENTRY
06 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01 DO
07 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01_On ENTRY
08 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01_On DO
09 shallowManager[ShallowTurbineManager].Initial_105721__TO__Low_61729 Effect
10 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01_On_Low ENTRY
11 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01_On_Low DO
これらの内容からわかること:
deepManagerの場合:
Trigger [NEXT]
01 deepManager[DeepTurbineManager].StateMachine_Turbine_03_On_Low EXIT
02 deepManager[DeepTurbineManager].StateMachine_Turbine_03_On EXIT
03 deepManager[DeepTurbineManager].StateMachine_Turbine_03 EXIT
04 deepManager[DeepTurbineManager].Turbine_03__TO__History1_105679_61708 Effect
05 deepManager[DeepTurbineManager].StateMachine_Turbine_01 ENTRY
06 deepManager[DeepTurbineManager].StateMachine_Turbine_01 DO
07 deepManager[DeepTurbineManager].StateMachine_Turbine_01_On ENTRY
08 deepManager[DeepTurbineManager].StateMachine_Turbine_01_On_High ENTRY
これらの内容からわかること:
トリガ [NEXT] を発行し、状態Turbine_01を抜けて状態Turbine_02に遷移
shallowManager と deepManager のどちらの場合も、Turbine_02.Offがアクティブになります。
トリガ [NEXT] を発行し、状態Turbine_02を抜けて状態Turbine_03に遷移
shallowManager と deepManager のどちらの場合も状態Turbine_03.On.Lowがアクティブになります。しかし、その動作は異なります。
shallowManagerの場合には状態Turbine_03.Onがアクティブになり、その初期状態に遷移し、状態Turbine_03.On.Lowに到達します。
01 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02_Off EXIT
02 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02 EXIT
03 shallowManager[ShallowTurbineManager].Turbine_02__TO__History3_105713_61725 Effect
04 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03 ENTRY
05 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03 DO
06 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_On ENTRY
07 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_On DO
08 shallowManager[ShallowTurbineManager].Initial_105727__TO__Low_61728 Effect
09 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_On_Low ENTRY
10 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_On_Low DO
deepManagerの場合は、履歴の情報より直接状態Turbine_03.On.Lowがアクティブになります。
01 deepManager[DeepTurbineManager].StateMachine_Turbine_02_Off EXIT
02 deepManager[DeepTurbineManager].StateMachine_Turbine_02 EXIT
03 deepManager[DeepTurbineManager].Turbine_02__TO__History3_105680_61701 Effect
04 deepManager[DeepTurbineManager].StateMachine_Turbine_03 ENTRY
05 deepManager[DeepTurbineManager].StateMachine_Turbine_03 DO
06 deepManager[DeepTurbineManager].StateMachine_Turbine_03_On ENTRY
07 deepManager[DeepTurbineManager].StateMachine_Turbine_03_On_Low ENTRY