Engee 文档

状态机的层次结构

使用具有嵌套状态的状态机(MS)在模型中创建层次结构。:

  • 父状态是包含一个或多个称为子状态的子状态的状态。 当父状态被激活时,将发生子状态的默认转换。 此外,儿童状态按照通常的程序工作。 逻辑直到父状态不再活动;

  • *子状态*是父状态内部的状态。

embedded state 1 1 cn

状态可以相互嵌套,但它们不应重叠。 重叠时,发出错误(感叹号),指出状态不能相互叠加。:

chart error 1 cn

所有嵌套状态都受以下规则约束:

  • 每个嵌套级别都可能有一个默认过渡,但这不是先决条件。 如果状态是唯一的,那么可能没有默认转换。 对于顶层状态和嵌套状态都是如此。

  • 国家对嵌套的深度没有限制。 当进入*Engee*状态时,它会自动检测嵌套的存在:

    • 有嵌套状态—执行到子状态的默认转换。 接下来,只要父状态处于活动状态,状态机的逻辑就会应用于子状态。

    • 没有嵌套状态—应用状态机的逻辑。

平行状态

*并行状态*是一组 国家 stateflow state 状态机可以在机器的一个时钟周期内同步激活、保持活动或停用,而无需通过父子关系链接。

然而,为了理解这样的状态如何并行工作(没有父子关系),但是在单个自动机的框架内,重要的是要考虑分解的概念。 状态分解允许您指定用于激活、执行和停用其子状态的策略。:

  • Exclusive(OR)默认使用,由状态边界实线表示。 在此模式下,一次(时钟周期)只能激活一个子状态。 例如:

    parallel state 2

    这里,激活状态*A*后,其子状态*B*自动变为活动状态。 与此同时,C*状态保持非活动状态。 如果计算机从*B*切换到*C,则*B*被停用,并且*C*变为活动状态。 这种机制便于对相互排斥的操作模式进行建模,例如,"开"/"关"或"加热"/"冷却"。


  • Parallel(AND)-由子状态的虚线边框表示,允许您在机器的一个时钟周期内激活所有嵌套状态。 在这种情况下,状态按编号顺序依次执行操作。 例如:

    parallel state 3

    当状态*A*被激活时,其子状态*B*和*C*也在机器的一个时钟周期内变为活动状态,按编号顺序依次执行它们的动作(*B*第一,*C*第二)。 它们彼此独立工作,这便于模拟并行过程,例如,当系统的一部分控制温度而另一部分控制压力时。 这种方法不需要默认转换到子状态,因为系统会按照编号顺序激活并行状态。


什么时候应该使用*并行状态*? 他们是有用的,如果:

  • 有限状态机模型必须同时运行几个独立的进程。;

  • 我们需要通过将模型分解为单独的逻辑部分来简化模型的结构。

要更改分解类型,请右键单击状态并选择: 分解→并行/独占:

parallel states 1 cn

分解水平

如果并行和独占子状态都在相同状态下使用,那么它们形成不同级别的分解。 考虑一个例子:

decomposition levels 1

  1. 在启动时,状态机切换到*A*状态,该状态具有并行分解。 这意味着它的子状态*B*和*C*也被激活。

  2. 但是,C*状态本身是*C1*和*C2*状态的父级,并形成新的分解级别。 在这个级别上,*C*状态已经有一个排他性(或)分解,因此在任何给定时间,只有它的一个子状态(*C1*或*C2)可以处于活动状态。

  3. 子状态*C1*和*C2*反过来再次使用并行分解,因此它们的嵌套状态同时处于活动状态或非活动状态(直至时钟周期)。

这样的电平交替可以根据需要重复多次,只要它对应于有限状态机的逻辑。

同一级别的所有子状态必须对应于父状态的分解。 分解级别由在相同分层级别上的父子关系的单次迭代确定。

平行状态的编号

状态机中的每个并行状态接收确定其执行顺序的优先级编号。 数字越小,条件越早完成。 优先级编号显示在每个并行状态的右上角。:

parallel state num

如果模型是从头开始创建的,或者其中还没有并行状态,系统会自动按添加顺序分配优先级编号。 编号从父状态内的第一个可用编号开始。

来改变并行状态的执行顺序:

  1. 右键单击并行状态。

  2. 点击"执行顺序"并选择一个新的优先级编号。

parallel state num 1 cn

限制

虽然并行状态非常有用,但它们有几个限制。:

  • 没有传入和传出转换-您不能直接创建从并行状态或进入并行状态的转换;

  • 没有默认过渡或超级过渡默认转换在并行状态中不使用。 您也可以不创建super-transitionsfootnote:[*Super-transition*是跨越块状态边界的过渡。 例如,它可以连接彼此不相关的不同父状态的嵌套状态。].

  • 禁止内存节点内存节点 stateflow history junction (history junction)不能直接放置在具有并行分解(AND)的状态内。 这是因为它们独立工作,并且将它们恢复到以前的状态需要为它们中的每一个单独的机制。

有用的连结