Main Content

通过发送输入事件激活 Stateflow

输入事件发生在 Stateflow® 图之外,但是只能在该图内可见。这种类型的事件支持其他 Simulink® 模块(包括其他 Stateflow 图)将在特定 Stateflow 图之外发生的事件通知该图。要定义输入事件,请执行下列操作:

  1. 向 Stateflow 图添加一个事件,如定义图中的事件中所述。

  2. 将该事件的作用域属性设为从 Simulink 输入。Simulink 模型中 Stateflow 模块的顶部会显示一个触发端口。

  3. 输入事件可以通过更改控制信号(边沿触发器)或来自 Simulink 模块的函数调用来激活 Stateflow 图。

    • 要指定边沿触发输入事件,请将触发器属性设置为以下选项之一:

      • 上升沿

      • 下降沿

      • 任一沿

    • 要指定函数调用输入事件,请将触发器属性设置为函数调用

    您不能在同一 Stateflow 图中混合使用边沿触发输入事件和函数调用输入事件。混合使用这些输入事件会导致编译时错误。

有关详细信息,请参阅通过广播事件同步模型组件

使用边沿触发器激活 Stateflow

边沿触发输入事件会导致 Stateflow 图在仿真的当前时间步内执行。使用此类型的输入事件时,控制信号的变化充当触发器。

边沿触发器类型

描述

上升沿

上升沿触发器。当控制信号从零或负值变为正值时,图被激活。

下降沿

下降沿触发器。当控制信号从正值变为零或负值时,图被激活。

任一沿

上升沿或下降沿触发器。当控制信号在任一方向变化且过零时,图被激活。

在所有情况下,控制信号的值都必须过零才能成为有效的边沿触发器。例如,从 -1 变为 1 的信号是一个有效的上升沿触发器。从 1 变为 2 的信号不是一个有效的上升沿触发器。

何时使用边沿触发输入事件

当模型要求 Stateflow 图按一定的规律或周期执行时,请使用边沿触发输入事件来激活图。例如,在此模型中,边沿触发输入事件会以规律的时间间隔激活 Edge to Function 图。

多个边沿触发输入事件的行为

在任意给定时间步,按其端口号升序检查输入事件。Stateflow 图遇到每个有效事件都会唤醒一次。对于边沿触发输入事件,同一时间步内可能会出现多个边沿,这会在该时间步内将 Stateflow 图唤醒多次。在这种情况下,事件按其端口号的升序顺序唤醒 Stateflow 图。

使用函数调用激活 Stateflow

函数调用输入事件会导致 Stateflow 图在仿真的当前时间步内执行。使用这种类型的输入事件时,还必须为调用 Stateflow 图的模块定义函数调用输出事件。

何时使用函数调用输入事件

当模型需要在与函数调用相同的时间步中访问来自 Stateflow 图的输出数据时,可以使用函数调用输入事件来激活 Stateflow 图。例如,在此模型中,函数调用输入事件激活 Looping Scheduler 图。

多个函数调用输入事件的行为

对于函数调用输入事件,只存在一个触发事件。事件的调用方显式调用并执行图。单个时间步内只有一个函数调用有效。

将输入事件与控制信号相关联

当您在 Stateflow 图中定义一个或多个输入事件时,图模块的顶部会显示一个触发端口。多个外部的 Simulink 模块可以通过连接到触发端口的信号向量来触发输入事件。输入事件的端口属性指定连接到触发端口的控制信号向量的索引。

默认情况下,端口值按添加输入事件的顺序显示。您可以通过修改事件的端口属性来更改以上分配。更改输入事件的端口属性时,其余输入事件的端口值将自动重新编号。

输入事件允许的数据类型

对于一个触发端口的多个输入事件,所有信号必须具有相同的数据类型。使用不同数据类型的信号作为输入事件会在仿真期间导致错误。例如,可以将两个 double 类型的输入信号复用为 Stateflow 图的输入事件。

Simulink model that uses two signals of type double as input events to a Stateflow chart.

您不能复用两个数据类型不同(例如 booleandouble)的输入信号。

Simulink model that uses a signal of type boolean and a signal of type double as input events to a Stateflow chart. This configuration produces a run-time error.

相关主题