Main Content

使用圆点表示法标识数据

要指定从父状态到数据对象的路径,限定数据名称使用圆点表示法。圆点表示法是标识 Stateflow® 图层次结构中特定级别数据的一种方法。限定数据名称的第一部分标识父对象。后续部分标识层次化路径上的各个子级。

例如,在下图中,符号 data 位于 a 状态的子状态 aa 中。状态和转移动作使用限定数据名称来引用此符号。

  • 在默认转移中,动作使用限定数据名称 a.aa.data 指定从图到顶层状态 a、到子状态 aa 及最后到 data 的路径。

  • 在状态 a 中,entry 动作使用限定数据名称 aa.data 指定从子状态 aadata 的路径。

  • 在状态 b 中,entry 动作使用限定数据名称 a.aa.data 指定从图到状态 a、子状态 aa 以及 data 的路径。

Chart with two states named a and b. State a contains a substate named aa. State aa contains a data object named data.

限定数据名称的解析

在仿真过程中,Stateflow 通过在图层次结构中执行局部化搜索来查找匹配的数据对象,从而解析限定数据名称。搜索从出现限定数据名称的层次结构级别开始:

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

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

解析过程在图层次结构的每个级别搜索数据路径。如果某数据对象匹配路径,该过程将该数据对象添加到可能匹配项的列表中。然后,该过程继续搜索层次结构中更高一层的级别。解析过程在搜索层次结构的图级别后停止。如果存在唯一匹配项,则限定数据名称解析为匹配路径。否则,解析过程失败。仿真停止,您会看到一条错误消息。

以下流程图说明了解析限定数据名称过程中的不同阶段。

Flow chart that describes process for resolving qualified data names.

使用圆点表示法的最佳做法

解析限定数据名称:

  • 不会对所有数据执行穷举搜索。

  • 找到第一个匹配项后不会停止。

要增加解析限定数据名称时找到唯一搜索结果的可能性,请执行以下操作:

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

  • 使状态具有唯一名称。

  • 使用状态和框作为条件来限制路径解析搜索的范围。

限定数据名称解析示例

搜索未产生匹配项

在此图中,状态 b 中的 entry 动作包含限定数据名称 aa.data。如果符号 data 位于状态 aa 中,则 Stateflow 无法解析限定数据名称。

Chart with two states named a and b. State a contains a substate named aa. State aa contains a data object named data.

下表列出了限定数据名称 aa.data 解析过程中的不同阶段。

阶段描述结果
1从状态 b 开始,搜索包含 data 的对象 aa找不到匹配项。
2在层次结构中上移一层(图级别)。搜索包含 data 的对象 aa找不到匹配项。

搜索在图级别结束,找不到 aa.data 的匹配项,生成错误。

要避免此错误,请在状态 b 的 entry 动作中,使用更具体的限定数据名称 a.aa.data 指定数据。

搜索产生多个匹配项

在此图中,状态 a 中的 entry 动作包含限定数据名称 aa.data 的两个实例。如果两个名为 aa 的状态都包含名为 data 的数据对象,则 Stateflow 无法解析限定数据名称。

Chart with three states named a, aa, and b. State a contains a substate named aa. Each of the states named aa contains a data object named data.

下表列出了限定数据名称 aa.data 解析过程中的不同阶段。

阶段描述结果
1从状态 a 开始,搜索包含 data 的对象 aa找到匹配项。
2在层次结构中上移一层(图级别)。搜索包含 data 的对象 aa找到匹配项。

搜索在图级别结束,找到 aa.data 的两个匹配项,生成错误。

要避免此错误,请执行以下操作:

  • 使用更具体的限定数据名称。例如:

    • 要在状态 a 的子状态中指定数据对象,请使用限定数据名称 a.aa.data

    • 要在顶层状态 aa 中指定数据对象,请使用限定数据名称 /aa.data

  • 重命名包含 data 的多个状态之一。

  • 将顶层状态 aa 包含在一个框中或另一个状态中。添加限制范围可防止搜索过程检测顶层状态中的数据。

    Chart in which a box encloses the top-level state aa.

相关主题