主要内容

广播本地事件以同步并行状态

一个当地的活动是发生在状态流中的事件吗®图表,仅在图表中可见。这种类型的事件允许同一图表中的并行(AND)状态彼此同步,以便一种状态中的操作触发另一种状态中的操作。一个图表中的操作不能向另一个图表中的状态广播本地事件。定义一个本地事件:

  1. 将事件添加到状态流图中,如在图表中定义事件

  2. 设置范围属性的事件当地的

在MATLAB中的独立状态流图中不支持本地金宝app事件®。有关更多信息,请参见通过广播事件同步模型组件

当地广播事件

一个导演事件广播使用操作符将本地事件从一个状态直接发送到另一个状态发送

发送(event_name state_name)
event_name是当地的活动吗state_name是接收状态。本地事件被直接广播到接收状态和它的任何子状态。本地事件必须对发送状态和接收状态都可见。在事件广播期间,接收状态必须是活跃的。

例如,这个图表包含两个并行(AND)状态,一个B。当地的活动E_one属于图表,对两个州都可见。在国家一个即从基态的转变A1对亚态A2使用表单的定向事件广播发送(E_one, B)发送本地事件E_oneB。在B时,事件触发从子状态的转换B1对亚态B2。因此,在一个B是同步的。有关此示例的语义的更多信息,请参见使用发送的定向事件广播

使用有向事件广播同步两个并行(AND)状态的子状态的状态流程图。

state_name参数可以包含状态的完整层次结构路径。例如,如果状态一个包含状态A1,则可以发送事件EA1这个广播:

发送(E, A.A1)

提示

不要在状态的完整层次结构路径中包含图表名称。

在事件广播中使用限定事件名称

若要广播发送状态不可见的本地事件,请使用操作符发送带有限定事件名:

发送(state_name.event_name)
event_name接收状态是否拥有本地事件state_name。本地事件被直接广播到接收状态和它的任何子状态。本地事件对接收状态可见,但对发送状态不可见。在事件广播期间,接收状态必须是活跃的。

例如,这个图表包含两个并行(AND)状态,一个B。当地的活动E_one属于国家B并且只在那个状态下可见。在国家一个即从基态的转变A1对亚态A2使用表单的定向事件广播发送(B.E_one)发送本地事件E_oneB。在B时,事件触发从子状态的转换B1对亚态B2。因此,在一个B是同步的。有关此示例的语义的更多信息,请参见使用限定事件名称进行定向事件广播

使用有向事件广播同步两个并行(AND)状态的子状态的状态流程图。广播使用限定事件名b.e e_one。

state_name参数可以包含到接收状态的完整层次结构路径。不要在状态的完整路径名中使用图表名。例如,假设状态一个包含状态A1,这A1拥有当地的活动E。你可以发送事件EA1这个广播:

发送(A.A1.E)

无向事件广播

一个无向事件广播通过使用事件的名称作为条件动作,将本地事件发送到它可见的所有状态:

event_name;

或者通过呼叫接线员发送不指定接收状态:

发送(event_name)
event_name发送状态可见的本地事件。

如果可能的话,使用有向事件广播而不是无向事件广播。有向事件广播防止了模拟过程中不必要的递归,提高了生成代码的效率。有关更多信息,请参见避免图表中不必要的递归

用于检测无向本地事件广播的诊断

在模拟过程中,状态流图可以检测无方向的本地事件广播。要控制诊断动作的级别,请打开“配置参数”对话框。在诊断>Stateflow窗格中,为无向事件广播诊断,您可以选择没有一个警告,或错误。默认设置为警告。有关更多信息,请参见无向事件广播(金宝app模型)

另请参阅

相关的话题