在里面
操作人员在状态流中®图具有并行状态分解,子状态可以同时活跃。为了协调不同并行状态的行为,一个状态可以检查另一个状态的子状态活动并相应地做出反应。例如,一个状态可以使它的子状态与另一个状态的子状态保持同步。
在里面
操作人员要检查某个状态在给定的时间步长内是否处于活动状态,请调用在里面
操作符的状态和转换操作。这个在里面
运算符采用限定的状态名州名
并返回一个布尔输出。如果状态州名
是活跃的,,在里面
返回值1(真正的
).否则,在里面
返回值0(错误的
).
在(州名)
例如,在这个图表中,迷
和加热器
是并行(AND)状态。每个州都有一对子州,在
和从
。每次图表唤醒时,状态的活动子状态迷
交替风扇。从
和风扇,打开
.在州里加热器
,转换的条件检查子状态活动迷
并保持状态同步。中活动子状态的更改迷
使中的有源状态发生相应的变化加热器
.
检查状态活动是一个由两部分组成的过程。首先,状态流程图通过在图表层次结构中执行匹配状态的本地化搜索来解析限定状态名称。然后,图表确定匹配状态是否处于活动状态。
搜索从层次结构级别开始,其中在里面
使用限定状态名调用操作符:
对于状态操作,起点是包含该操作的状态。
对于转换标签,起点是转换源的父级。
解析过程在图表层次结构的每一层中搜索状态的路径。如果某个状态与路径匹配,则进程会将该状态添加到可能匹配的列表中。然后,该过程将在层次结构中的更高级别继续搜索。解析过程在搜索层次结构的图表级别后停止。如果存在唯一匹配,图表将检查匹配状态是否处于活动状态。否则,解决过程将失败。模拟因错误而停止。
此流程图说明了检查状态活动过程中的不同阶段。
要解决状态活动,状态流程图不会对所有状态执行穷举搜索,也不会在找到第一个匹配项后停止。要提高找到唯一搜索结果的机会,请执行以下操作:
在限定数据名中使用特定路径。
给各州起唯一的名字。
使用状态和框作为框来限制路径解析搜索的范围。
这个图表包含了两个平行的状态,A.
和B
.每个州都有一对子州,A1
和A2
.A1
有子状态X
和Y
虽然A2
有子状态P
和Q
在里面A.A2
而在B.A2
,情况(A1.Y)
从P
到Q
.
图表将每个限定状态名称解析为子状态的本地副本Y
:
在州里A.
,情况(A1.Y)
检查状态的活动A.A1.Y
.
在州里B
,情况(A1.Y)
检查状态的活动B.A1.Y
.
例如,此表列出了状态转换条件解析过程中的不同阶段A.
.
阶段 | 描述 | 结果 |
---|---|---|
1. | 从州开始A.A2 ,图表将搜索状态A.A2.A1.Y . |
没有发现匹配。 |
2. | 向上移动到层次结构的下一层(状态A. ),图表将搜索状态A.A1.Y |
找到匹配项。 |
3. | 向上移动到层次结构的下一个级别(图表级别),图表将搜索状态A1。Y |
没有发现匹配。 |
搜索以找到一个匹配项结束。因为解析算法本地化了搜索的范围,所以在里面
操作员保护过渡A.A2
只检测状态A.A1.Y
.这个在里面
操作员保护过渡B.A2
只检测状态B.A1.Y
.
要检查另一个副本的状态活动,请执行以下操作:Y
,使用更具体的限定状态名称:
处于状态A.
,使用这个表达(B.A1.Y)
.
处于状态B
,使用这个表达(A.A1.Y)
.
在这个图表中在期间
国家行动A.B
包含表达式in(Q.R)
.Stateflow无法解析限定的状态名称Q.R
.
此表列出了解决过程中的不同阶段。
阶段 | 描述 | 结果 |
---|---|---|
1. | 从州开始A.B ,图表将搜索状态A.B.Q.R . |
没有发现匹配。 |
2. | 向上移动到层次结构的下一层(状态A. ),图表将搜索状态A.Q.R . |
没有发现匹配。 |
3. | 向上移动到层次结构的下一个级别(图表级别),图表将搜索状态Q.R . |
没有发现匹配。 |
搜索在图表级别结束,找不到与的匹配项Q.R
,导致错误。
要避免此错误,请使用更具体的限定状态名。例如,通过使用表达式检查状态活动in(P.Q.R)
.
在这个图表中在期间
国家行动A.B
包含表达式in(Q.R)
。解析限定状态名称时Q.R
,Stateflow无法检测子状态A.B.P.Q.R
.
此表列出了解决过程中的不同阶段。
阶段 | 描述 | 结果 |
---|---|---|
1. | 从州开始A.B ,图表将搜索状态A.B.Q.R . |
没有发现匹配 |
2. | 向上移动到层次结构的下一层(状态A. ),图表将搜索状态A.Q.R . |
没有发现匹配。 |
3. | 向上移动到层次结构的下一个级别(图表级别),图表将搜索状态Q.R . |
找到匹配项。 |
搜索以找到一个匹配项结束在里面
运算符仅检测子状态R
顶级国家Q
.
检查。的状态活动A.B.P.Q.R
,则使用更具体的限定州名。例如,使用这个表达式in(P.Q.R)
.
在这个图表中在期间
国家行动A.B
包含表达式in(P.Q.R)
.Stateflow无法解析限定的状态名称P.Q.R
.
此表列出了解决过程中的不同阶段。
阶段 | 描述 | 结果 |
---|---|---|
1. | 从州开始A.B ,搜索状态A.B.P.Q.R . |
找到匹配项 |
2. | 向上移动到层次结构的下一层(状态A. ),图表将搜索状态A.P.Q.R . |
没有发现匹配。 |
3. | 向上移动到层次结构的下一个级别(图表级别),图表将搜索状态P.Q.R . |
找到匹配项。 |
搜索在图表级别结束,并找到两个匹配项P.Q.R
,导致错误。
要避免此错误,请执行以下操作:
使用更具体的限定状态名称。例如,检查内部的子状态活动B
,使用这个表达in(B.P.Q.R)
.
重命名一个匹配的状态。
封闭顶层状态P
处于盒子或其他状态。添加框将阻止搜索过程检测顶级状态中的子状态。