履歴

<< 目次を表示 >>

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

履歴

履歴疑似状態は状態内の領域に配置されている子状態について、親状態を抜ける際の最後の子状態の情報を保持し、次に親状態に遷移したときに同じ子状態から再開する動作履歴を表現する便利な要素です。親状態から他の状態に遷移して戻る場合のほか、自己遷移の場合にも有効です。

 

履歴には次の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