主要内容

使用点符号标识数据

若要指定从父状态到数据对象的路径,限定数据名使用点符号.点表示法是在状态流的特定级别上标识数据的一种方法®图的层次结构。限定数据名的第一部分标识父对象。后续部分沿着分层路径标识子节点。

例如,在这个图表中,这个符号数据驻留在子状态中aa国家的一个.状态和转换操作使用限定数据名引用此符号。

  • 在默认转换中,操作使用限定数据名a.aa.data指定从图表到顶级状态的路径一个,到基态aa,最后数据

  • 在国家一个时,输入操作使用限定的数据名aa.data从子状态指定路径aa数据

  • 在国家b时,输入操作使用限定的数据名a.aa.data指定从图表到状态的路径一个,到基态aa,然后到数据

有两个状态a和b的图表。状态a包含一个子状态aa。状态aa包含名为data的数据对象。

限定数据名称的解析

在模拟过程中,Stateflow通过对匹配数据对象的图表层次结构执行本地化搜索来解析限定数据名称。搜索从出现限定数据名的层次结构级别开始:

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

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

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

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

描述解析限定数据名称过程的流程图。

使用点表示法的最佳实践

解析限定数据名:

  • 不对所有数据执行详尽的搜索。

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

要提高解析限定数据名称时找到唯一搜索结果的几率:

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

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

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

限定数据名称解析示例

搜索不匹配

在这个图表中,进入动作处于状态b包含限定数据名称aa.data.如果符号数据居住在州aa,则statflow无法解析限定的数据名称。

有两个状态a和b的图表。状态a包含一个子状态aa。状态aa包含名为data的数据对象。

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

阶段 描述 结果
1 从状态开始b,搜索一个对象aa包含数据 没有找到匹配的。
2 移动到层次结构的下一个级别(图表级别)。搜索对象aa包含数据 没有找到匹配的。

搜索结束于图表级别,没有找到匹配aa.data,导致错误。

为避免此错误,在输入动作的状态b,使用更特定的限定数据名指定数据a.aa.data

搜索产生多个匹配

在这个图表中,进入动作处于状态一个包含限定数据名的两个实例aa.data.如果两个州都命名为aa包含名为数据,则statflow无法解析限定的数据名称。

包含三个状态a、aa和b的图表。状态a包含一个子状态aa。每个名为aa的状态都包含一个名为data的数据对象。

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

阶段 描述 结果
1 从状态开始一个,搜索一个对象aa包含数据 发现匹配。
2 移动到层次结构的下一个级别(图表级别)。搜索对象aa包含数据 发现匹配。

搜索在图表级别结束,找到两个匹配aa.data,导致错误。

要避免此错误:

  • 使用更特定的限定数据名。例如:

    • 指定state的子状态中的数据对象一个,使用限定的数据名a.aa.data

    • 指定处于顶级状态的数据对象aa,使用限定的数据名/ aa.data

  • 的状态之一重命名数据

  • 包含顶级状态aa在一个盒子里或者在另一个状态里。添加框可以防止搜索过程检测到处于顶级状态的数据。

    图表,其中一个框包含顶级状态aa。

相关的话题