主要内容

通过发送输入事件激活 Stateflow

您可以创建一个仅在 Simulink® 模型向图发送输入事件时才激活的 Stateflow® 图。在图激活后,它会执行其动作。

Simulink 模型、Simulink 函数或其他 Stateflow 图可以生成输入事件。

定义输入事件

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

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

  2. 在属性检查器中,将该事件的作用域属性设置为从 Simulink 输入。此设置在 Chart 模块上创建一个输入端口。

  3. 要指定边沿触发的事件,请将触发器设置为 RisingFallingEither。要指定函数调用,请将触发器设置为 Function call

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

使用边沿触发器激活 Stateflow

边沿触发输入事件在控制信号从正变为负、从负变为正或在负和正之间变化时激活 Stateflow 图。边沿触发事件在控制信号发生变化的时间步内执行。触发器属性的设置确定图何时激活:

触发器属性设置

描述

上升沿

当控制信号从零或负值变为正值时,图会激活。

下降沿

当控制信号从正值变为零或负值时,图会激活。

任一沿

当控制信号在任一方向变化且过零时,图会激活。

要激活边沿触发事件,控制信号的值必须等于零或过零。例如,从 -1 变为 1 或从 0 变为 2 的信号是一个有效的上升沿触发器。从 1 变为 2 的信号不是一个有效的上升沿触发器。

仅当控制信号在信号值的两次上升或两次下降之间相差一个以上的时间步时,才会发生多个上升沿触发器。换句话说,图将连续时间步中的 -101 信号视为单个上升沿触发器,而不是两个上升沿触发器。有关详细信息,请参阅使用触发子系统 (Simulink)

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

当模型要求 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 图。例如,在此模型中,函数调用输入事件激活 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.

多个函数调用输入事件

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

输入事件支持的数据类型

当一个触发端口存在多个输入事件时,所有信号必须具有相同的数据类型。使用不同数据类型的信号作为输入事件会在仿真期间导致错误。例如,您可以使用 Mux 模块合并类型为 double 的两个输入信号,并使用此信号触发图中的输入事件。

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

您无法使用 Mux 模块合并具有不同数据类型(例如 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.

另请参阅

主题