通过发送输入事件激活 Stateflow 图
Simulink® 模型包含 Stateflow® 图,但这些图在模型执行期间不一定处于激活状态。使图处于激活状态的一种方式是从 Simulink 接收输入事件。一旦 Stateflow 图变为激活状态,图就会执行其动作。
输入事件发生在 Stateflow 图之外。Simulink 模型、Simulink 函数或另一个 Stateflow 图可以生成输入事件。
定义输入事件
要定义输入事件,请执行下列操作:
向 Stateflow 图添加一个事件。有关详细信息,请参阅定义图中的事件。
在属性检查器中,将该事件的作用域属性设置为从 Simulink 输入。Simulink 模型中 Stateflow 模块的顶部会显示一个触发端口。
输入事件可以通过控制信号的变化或来自 Simulink 模块的函数调用来激活 Stateflow 图。控制信号的变化也称为边沿触发器。您不能在同一 Stateflow 图中同时使用边沿触发输入事件和函数调用输入事件。同时使用这些输入事件会导致编译时错误。
使用边沿触发器激活 Stateflow 图
边沿触发输入事件会导致 Stateflow 图在仿真的当前时间步内执行。使用此类型的输入事件时,控制信号的变化充当触发器。
要指定函数调用输入事件,请将触发器属性设置为函数调用。
边沿触发器类型 | 描述 |
|---|---|
上升沿 | 上升沿触发器。当控制信号从零或负值变为正值时,图被激活。 |
下降沿 | 下降沿触发器。当控制信号从正值变为零或负值时,图被激活。 |
任一沿 | 上升沿或下降沿触发器。当控制信号在任一方向变化且过零时,图被激活。 |
在所有情况下,控制信号的值都必须等于零或发生过零才能成为有效的边沿触发器。例如,从 -1 变为 1 的信号是一个有效的上升沿触发器。从 1 变为 2 的信号不是一个有效的上升沿触发器。从 0 变为 2 的信号是一个有效的上升沿触发器。
何时使用边沿触发输入事件
当模型要求 Stateflow 图按一定的规律或周期执行时,请使用边沿触发输入事件来激活图。例如,在此模型中,边沿触发输入事件会以规律的时间间隔激活 Edge to Function 图。

多个边沿触发输入事件的行为
在每个时间步,Stateflow 按端口号升序检查输入事件。图遇到每个有效事件都会唤醒一次。对于边沿触发输入事件,同一时间步内可能会出现多个边沿,这会在该时间步内将 Stateflow 图唤醒多次。
使用函数调用激活 Stateflow 图
函数调用输入事件会导致 Stateflow 图在仿真的当前时间步内执行。
何时使用函数调用输入事件
当模型需要在与函数调用相同的时间步中访问来自 Stateflow 图的输出数据时,可以使用函数调用输入事件来激活 Stateflow 图。例如,在此模型中,函数调用输入事件激活 Looping Scheduler 图。

多个函数调用输入事件的行为
对于函数调用输入事件,只存在一个触发事件。事件调用方显式调用并执行图。
将输入事件与控制信号相关联
当您在 Stateflow 图中定义一个或多个输入事件时,图模块的顶部会显示一个触发端口。多个外部的 Simulink 模块可以通过连接到触发端口的信号向量来触发输入事件。输入事件的端口属性指定连接到触发端口的控制信号向量的索引。
默认情况下,端口值按添加输入事件的顺序显示。您可以通过修改事件的端口属性来更改以上分配。更改输入事件的端口属性时,其余输入事件的端口值将自动重新编号。
输入事件允许的数据类型
对于一个触发端口的多个输入事件,所有信号必须具有相同的数据类型。使用不同数据类型的信号作为输入事件会在仿真期间导致错误。例如,可以将两个 double 类型的输入信号复用为 Stateflow 图的输入事件。

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