状态机层次结构
使用具有嵌套状态的状态机(SM)在模型中创建层次结构:
-
父状态*是包含一个或多个子状态(称为子状态)的状态。当父状态被激活时,子状态会发生默认转换。然后,子状态按照通常的逻辑 运行,直到父状态不再激活为止;
-
子状态*是位于父状态内部的状态。
状态可以相互嵌套,但不能重叠。如果重叠,就会产生错误(红色感叹号),说明状态不能重叠:
所有嵌套状态都遵守以下规则:
-
每个嵌套层级都可能有一个默认转换,但这不是强制性条件。如果状态是单一的,则可能没有默认转换。顶层状态和嵌套状态都是如此。
-
状态没有嵌套深度限制。进入一个状态时,Engee 会自动检测它是否嵌套:
-
有嵌套状态—默认为子状态。然后,只要父状态处于活动状态,状态机逻辑就会应用于子状态。
-
无嵌套状态—应用状态机逻辑。
-
并行状态
*并行状态*是有限自动机的一组状态 ,它们之间没有父子兄弟关系,可以在自动机的一个时钟周期内同步激活、保持激活或停用。
然而,为了理解这些状态如何在单个自动机中并行运行(没有父系-同胞关系),必须考虑分解的概念。对一个状态进行分解后,我们就可以指定激活、执行和停用其子状态的策略:
-
排除(OR)--默认情况下使用,用状态边界实线表示。在这种模式下,同一时刻(自动机时钟)只能有一个子状态处于激活状态。例如
在这里,状态 A 激活后,其子状态 B 自动变为激活状态。与此同时,C 状态仍处于非激活状态。如果自动机从 B 切换到 C,则 B 被停用,C 进入激活状态。这种机制便于模拟相互排斥的运行模式,例如 "开"/"关 "或 "加热"/"冷却"。
-
Parallel (AND) (并联)-- 用虚线表示子状态,允许在一个自动机周期内激活所有嵌套状态。在这种情况下,各状态按编号顺序依次执行动作。例如
当状态 A 被激活时,其子状态 B 和 C 也会在一个自动机周期内被激活,并按照编号顺序(B 第一,C 第二)依次执行动作。它们各自独立运行,便于模拟并行过程,例如系统的一部分控制温度,另一部分控制压力。这种方法不需要默认过渡到子状态,因为系统会按照编号顺序激活并行状态。
什么情况下应使用*平行状态*?在以下情况下可以使用并行状态
-
有限自动机模型需要同时执行多个独立进程;
-
需要将模型结构简化为独立的逻辑部分。
要更改分解类型,请右键单击状态并选择 分解 → 并行/排除:
分解程度
如果在同一状态下同时使用并发子状态和排他子状态,它们会形成不同的分解级别。举个例子
-
在启动时,有限自动机进入具有并行分解的状态 A。这意味着其子状态 B 和 C 也被激活。
-
然而,状态 C 本身是状态 C1 和 C2 的父级,并形成了一个新的分解层。在这个层次上,状态 C 已经具有排他性(OR)分解,因此在任何给定时间内,其子状态(C1 或 C2)中只能有一个处于激活状态。
-
子状态 C1 和 C2 反过来再次使用并行分解,因此它们的嵌套状态在同一时间处于活动或非活动状态(自动机时钟的精度)。
只要符合有限自动机的逻辑,这种层级交替可以重复多次。
同一层级的所有子级状态必须与父级状态的分解相对应。分解层由 "父态-子态 "连接在一个层次上的一次迭代定义。 |