前页 | 后页 |
示例:历史伪状态
状态历史是一个与复合状态区域相关联的方便概念,其中区域跟踪状态上次退出时所处的配置。如有必要,当区域下一个变为活动状态时(例如,从处理中断返回后),或者如果存在本地转移
,这允许轻松返回到该状态配置转移
回到它的历史。
Enterprise Architect支持两种类型的历史伪状态:
- Deep History - 代表最近访问包含区域的完整状态配置;效果和转移
一样转移
终止于状态Pseudostate 相反,终止于保留状态配置的最内层状态,包括执行沿途遇到的所有入口行为 - 浅历史 - 表示仅返回最近状态配置的最顶层子状态,使用默认输入规则输入
两个状态机都有三个复合状态: Turbine_01 、 Turbine_02和Turbine_03 ,每个状态机在其区域中都有Off和On状态以及 History Pseudostate。
为了更好地观察 Deep History 和 Shallow History 的区别,我们在一次模拟中执行了两个状态机。
DeepTurbineManager中的状态机如下图所示:
ShallowTurbineManager中的状态机如下图所示:
提示:如果您右键单击图表上的历史节点并选择'高级|深度历史选项,您可以在浅层和深层之间切换历史伪状态的类型。
第一时间激活状态
仿真开始后, Turbine_01及其子状态Off被激活。
触发器:[MODE,序列]
那么活动状态配置包括:
- 涡轮_01
- Turbine_01.On
- Turbine_01.On.High
触发器:[序列]
从仿真窗口(仿真>动态仿真仿真>模拟器>打开仿真窗口)可以观察到这条序列:
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 完全一样,所以deepManager的trace是从这个序列中过滤掉的。
我们可以了解到:
- 退出复合状态从活动状态配置中的最状态开始(参见跟踪序列中的第 01 - 03 行)
- 默认历史转移
仅当执行导致历史节点(参见第 04 行)并且该状态之前从未处于活动状态(参见第 07 行)时才会执行
那么活动状态配置包括:
- 涡轮_02
- Turbine_02.Off
触发器:[序列,MODE]
从仿真窗口可以观察到这个序列:
触发器[下一个]
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 完全一样,所以deepManager的trace是从这个序列中过滤掉的。
我们可以了解到:
- 由于没有默认历史转移
为History3定义,执行状态的标准默认输入;在区域所包含的区域中发现了一个 Initial 节点,因此转移
源自Initial已启用(参见第 06 行)
那么活动状态配置包括:
- 涡轮_03
- Turbine_03.On
- Turbine_03.On.Low
国家的历史条目
作为参考,我们展示了每个涡轮机在第一次激活后的深度历史快照:
涡轮_01
- Turbine_01.On
- Turbine_01.On.High
- Turbine_02.Off
- Turbine_03.On
- Turbine_03.On.Low
当我们进一步简单地 NEXT 时,触发器将再次被激活。
从仿真窗口可以观察到这个序列:
对于浅层管理器:
触发器[下一个]
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
shallowManager和deepManager都激活了 Turbine_02.Off,这是它们退出时的 History 快照。
触发器[NEXT]退出Turbine_02并激活Turbine_03
shallowManager和deepManager都激活 Turbine_03.On.Low。但是, shallowManager和deepManager的顺序是不同的。
对于shallowManager , shallowHistory只能恢复到 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
对于deepManager , deephistory可以直接恢复到 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