状态机的层次结构
使用具有嵌套状态的状态机(MS)在模型中创建层次结构。:
-
父状态是包含一个或多个称为子状态的子状态的状态。 当父状态被激活时,将发生子状态的默认转换。 此外,儿童状态按照通常的程序工作。 逻辑直到父状态不再活动;
-
*子状态*是父状态内部的状态。
状态可以相互嵌套,但它们不应重叠。 重叠时,发出错误(感叹号),指出状态不能相互叠加。:
所有嵌套状态都受以下规则约束:
-
每个嵌套级别都可能有一个默认过渡,但这不是先决条件。 如果状态是唯一的,那么可能没有默认转换。 对于顶层状态和嵌套状态都是如此。
-
国家对嵌套的深度没有限制。 当进入*Engee*状态时,它会自动检测嵌套的存在:
-
有嵌套状态—执行到子状态的默认转换。 接下来,只要父状态处于活动状态,状态机的逻辑就会应用于子状态。
-
没有嵌套状态—应用状态机的逻辑。
-
平行状态
*并行状态*是一组 国家 状态机可以在机器的一个时钟周期内同步激活、保持活动或停用,而无需通过父子关系链接。
然而,为了理解这样的状态如何并行工作(没有父子关系),但是在单个自动机的框架内,重要的是要考虑分解的概念。 状态分解允许您指定用于激活、执行和停用其子状态的策略。:
-
Exclusive(OR)默认使用,由状态边界实线表示。 在此模式下,一次(时钟周期)只能激活一个子状态。 例如:
这里,激活状态*A*后,其子状态*B*自动变为活动状态。 与此同时,C*状态保持非活动状态。 如果计算机从*B*切换到*C,则*B*被停用,并且*C*变为活动状态。 这种机制便于对相互排斥的操作模式进行建模,例如,"开"/"关"或"加热"/"冷却"。
-
Parallel(AND)-由子状态的虚线边框表示,允许您在机器的一个时钟周期内激活所有嵌套状态。 在这种情况下,状态按编号顺序依次执行操作。 例如:
当状态*A*被激活时,其子状态*B*和*C*也在机器的一个时钟周期内变为活动状态,按编号顺序依次执行它们的动作(*B*第一,*C*第二)。 它们彼此独立工作,这便于模拟并行过程,例如,当系统的一部分控制温度而另一部分控制压力时。 这种方法不需要默认转换到子状态,因为系统会按照编号顺序激活并行状态。
什么时候应该使用*并行状态*? 他们是有用的,如果:
-
有限状态机模型必须同时运行几个独立的进程。;
-
我们需要通过将模型分解为单独的逻辑部分来简化模型的结构。
要更改分解类型,请右键单击状态并选择: 分解→并行/独占:
分解水平
如果并行和独占子状态都在相同状态下使用,那么它们形成不同级别的分解。 考虑一个例子:
-
在启动时,状态机切换到*A*状态,该状态具有并行分解。 这意味着它的子状态*B*和*C*也被激活。
-
但是,C*状态本身是*C1*和*C2*状态的父级,并形成新的分解级别。 在这个级别上,*C*状态已经有一个排他性(或)分解,因此在任何给定时间,只有它的一个子状态(*C1*或*C2)可以处于活动状态。
-
子状态*C1*和*C2*反过来再次使用并行分解,因此它们的嵌套状态同时处于活动状态或非活动状态(直至时钟周期)。
这样的电平交替可以根据需要重复多次,只要它对应于有限状态机的逻辑。
同一级别的所有子状态必须对应于父状态的分解。 分解级别由在相同分层级别上的父子关系的单次迭代确定。 |