通过发送输入事件激活 Stateflow 图
输入事件发生在 Stateflow® 图之外,但是只能在该图内可见。这种类型的事件支持其他 Simulink® 模块(包括其他 Stateflow 图)将在特定 Stateflow 图之外发生的事件通知该图。要定义输入事件,请执行下列操作:
向 Stateflow 图添加一个事件,如定义图中的事件中所述。
将该事件的作用域属性设为从 Simulink 输入。Simulink 模型中 Stateflow 模块的顶部会显示一个触发端口。
输入事件可以通过更改控制信号(边沿触发器)或来自 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 图的输入事件。
您不能复用两个数据类型不同(例如 boolean
和 double
)的输入信号。