simulink中状态机的使用/Stateflow使用技巧与实例应用

来源:互联网 发布:深度linux下载 编辑:程序博客网 时间:2024/06/16 21:55

Stateflow使用技巧与实例应用

1 Stateflow基础

       Stateflow是与Simulink一起运行的图形设计和发展工具,非常适合在Simulink中队控制和操作实际系统的逻辑进行建模。Stateflow是根据有限状态机(finite state machine)理论发展而来的,是有限状态机各个状态之间的转换。

       有限状态机系统——事件驱动系统:事件、状态。

       状态转换图:State Transition Diagrams,是有限状态机的基本表达方式。

       状态:state,代表一个系统模型,具有相应的布尔(boolean)行为,即有active和inactive两个行为状态,可以相互转换。

       转移:transitions,定义系统中的逻辑信号流向(logic flow),从inactive→active。首次转换得到的状态由default transitions表示。

       同一时刻,只能有一个状态处于启动状态。Default transitions表示第一次启动状态。转移表示激活状态的不断转移。

事件(events)控制激活状态的转移,只有在事件发生后激活状态才回变为非激活状态,反之依然。

2 运行Stateflow

目标的行为取决于目标的状态和控制目标的状态变化。

用Stateflow来表示模型的控制部分:可以在MATLAB的命令窗口中输入Stateflow命令,也可以直接在Simulink中嵌入Stateflow模块。

状态工具——系统的状态就是系统运行的模态。单击状态工具,可以在图形编辑窗口绘制一个状态的示意模块,允许我们填写状态的名称和动作描述。当状态在active下就可以编写相应的执行程序,且在激活状态下可被执行。

通过迁移来改变Stateflow状态:为激活状态的变换提供路径。

状态迁移——在一个状态的边界单击,并拖动到另一个状态处释放,则可以绘制出从一个状态迁移到另外一个状态的连线。右击转移状态线,则会弹出一个窗口,其中空白迁移需要单击窗口坐标的空白迁移按钮来绘制。

通过事件来激活Stateflow:事件为模型中状态间的转化提供了驱动。事件可以在Stateflow中表示,图形中可通过事件触发器来查看事件。

Stateflow使用数据变量。

3 为目标生成C代码

对于Stateflow机有三个类型的目标:仿真目标(Simulation Targets)、Teal-Time Workshop目标和自定义目标(Custom Targets)。

仿真目标:在Stateflow中,其名称为sfun。当利用Stateflow仿真时,Stateflow为每一个Stateflow机产生一个S-函数(MEX文件),用来支持Stateflow的模型仿真。

Teal-Time Workshop目标:它从Simulink中模型的端口产生Stateflow代码,并可为实时运行Stateflow提供一个框架。名称为rtw。

Simulink仿真(5) - bingqingyujie..5 - ~bluestart~O(∩_∩)O

 

4 利用状态和迁移进行控制

创建一个on-off模型,有以下几步:

(1)创建一个带有Stateflow模块的Simulink模型:在MATLAB命令窗口输入sfnew命令,创建一个带有Stateflow模块的Simulink模型;改变标签Chart(单击修改)。

(2)保存Simulink模型(File->Save as)。

(3)打开Stateflow模块图表:双击Chart模块,弹出一个空白的Stateflow图表编辑窗口。进行图标编辑的Stateflow模块名出现在标题栏中;左边的工具栏是用来绘制组成Stateflow图表的不同图形目标,要特别注意状态工具State tool和默认转移工具Default Transition tool。

(4)在Stateflow图表中为Stateflow模块编写控制行为:在Stateflow图表窗口的左边单击绘制状态框的状态工具;在可编辑区绘制一个带圆角的矩形,在其中输入状态名。

在Stateflow图表中绘制迁移:将光标放在起始状态处,变成十字形光标时,按住左键拖动到终止状态处。还要添加空白转移图标:单击工具栏空白(Default)转移图标,将光标移动到绘图区需要的状态框边界上,松开鼠标即可。

为Stateflow图表添加一个触发事件:在Stateflow图表编辑窗口中,选择Add->Event->Input from Simulink菜单命令,弹出新事件的属性对话框;在Tigger下拉列表框中选择Either选项;单击OK按钮,改变和关闭属性对话框。

向Stateflow图表传递一个触发事件:向触发端口发送一个触发信号,信号的过零上升和下降,即可触发事件。

5 进行Stateflow图表仿真

以下图为例: 

Simulink仿真(5) - bingqingyujie..5 - ~bluestart~O(∩_∩)O

(1)定义模型仿真参数:

从Simulink窗口中选择Simulation->Configuration Patameters命令,打开Simulink模型仿真参数对话框;

在打开的对话框的Stop time文本框中,设置结束时间;

在Stateflow编辑窗口,选择Tools->Open Simulation Target菜单命令,弹出Stateflow Target Builder参数对话框;

单击Coder Options,确保选中Enable debugging/animation复选框,单击Ok;

返回Stateflow Target Builder参数对话框,单击Ok;

在Stateflow编辑窗口,选择Tools->Debug菜单命令;

在Animation选项组,确保Enabled单选按钮被选中,设置Delay(sec);

单击Close按钮,关闭Stateflow Debugging参数设置对话框。

(2)Stateflow图表仿真的基本步骤:

调整Simulink模型窗口和Stateflow图表窗口,以便同时观察;

单击Stateflow中的Simulation->start菜单命令,开始仿真。仿真之前,Stateflow临时设置模型为只读状态,避免在仿真过程中被修改;对Stateflow的错误进行剖析;在Stateflow进行仿真的时候,会在MATLAB命令窗口出现的相关信息。

在Stateflow图表仿真开始时,背景变暗,图表处于激活状态;

在Simulink窗口激活触发事件,如双击Manual Switch模块;

再次激活触发事件,得到触发信号。

单击Simulink中的stop按钮停止仿真,此时Stateflow又回到可编辑状态。

6 仿真过程中的调试

利用Stateflow Debugging工具来调试上图中的Controller Stateflow图表仿真,步骤如下:

在Stateflow图表编辑窗口中选择Tools->Debug菜单命令,弹出Stateflow Debugging窗口;

在Breakpoint选项组中选中Chart Switch复选框;

放好Stateflow Debugging窗口的位置,以便能够同时看到Stateflow Debugging窗口、Simulink模型窗口和Controller Stateflow图表窗口;

在Stateflow Debugging窗口中,单击Start按钮运行仿真;

单击Start按钮后,在Simulink窗口双击Manual Switch模块向Controller图表发送事件,在Stateflow Debugging窗口上端就会显示当前的信息,如Stopped、Executing、Current Event和Simulink Time等;

在Stateflow Debugging窗口中单击Step按钮,可以单步仿真;

仿真时可以利用Manual Switch和Step按钮进行调试;

当调试完成,可单击Stop Simulation按钮来结束仿真,此时模型变为可编辑状态;

在Stateflow Debugging窗口中单击Close按钮,关闭窗口。

7 Stateflow常用命令

sfnew——创建一个新的带有Stateflow模块的Simulink模型,使用“sfnew 模型名”可以直接以指定的文件名创建一个新的带有Stateflow模块的Simulink模型。

sfexit——关闭包含Stateflow的模型窗口,并关闭Stateflow编辑窗口。

sfsave——保存编辑的Stateflow模型。

sfprint——打印绘制的Stateflow模型。


0 0
原创粉丝点击