主要内容

的检查状态活动操作符

在一个Stateflow®使用并行状态分解的图表,子状态可以同时处于活动状态。为了协调不同并行状态的行为,一个状态可以检查另一个状态的子状态活动并做出相应的反应。例如,一个状态可以使其子状态与另一个状态的子状态保持同步。

操作符

要检查某个状态在给定的时间步骤中是否处于活动状态,请调用处于状态的运算符和转换操作。这个操作符接受一个限定的状态名state_name并返回布尔值输出。如果状态state_name是活跃的,返回值1 (真的).否则,返回值0 ().

在(state_name

例如,在这个图表中,风扇加热器是平行(和)状态。每个状态都有一对子状态,.每次图表醒来时,激活子状态风扇之间的交替扇开风扇。在.在国家加热器,转换上的条件检查中的子状态活动风扇并保持状态同步。中有源基态的变化风扇导致中活动子状态的相应更改加热器

解决国家活动

检查状态活动是一个分为两部分的过程。首先,状态流图通过对图表层次结构执行本地化搜索以查找匹配的状态来解析限定的状态名。然后,图表确定匹配状态是否为活动状态。

搜索从层次结构级别开始,其中使用限定状态名调用运算符:

  • 对于状态操作,起点是包含该操作的状态。

  • 对于转换标签,起始点是转换源的父级。

解析过程搜索图表层次结构的每一层,以寻找到达状态的路径。如果某个状态与路径匹配,则流程将该状态添加到可能匹配的列表中。然后,该过程继续在层次结构的更高一级进行搜索。解析过程在搜索层次结构的图表级别后停止。如果存在唯一的匹配,则图表检查匹配状态是否为活动状态。否则,解析进程将失败。模拟以错误停止。

这个流程图说明了检查状态活动的过程中的不同阶段。

检查状态活动的最佳实践

要解析状态活动,状态流图不会对所有状态执行彻底搜索,并且在找到第一个匹配项后也不会停止。为了提高找到唯一搜索结果的机会:

  • 在限定数据名称中使用特定路径。

  • 给州指定唯一的名称。

  • 将状态和框用作附件以限制路径解析搜索的范围。

状态活动解析的示例

Search查找子状态的本地副本

此图表包含两个平行状态,一个B.每个状态都有一对子状态,A1A2A1有亚态XY,而A2有亚态P.在A.A2而且B.A2,条件in(A1.Y)保护从P

图表将每个限定状态名称解析为子状态的本地副本Y

  • 在国家一个,条件in(A1.Y)检查状态的活动A.A1.Y

  • 在国家B,条件in(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,使用更具体的限定州名:

  • 在国家一个,使用表达式in(B.A1.Y)

  • 在国家B,使用表达式in(A.A1.Y)

搜索没有产生匹配

在这个图表中动作的状态A.B包含表达式(Q.R).statflow无法解析限定状态名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, statflow不能检测子状态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).statflow无法解析限定状态名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在一个盒子或另一个状态中。添加附件可防止搜索进程检测顶级状态中的子状态。

另请参阅

|

相关话题