主要内容

方法检查状态活动操作符

在状态流中®图具有并行状态分解,子状态可以同时活动。为了协调不同并行状态的行为,一个状态可以检查另一个状态的子状态活动并相应地做出反应。例如,一个状态可以保持它的子状态与另一个状态的子状态同步。

操作符

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

在(state_name

例如,在这个图表中,风扇而且加热器是平行(和)状态。每个状态都有一对子状态,而且.每一秒,状态的活跃子状态风扇之间的交替风扇。从而且风扇。在.在州内加热器,转换上的条件检查子状态活动风扇保持状态同步。活性亚态的变化风扇中活动子状态的相应变化加热器

带有风扇和加热器两种超状态的状态流图。每个超状态有两个子状态,称为开和关。

国家活动的决议

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

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

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

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

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

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

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

检查状态活动的最佳实践

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

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

  • 给各个州起唯一的名字。

  • 使用状态和框作为框来限制路径分辨率搜索的范围。

国家活动决议的例子

搜索查找子状态的本地副本

这个图表包含了两个平行的状态,一个而且B.每个状态都有一对子状态,A1而且A2A1有亚态X而且Y,而A2有亚态P而且.在A.A2而在B.A2,条件(A1.Y)防止从P

每个状态都有两个平行的子状态,分别称为A1和A2。A1有两个排他态X和y A2有两个排他态P和Q。

该图表将每个限定状态名解析为子状态的本地副本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

包含A、B、P、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

A有四个嵌套的子状态,分别是B、P、Q和R。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

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在一个盒子或另一个状态。添加框可以防止搜索过程检测顶级状态中的子状态。

    图中有一个叫做a的超状态和一个叫做Enclosure的方框。A有四个嵌套的子状态,分别是B、P、Q和R。Enclosure有三个嵌套的子状态,分别是P、Q和R。

另请参阅

|

相关的话题

Baidu
map