使用圆点表示法标识数据
要指定从父状态到数据对象的路径,限定数据名称使用圆点表示法。圆点表示法是标识 Stateflow® 图层次结构中特定级别数据的一种方法。限定数据名称的第一部分标识父对象。后续部分标识层次化路径上的各个子级。
例如,在下图中,符号 data
位于 a
状态的子状态 aa
中。状态和转移动作使用限定数据名称来引用此符号。
在默认转移中,动作使用限定数据名称
a.aa.data
指定从图到顶层状态a
、到子状态aa
及最后到data
的路径。在状态
a
中,entry 动作使用限定数据名称aa.data
指定从子状态aa
到data
的路径。在状态
b
中,entry 动作使用限定数据名称a.aa.data
指定从图到状态a
、子状态aa
以及data
的路径。
限定数据名称的解析
在仿真过程中,Stateflow 通过在图层次结构中执行局部化搜索来查找匹配的数据对象,从而解析限定数据名称。搜索从出现限定数据名称的层次结构级别开始:
对于状态动作,起点是包含该动作的状态。
对于转移标签,起点是转移源的父级。
解析过程在图层次结构的每个级别搜索数据路径。如果某数据对象匹配路径,该过程将该数据对象添加到可能匹配项的列表中。然后,该过程继续搜索层次结构中更高一层的级别。解析过程在搜索层次结构的图级别后停止。如果存在唯一匹配项,则限定数据名称解析为匹配路径。否则,解析过程失败。仿真停止,您会看到一条错误消息。
以下流程图说明了解析限定数据名称过程中的不同阶段。
使用圆点表示法的最佳做法
解析限定数据名称:
不会对所有数据执行穷举搜索。
找到第一个匹配项后不会停止。
要增加解析限定数据名称时找到唯一搜索结果的可能性,请执行以下操作:
在限定数据名称中使用具体路径。
使状态具有唯一名称。
使用状态和框作为条件来限制路径解析搜索的范围。
限定数据名称解析示例
搜索未产生匹配项
在此图中,状态 b
中的 entry 动作包含限定数据名称 aa.data
。如果符号 data
位于状态 aa
中,则 Stateflow 无法解析限定数据名称。
下表列出了限定数据名称 aa.data
解析过程中的不同阶段。
阶段 | 描述 | 结果 |
---|---|---|
1 | 从状态 b 开始,搜索包含 data 的对象 aa 。 | 找不到匹配项。 |
2 | 在层次结构中上移一层(图级别)。搜索包含 data 的对象 aa 。 | 找不到匹配项。 |
搜索在图级别结束,找不到 aa.data
的匹配项,生成错误。
要避免此错误,请在状态 b
的 entry 动作中,使用更具体的限定数据名称 a.aa.data
指定数据。
搜索产生多个匹配项
在此图中,状态 a
中的 entry 动作包含限定数据名称 aa.data
的两个实例。如果两个名为 aa
的状态都包含名为 data
的数据对象,则 Stateflow 无法解析限定数据名称。
下表列出了限定数据名称 aa.data
解析过程中的不同阶段。
阶段 | 描述 | 结果 |
---|---|---|
1 | 从状态 a 开始,搜索包含 data 的对象 aa 。 | 找到匹配项。 |
2 | 在层次结构中上移一层(图级别)。搜索包含 data 的对象 aa 。 | 找到匹配项。 |
搜索在图级别结束,找到 aa.data
的两个匹配项,生成错误。
要避免此错误,请执行以下操作:
使用更具体的限定数据名称。例如:
要在状态
a
的子状态中指定数据对象,请使用限定数据名称a.aa.data
。要在顶层状态
aa
中指定数据对象,请使用限定数据名称/aa.data
。
重命名包含
data
的多个状态之一。将顶层状态
aa
包含在一个框中或另一个状态中。添加限制范围可防止搜索过程检测顶层状态中的数据。