主要内容

通过发送输入事件激活 Stateflow

Simulink® 模型包含 Stateflow® 图,但这些图在模型执行期间不一定处于激活状态。使图处于激活状态的一种方式是从 Simulink 接收输入事件。一旦 Stateflow 图变为激活状态,图就会执行其动作。

输入事件发生在 Stateflow 图之外。Simulink 模型、Simulink 函数或另一个 Stateflow 图可以生成输入事件。

定义输入事件

要定义输入事件,请执行下列操作:

  1. 向 Stateflow 图添加一个事件。有关详细信息,请参阅定义图中的事件

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

输入事件可以通过控制信号的变化或来自 Simulink 模块的函数调用来激活 Stateflow 图。控制信号的变化也称为边沿触发器。您不能在同一 Stateflow 图中同时使用边沿触发输入事件和函数调用输入事件。同时使用这些输入事件会导致编译时错误。

使用边沿触发器激活 Stateflow

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

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

边沿触发器类型

描述

上升沿

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

下降沿

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

任一沿

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

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

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

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

A model that uses edge-triggered events to activate charts. It contains two charts named Edge to Function and Loop Scheduler. A 1-second clock periodically activates the Edge to Function chart, which in turn uses an event named call to activate the Loop Scheduler chart. The Loop Scheduler chart inputs from and outputs to a subsystem named A1.

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

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

使用函数调用激活 Stateflow

函数调用输入事件会导致 Stateflow 图在仿真的当前时间步内执行。

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

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

A model that uses edge-triggered events to activate charts. It contains two charts named Edge to Function and Loop Scheduler. A 1-second clock periodically activates the Edge to Function chart, which in turn uses an event named call to activate the Loop Scheduler chart. The Loop Scheduler chart inputs from and outputs to a subsystem named A1.

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

对于函数调用输入事件,只存在一个触发事件。事件调用方显式调用并执行图。

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

当您在 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.

另请参阅

主题