本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

通过广播事件同步模型组件

事件是可以在下列对象之一中触发动作的 Stateflow® 对象:

  • Stateflow 图中的并行状态。

  • 另一个 Stateflow 图。

  • Simulink® 触发子系统或函数调用子系统。

出于仿真目的,Stateflow 图中的事件数量没有限制。但是,对于代码生成,底层 C 编译器强制施加 2 31-1 个事件的理论限制。

事件类型

隐式事件是在 Stateflow 图执行期间被广播的内置事件。这些事件是隐式的,因为您没有显式定义或触发它们。有关详细信息,请参阅Define Chart Behavior by Using Implicit Events

显式事件是指您显式定义的事件。显式事件可以具有下列作用域之一。

作用域说明
Input从图外部广播到 Stateflow 图的事件。有关详细信息,请参阅通过发送输入事件激活 Stateflow 图Design Human-Machine Interface Logic by Using Stateflow Charts
Local可以在 Stateflow 图的任意位置发生但只能在父对象及其子级中可见的事件。仅 Simulink 模型中的 Stateflow 图支持本地事件。有关详细信息,请参阅广播本地事件以同步并行状态
Output在 Stateflow 图中发生,但广播到 Simulink 模块的事件。仅 Simulink 模型中的 Stateflow 图支持输出事件。有关详细信息,请参阅通过发送输出事件激活 Simulink 模块

您可以在 Stateflow 层次结构的以下级别定义显式事件。

层次结构的级别可见性
Stateflow 图事件对 Stateflow 图及其所有状态和子状态可见。
子图事件对 Stateflow 子图及其所有状态和子状态可见。
状态事件对状态及其所有子状态可见。

定义图中的事件

您可以通过 Symbols 窗口、Stateflow Editor 中的 Chart 菜单或 Model Explorer 将事件添加到 Stateflow 图中。

通过 Symbols 窗口添加事件

  1. 要打开 Symbols 窗口,请选择 View > Symbols

  2. 点击 Create Event 图标

  3. 在新事件的行中,点击 TYPE 下方的图标并选择:

    • Input Event

    • Local Event

    • Output Event

  4. 编辑事件的名称。

  5. 对于输入和输出事件,点击 PORT 字段并选择端口号。

  6. 要指定事件的属性,请打开 Property Inspector。在 Symbols 窗口中,右键点击该事件的行并选择 Explore。有关详细信息,请参阅Set Properties for an Event

使用 Stateflow Editor 菜单添加事件

  1. 在 Simulink 模型的 Stateflow 图中,选择与您要添加的事件作用域对应的菜单选项。

    作用域菜单选项
    InputChart > Add Inputs & Outputs > Event Input From Simulink
    OutputChart > Add Inputs & Outputs > Event Output To Simulink
    LocalChart > Add Other Elements > Local Event

  2. 在 Event 对话框中,指定数据属性。有关详细信息,请参阅Set Properties for an Event

通过 Model Explorer 添加事件

  1. 在 Simulink 模型的 Stateflow 图中,选择 View > Model Explorer

  2. Model Hierarchy 窗格中,在 Stateflow 层次结构中选择您希望新事件对其可见的对象。所选对象即变为新事件的父级。

  3. 在 Model Explorer 菜单中,选择 Add > Event。具有默认定义的新事件出现在 Model Explorer 的 Contents 窗格中。

  4. Event 窗格中,指定事件的属性。有关详细信息,请参阅Set Properties for an Event

Stateflow 图访问事件信息

您可以显示输入事件或本地事件的属性,也可以直接从 Stateflow 图打开输出事件的目标。右键点击包含所需事件的状态或转移,然后选择 Explore。上下文菜单会列出在状态或转移中所有已解析符号的名称和作用域。从上下文菜单中选择一个输入事件或本地事件将在 Model Explorer 中显示其属性。从上下文菜单中选择输出事件将打开与事件关联的 Simulink 子系统或 Stateflow 图。

Stateflow 图中使用事件的最佳做法

使用 send 命令在动作中广播显式事件

要在状态或转移动作中广播显式事件,请使用 send 命令。使用此命令可增强图的可读性,并确保显式事件不会被误认为数据。有关详细信息,请参阅广播本地事件以同步并行状态

避免使用显式事件触发条件动作

在以下情况下,请对转移使用条件而不是事件:

  • 您要表示条件语句,例如,[x < 1][x == 0]

  • 您要表示数据值的变化,例如,[hasChanged(x)]

有关详细信息,请参阅转移动作的类型

避免使用隐式事件 enter 来检查状态活动

要检查状态活动,请使用 in 运算符,而不是隐式事件 enter。有关详细信息,请参阅Check State Activity by Using the in Operator

不要在图中混合使用边沿触发输入事件和函数调用输入事件

如果混合使用边沿触发输入事件和函数调用输入事件,则在解析和仿真过程中会导致错误。

相关主题