Simulink—Stateflow学习01—概述与状态

目录

一. Stateflow概述

二. 状态

1. 互斥状态

2. 并行状态

3. 两种状态间的切换

4. 状态命名

5. 状态属性设置

6.状态动作


一. Stateflow概述

打开Stateflow的三种方法: 

  1. 在MATLAB的“命令行窗口”中输入“stateflow”或“sf”命令;
  2. 在MATLAB的“命令行窗口”中输入“sfnew”命令;
  3. 在库浏览器中找到Stateflow库,添加Chart模块。
图1 Stateflow模块库

 双击任何模型中的Chart模块都可以打开Stateflow编辑窗口,如图2所示。

图2 Stateflow编辑窗口

二. 状态

  • 状态是系统模式的描述,在Stateflow中将每一种操作模式都表示为一种状态。
  • 状态有两种行为——激活和非激活
  • 图表的状态是激活还是非激活是基于事件和条件动态改变的,事件的发生使状态激活或非激活,驱动了Stateflow 图表的执行。
  • 一旦状态被激活,则这个状态将一直处于激活状态,直到退出为止。
  • Stateflow 图表可以具有层次,即允许有子状态,同样的就有超状态,这种层次关系可在仿真页下的模型资源管理器中查看。
图3 Stateflow Tree
  • 只有子状态的上层即超状态被激活后,下层的子状态才有可能被激活。如果某一状态既非超状态,也非子状态,则它的父状态就是Stateflow 状态图本身。
  • 而在同一层次里,所有状态之间的关系只有两种——互斥(OR)的或并行(AND)。单击Stateflow 编辑窗口中的, 用户可以在图形编辑窗口中添加状态模块。

1. 互斥状态

    互斥状态,即两种状态不能同时被激活,不能同时执行,用实线框表示。如图4所示的状态图,状态A与状态B是互斥的,它们中只能有一个处于激活状态。

图4 互斥状态与并行状态

2. 并行状态

    状态的执行是独立的,同级的两个或多个并行的状态可以同时被激活,用虚线框表示。如图4所示的状态图,当状态B 被激活时,其子状态B1 与B2 可以同时处于激活状态。
    当状态为并行时,并不是同时被激活,而是按一定的顺序被激活并执行。在创建并行状态时,并行状态的左上角有数字编号,这个数字编号就是状态的激活顺序。这是根据其在图形编辑器中的位置来编号的,基本原则是:位置较高的状态具有较高的执行次序编号;当处于同一水平位置时,左边的状态具有较高的执行次序编号。用户也可以自己修改执行次序编号。

3. 两种状态间的切换

    在两个或多个状态所在的同一父级中,鼠标右键单击,在“分解”一栏可进行互斥(OR)或并行(AND)的修改。

图5 两种状态的切换

4. 状态命名

    当添加状态模块后,状态的示意模块就会出现一个“?”,这表示允许用户填写状态的名称和相应的状态动作。

图6 命名状态的外观

5. 状态属性设置

    创建状态之后,可以通过查看状态的属性来修改相应的设置。在状态上右击,在弹出的快捷菜单中选择属性,弹出如图7所示的状态属性对话框,状态属性对话框内容如表1所示。

图7 状态属性对话框

 

6.状态动作

    状态动作的执行与状态是否激活相关,在下列情况下,将发生状态动作: 

  1. 初始为非激活状态,事件驱动使其激活——entry 动作,关键字为en;
  2. 初始为激活状态,事件未改变其激活状态——during 动作,关键字为du或on;
  3. 初始为激活状态,事件驱动使其进入非激活状态——exit 动作,关键字为ex;
  4. 处于激活状态,有驱动事件发生——on Event 动作,关键字为On Event;
  5. 处于激活状态或其子状态处于激活状态——bind动作,关键字为bind。

    状态动作一般作为状态名称标签的一部分,可以紧跟在标签名称后面定义动作的名称,不过,定义动作时需要使用关键字来标识动作的作用类型。

图8 状态动作撰写格式

猜你喜欢

转载自blog.csdn.net/m0_64651092/article/details/129746495