预订演示
前页 后页

示例:历史伪状态

状态历史是一个与复合状态区域相关联的方便概念,其中区域跟踪状态上次退出时所处的配置。如有必要,当区域下一个变为活动状态时(例如,从处理中断返回后),或者如果存在本地转移

,这允许轻松返回到该状态配置转移

回到它的历史。

Enterprise Architect支持两种类型的历史伪状态:

  • Deep History - 代表最近访问包含区域的完整状态配置;效果和转移
    一样转移
    终止于状态Pseudostate 相反,终止于保留状态配置的最内层状态,包括执行沿途遇到的所有入口行为
  • 浅历史 - 表示仅返回最近状态配置的最顶层子状态,使用默认输入规则输入
在此示例中, DeepTurbineManagerShallowTurbineManager类完全相同,只是第一个包含的状态机具有 deepHistory Pseudostate,而第二个包含的状态机具有 shallowHistory Pseudostate。

两个状态机都有三个复合状态: Turbine_01Turbine_02Turbine_03 ,每个状态机在其区域中都有OffOn状态以及 History Pseudostate。

为了更好地观察 Deep History 和 Shallow History 的区别,我们在一次模拟中执行了两个状态机。

DeepHistory and ShallowHistory Pseudostates in Sparx Systems Enterprise Architect

DeepTurbineManager中的状态机如下图所示:

DeepHistory Pseudostate Simulation StateMachine in Sparx Systems Enterprise Architect

ShallowTurbineManager中的状态机如下图所示:

ShallowHistory Pseudostate Simulation StateMachine, Sparx Systems Enterprise Architect

提示:如果您右键单击图表上的历史节点并选择'高级|深度历史选项,您可以在浅层和深层之间切换历史伪状态的类型。

第一时间激活状态

仿真开始后, Turbine_01及其子状态Off被激活。

触发器:[MODE,序列]

Shallow and Deep History pseudostates example in executable statemachines

那么活动状态配置包括:

  • 涡轮_01
  • Turbine_01.On
  • Turbine_01.On.High
这适用于deepManagershallowManager。

触发器:[序列]

Shallow and Deep History pseudostates example in executable statemachines

从仿真窗口(仿真>动态仿真仿真>模拟器>打开仿真窗口)可以观察到这条序列:

01 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01_On_High 退出

02 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01_On EXIT

03 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01 退出

04 shallowManager[ShallowTurbineManager].Turbine_01__TO__History2_105720_61730影响

05 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02 ENTRY

06 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02 DO

       07 shallowManager[ShallowTurbineManager].History2_105720__TO__Off_61731影响

08 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02_Off ENTRY

09 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02_Off DO

注记:由于deepManager和 shallowManager 的 trace 完全一样,所以deepManagertrace是从这个序列中过滤掉的。

我们可以了解到:

  • 退出复合状态从活动状态配置中的最状态开始(参见跟踪序列中的第 01 - 03 行)
  • 默认历史转移
    仅当执行导致历史节点(参见第 04 行)并且该状态之前从未处于活动状态(参见第 07 行)时才会执行

那么活动状态配置包括:

  • 涡轮_02
  • Turbine_02.Off
这适用于deepManagershallowManager。

触发器:[序列,MODE]

Shallow and Deep History pseudostates example in executable statemachines

从仿真窗口可以观察到这个序列:

触发器[下一个]

01 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02_Off 退出

02 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02 退出

03 shallowManager[ShallowTurbineManager].Turbine_02__TO__History3_105713_61725影响

04 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03 ENTRY

05 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03 DO

         06 shallowManager[ShallowTurbineManager].Initial_105706__TO__Off_61718影响

07 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_Off ENTRY

08 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_Off DO

触发器[模式]

信息省略...

注记:由于deepManager和 shallowManager 的 trace 完全一样,所以deepManagertrace是从这个序列中过滤掉的。

我们可以了解到:

  • 由于没有默认历史转移
    History3定义,执行状态的标准默认输入;在区域所包含的区域中发现了一个 Initial 节点因此转移
    源自Initial已启用(参见第 06 行)

那么活动状态配置包括:

  • 涡轮_03
  • Turbine_03.On
  • Turbine_03.On.Low
这适用于deepManagershallowManager。

国家的历史条目

作为参考,我们展示了每个涡轮机在第一次激活后的深度历史快照:

涡轮_01

  • Turbine_01.On
  • Turbine_01.On.High
涡轮_02
  • Turbine_02.Off
涡轮_03
  • Turbine_03.On
  • Turbine_03.On.Low

当我们进一步简单地 NEXT 时,触发器将再次被激活。

Shallow and Deep History pseudostates example in executable statemachines

从仿真窗口可以观察到这个序列:

对于浅层管理器:

触发器[下一个]

01 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_On_Low 退出

02 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_On EXIT

03 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03 退出

04 shallowManager[ShallowTurbineManager].Turbine_03__TO__History1_105711_61732影响

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影响

10 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01_On_Low ENTRY

11 shallowManager[ShallowTurbineManager].StateMachine_Turbine_01_On_Low DO

我们可以了解到:

  • shallowHistory 节点将 Turbine_01 恢复到 Turbine_01.On
  • 那么复合状态区域所包含的区域将被Initial节点激活,在Low激活

对于 deepManager:

触发器[下一个]

01 deepManager[DeepTurbineManager].StateMachine_Turbine_03_On_Low 退出

02 deepManager[DeepTurbineManager].StateMachine_Turbine_03_On EXIT

03 deepManager[DeepTurbineManager].StateMachine_Turbine_03 退出

04 deepManager[DeepTurbineManager].Turbine_03__TO__History1_105679_61708影响

05 deepManager[DeepTurbineManager].StateMachine_Turbine_01 条目

06 deepManager[DeepTurbineManager].StateMachine_Turbine_01 DO

        07 deepManager[DeepTurbineManager].StateMachine_Turbine_01_On ENTRY

08 deepManager[DeepTurbineManager].StateMachine_Turbine_01_On_High ENTRY

我们可以了解到:

  • deepHistory节点将 Turbine_01 恢复到 Turbine_01.On.High

触发器[NEXT] 退出 Turbine_01 并激活 Turbine_02

shallowManagerdeepManager都激活了 Turbine_02.Off,这是它们退出时的 History 快照。

触发器[NEXT]退出Turbine_02并激活Turbine_03

shallowManagerdeepManager都激活 Turbine_03.On.Low。但是, shallowManagerdeepManager的顺序是不同的。

对于shallowManagershallowHistory只能恢复到 Turbine_03.On。由于在 Turbine_03.On 中定义了Initial节点,因此转移

源自Initial的将被启用并达到 Turbine_03.On.Low。

01 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02_Off 退出

02 shallowManager[ShallowTurbineManager].StateMachine_Turbine_02 退出

03 shallowManager[ShallowTurbineManager].Turbine_02__TO__History3_105713_61725影响

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影响

09 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_On_Low ENTRY

10 shallowManager[ShallowTurbineManager].StateMachine_Turbine_03_On_Low DO

对于deepManagerdeephistory可以直接恢复到 Turbine_03.On.Low。

01 deepManager[DeepTurbineManager].StateMachine_Turbine_02_Off 退出

02 deepManager[DeepTurbineManager].StateMachine_Turbine_02 退出

03 deepManager[DeepTurbineManager].Turbine_02__TO__History3_105680_61701影响

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