通过使用检查国家活动在
操作符
在一个Stateflow®图表与平行状态分解,亚态可以活跃在同一时间。协调不同的平行状态的行为,一个州可以检查另一个州的亚态活动并做出相应的反应。例如,一个状态可以保持其亚态与其他州的亚态同步。
的在
操作符
检查状态是否活跃在一个给定的时间步,调用在
运营商状态和转换操作。的在
运营商需要一个合格的国家名字state_name
并返回一个布尔值输出。如果状态state_name
是活跃的,在
返回一个值为1 (真正的
)。否则,在
返回的值为0 (假
)。
在(state_name)
例如,在这个图表,风扇
和加热器
是平行的(和)状态。每个州都有一双亚态,在
和从
。每一秒,的活性亚态状态风扇
之间的交替Fan.Off
和Fan.On
。在国家加热器
,检查亚态的转换活动的情况而定风扇
并保持同步。活性亚态的改变风扇
导致相应的活性亚态的变化加热器
。
解决国家活动
检查状态的活动是一个两部分的过程。首先,Stateflow图表解析合格状态名称通过执行本地化搜索图层次结构的匹配状态。然后,图表决定是否活跃的匹配状态。
搜索开始的层次水平在
运营商与合格状态的名字叫做:
政府行动,出发点是包含动作的状态。
过渡,过渡的出发点是父源。
该决议过程搜索图层次结构的每一层路径状态。如果状态匹配路径,流程补充说,国家的列表可能的匹配。然后,这个过程仍在继续寻找更高一层的层次结构。解决程序停止后,搜索图表层次。如果存在一个独特的比赛,图表检查匹配是否活跃状态。否则,该决议过程失败。仿真停止错误。
这个流程图说明了在这一过程中不同阶段检查状态的活动。
检查状态的最佳实践活动
解决国家活动,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)
。Stateflow不能解决合格状态的名字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
,Stateflow不能检测到亚态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)
。Stateflow不能解决合格状态的名字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
在一个盒子里或另一个状态。添加一个外壳防止搜索过程中检测亚态顶级状态。