Stateflow的定义并使用事件

Stateflow的定义并使用事件
最新回答
じ○Ve→三妻四妾

2023-12-02 03:40:41

Stateflow中事件的定义及使用

在Stateflow中,事件(Events)是非图形对象中最常用且最重要的元素之一。它们用于在状态机或流程图中触发状态转移或动作。以下是关于Stateflow中事件的定义及使用的详细解释:

一、事件的定义

  1. 添加事件

    向Stateflow框图中增加事件,可以通过Symbols Pane中的Event选项进行添加。

    或者在菜单中选择MODELING,再选择Model Explorer,通过对话框添加事件。

  2. 事件属性

    Name:事件的名称,命名原则与C语言变量一致,字母开头,可由字母、数字和下划线组成,对大小写敏感。

    Type:事件的作用类型,分为Input Event(输入事件)、Local Event(本地事件)和Output Event(输出事件)。

    Input Event:从Simulink框图输入到Stateflow中的事件,即外部触发事件。

    Local Event:在状态图内部发挥作用的事件,主要用于并行运行的状态图中。

    Output Event:从Stateflow框图输出到Simulink中的事件,用于驱动或触发其他Stateflow框图或子系统动作。

    Port:仅在事件作用范围设置为Input from Simulink或Output to Simulink时有效。用于指定输入或输出事件的索引或序号。

    Trigger:触发属性,有四个可能值:Either(双边沿触发)、Rising(上升沿触发)、Falling(下降沿触发)和Function call(函数调用)。

    Description:为事件增加必要的文本说明,代码生成时,该说明可显示在代码相应位置。

    Document Link:可添加必要的超文本链接。

二、事件的使用

  1. 设置事件

    以事件E为例,设置其Name为E,Scope属性为Input from Simulink,Trigger属性为Rising(上升沿),Port/Index属性为1(假设只有一个事件)。

    在Stateflow图形编辑器中增加状态,并创建相应的转移和默认转移,设置转移标签为E。

  2. 事件驱动状态转移

    在Simulink模型中增加事件源,如常数模块和Manual Switch模块,搭建起信号源。

    设置Simulink模型的仿真时间,运行仿真。通过单击Manual Switch模块向Stateflow框图发出事件E。

    在Stateflow框图运行时,被蓝色高亮显示的状态为当前被激活的状态,转移如果被蓝色高亮显示,则表示该转移正在被检测或执行。

    Stateflow框图运行时依赖于事件驱动,事件E的驱动使状态图在On和Off状态之间切换。

  3. 使用多个输入事件

    同一个Stateflow图块可以使用多个输入事件,但每个图块只能有一个事件输入端口。

    需要将不同的事件通过Mux块组合输入为事件向量,然后将组合后的输入事件向量连接到Stateflow图块上。

    使用Mux块组合输入事件向量时,决定了事件与信号之间的对应关系。Mux块垂直摆放时,最上面的输入信号端口为向量的第一个元素,对应Stateflow输入事件的第一个事件;水平摆放时,顺序为从左至右。

    如果多个输入事件同时发生,Stateflow将按照定义时间的索引顺序依次处理。

  4. 默认转移的注意事项

    默认转移上不应增加事件的限制,否则可能导致状态机无法正确激活或默认转移无法执行。

    如果必须根据具体发生事件来触发整个系统的执行,可考虑将Stateflow框图包含于使能子系统中,并设置触发信号类型为Reset。

三、示例

以下是一个简单的Stateflow事件使用示例:

  • 向Stateflow框图中添加一个输入事件E,设置其属性。
  • 在Stateflow图形编辑器中创建两个状态On和Off,并设置从On到Off和从Off到On的转移标签为E。
  • 在Simulink模型中搭建信号源,如使用常数模块和Manual Switch模块。
  • 设置仿真时间并运行仿真,通过单击Manual Switch模块触发事件E,观察Stateflow框图中状态的切换。

在Stateflow框图运行时,被蓝色高亮显示的状态为当前激活状态,转移被高亮显示则表示正在被检测或执行。通过事件E的触发,状态图在On和Off状态之间切换,直到仿真结束。

综上所述,Stateflow中的事件是触发状态转移或动作的关键元素。通过合理定义和使用事件,可以实现复杂的逻辑控制和状态管理。