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