Stateflow入门教程
- 格式:ppt
- 大小:3.47 MB
- 文档页数:68
matlab的stateflow(状态流)简单应用--做一个计数器收藏精华区里只有关于stateflow的英文介绍,再加上前几天有网友问我怎么用它,我就拿我以前用stateflow做的计数器来简单介绍一下stateflow的用法,希望能够抛砖引玉。
先介绍一下stateflow,从matlab的help中翻译过来的,stateflow要与simulink一起使用,他是一个用来在控制和管理中设计和开发逻辑图的工具(翻的不好,请大家见谅)。
从我的理解来说,stateflow就是用来作状态流图的,可以用它设计一些状态和各个状态之间的转换条件,然后放在simulink中仿真。
说了这么多,我的手痒起来了,还是动手做吧,^_^。
一.打开simulink,新建一个model(保存为time.mdl),在simulink的左边找到stateflow并选中他,将右边的chart拖入新建的model中,双击这个chart,就出现了stateflow的编辑器,先介绍一下这里面能画的东东(在左边的工具栏上)1.左边工具栏上第一个图标是方框似的东东,将它拖入编辑器中,就表示一个状态(state),双击它就可以在其中写一些命令,格式如下(%后面的是我自加的,方便解释):name/ %此状态的名称entry:entry action %刚转换到此状态时执行entry actionduring:during action %在此状态之中时执行during actionexit:exit action %退出此状态时执行exit actionon event_name:on event_name action %当某事件发生时执行on event_name action2.左边工具栏上第二个图标是一个圆中有个H的东东,它的名字叫做历史节点(History Junction) ,可将他拖入一个状态框中(就是上面说的那个),一旦一个状态框中有这个历史节点,在退出这个状态时会将这个状态的一些信息保存下来,当下次再进入此状态时,此状态的初始状态就会是前面保存过的那些信息。
第十二章 利用状态流Stateflow进行控制系统状态转换Statefolw是一种图形化的设计开发工具,是有限状态机的图形实现工具,有人称之为状态流。
主要用于simulink中控制和检测逻辑关系的。
用户可以在进行Simulink仿真时,使用这种图形化的工具实现各个状态之间的转换,解决复杂的监控逻辑问题。
它和Simulink同时使用使得Simulink更具有事件驱动控制能力。
利用状态流可以做以下事情:1)基于有限状态机理论的相对复杂系统进行图形化建模和仿真;2)设计开发确定的、检测的控制系统;3)更容易在设计的不同阶段修改设计、评估结果和验证系统的性能;4)自动直接地从设计中产生整数、浮点和定点代码(需要状态流编码器);5)更好地结合利用Matlab和Simulink的环境对系统进行建模、仿真和分析。
在状态流图中利用状态机原理、流图概念和状态转化图,状态流能够对复杂系统的行为进行清晰、简洁的描述。
Stateflow生成的监控逻辑可以直接嵌入到Simulink模型下,两者之间能够实现无缝连接。
仿真初始化时,Simulink会自动启动编译程序,将Stateflow绘制的逻辑框图转换成C格式的S-函数(Mex-文件),产生的代码就是仿真目标,且在状态流内称作Sfun目标,这样在仿真过程中直接调用相应的动态连接库文件,将二者组成一个仿真整体。
Sfun目标只能与Simulink一起使用。
在产生代码前,如果还没有建立名为sfprj子目录,状态流会在Matlab的当前目录下产生一个sfprj子目录。
状态流在产生代码的过程中使用sfprj子目录存贮产生的文件。
12.1 有限状态机简介Stateflow的仿真原理是有限状态机(finite state machine,简称FSM)理论。
为了更快地掌握Stateflow 的使用方法,用户有必要先了解FSM的一些基本知识。
所谓有限状态机是指系统中存在可数的状态,在某些事件发生时,系统从一个状态转换成另一个状态,故有限状态机又称为事件驱动的系统。
wstateflow总结与分析(我是用的是matlab2009b,也就是matlab7.9版本)一、什么是stateflow(后面简称sf)sf集成于simulink中,是针对控制系统的复杂逻辑进行建模与仿真。
在matlab command window(后面简称cw)输入sfnew就可以打开。
如下图:此时打开的是simulink模型,stateflow还需要双击chart图标,以打开集成于simulink的sf。
打开之后,我已经创建了一个模型,表示声音控制灯的开与关。
假设灯原来打开,来一次声音,灯打开(从左向右);再来一次声音,灯关闭(从右向左);。
一直循环。
这是最简单的sf控制模型,当有多个逻辑控制的时候,可以构成很复杂的系统。
附打开的另外两个方法:①,打开simulink,然后,找到sf模块②,在cw中输入stateflow,得到下图。
便可以打开。
二、简单介绍编辑状态图状态图是sf中最基本的。
如下所示。
拖动下来以后,可以得到一个状态,上图中的开灯与关灯就是两个状态图,它们表征系统所术语的一个状态。
状态动作:keyword:state actions名称与注释,大家都应该知道。
关于状态动作,表示表示在着一种状态下,内部的执行命令。
假如,每开一次灯,计数一次;灯开着的时候,自动控制空调降温;当灯关闭的时候,关闭所有的家用电器。
那么,就如下图:这个时候,就完成了开灯时候我们需要做的工作。
这儿,为了表示简单,我用中文解释,实际上都需要使用数学表达式。
连接节点以及转移其实,就是复杂了上面的图像。
节点以及转移如下图,假设声音很大,关灯;声音很小,开电视。
便需要节点。
而转移在任何地方一般都需要,且自己拖动就可以了(比较智能)。
转移标签(重要)转移标签就是转移需要使用的条件以及状态。
事件表示只有事件发生才有可能条件转移;条件表示事件中的条件发生才有可能转移;条件动作表示条件满足时候就执行的动作;转移动作在整个通道都有效猜执行。
stateflow语法摘要:一、Stateflow 简介1.Stateflow 的定义2.Stateflow 的基本元素二、Stateflow 语法详解1.状态定义2.状态转移3.事件4.条件5.初始化6.操作三、Stateflow 应用实例1.设计一个简单的计数器2.设计一个复杂的状态机四、Stateflow 与其他工具的结合1.Stateflow 与Simulink 的结合2.Stateflow 与MATLAB 的结合五、Stateflow 的高级功能1.并发状态2.层次化状态结构3.状态压缩4.符号执行正文:Stateflow 是一种基于图形化界面的MATLAB 函数,用于描述和仿真复杂的状态机和动态系统。
它可以帮助用户创建和编辑图表,以可视化状态转移、事件、条件和操作。
Stateflow 可以与其他MATLAB 工具箱结合使用,如Simulink 和Symbolic Math Toolbox,以实现更高级的功能。
一、Stateflow 简介Stateflow 是一种用于描述和仿真复杂状态机和动态系统的图形化界面。
用户可以通过拖放组件来创建和编辑Stateflow 图表,这些组件包括状态、事件、条件和操作等。
Stateflow 是基于MATLAB 的,因此可以使用MATLAB 的丰富函数库来处理数据和实现复杂算法。
二、Stateflow 语法详解1.状态定义在Stateflow 中,状态是一个核心概念。
状态定义了一个特定时刻系统的状态。
状态可以是离散的(如0 或1)或连续的(如在某个范围内的值)。
2.状态转移状态转移描述了系统从一个状态转移到另一个状态的过程。
状态转移可以是确定的(根据当前状态和事件确定下一个状态)或随机的(根据概率分布选择下一个状态)。
3.事件事件是Stateflow 中的触发器,它可以在特定条件下触发状态转移或执行操作。
事件可以是外部输入(如传感器读数)或内部生成的(如计时器超时)。
Stateflow工作窗口介绍:创建框图之后,可以将其锁定,具体做法是:1. 选择Edit菜单下的Chart Properties选项打开Chart属性对话框2. 在Editor域里面选择Locked选项。
在matlab窗口中输入sfnew,则出现了带chart的simulink工作界面Inf代表无穷大两个chart的并行状态的设置:在Stateflow的空白处,右击鼠标,选择Decomposition-parallel (AND)此时两个状态的边框将变成虚线,并出现边框状态(state):双击它就可以在其中写一些命令,格式如下(%后面的是我自加的,方便解释): name/ %此状态的名称entry:entry action %刚转换到此状态时执行entry actionduring:during action %在此状态之中时执行during actionexit:exit action %退出此状态时执行exit action(可以是事件触发)注意StateFlow 同层次的图执行顺序是从上到下,从左到右的优先级原则,during和on事件的执行顺序由他们在状态图中的位置决定,先写的先执行on event_name:on event_name action %当某事件发生时执行on event_name action历史节点(History Junction):一旦一个状态框中有这个历史节点,在退出这个状态时会将这个状态的一些信息保存下来,当下次再进入此状态时,此状态的初始状态就会是前面保存过的那些信息。
默认转换(default transition):把他拖到一个状态的旁边,它就会指向一个状态,表示系统启动后将首先进入这个状态。
节点(Junction):它是方便画状态图的,当各个状态之间的转换很复杂时,可以设立中间节点,将一些相同的转换指向它,然后再由它指向各个状态(或另一个中间节点)转换线(transition):将鼠标放在一个状态的旁边,当它变成+形状的时候,按下左键不动,就会拉出一条线来,当拉到另一个状态旁边时松开左键,这样就画出了一条由一个状态指向另一个状态的转换线,选中这条线,将鼠标停留在上面,鼠标会变成一个I的样子,这时按下鼠标,就可以在上面写语句,例:switch(switch事件使状态转换)或[output>maxtime](当此条件满足时进行状态的转变)。
一个经典的stateflow入门例子及总结.pdfwstateflow总结与分析(我是用的是matlab2009b,也就是matlab7.9版本)一、什么是stateflow(后面简称sf)sf集成于simulink中,是针对控制系统的复杂逻辑进行建模与仿真。
在matlabcommand window(后面简称cw)输入sfnew就可以打开。
如下图:此时打开的是simulink模型,stateflow还需要双击chart图标,以打开集成于simulink的sf。
打开之后,我已经创建了一个模型,表示声音控制灯的开与关。
假设灯原来打开,来一次声音,灯打开(从左向右);再来一次声音,灯关闭(从右向左);。
一直循环。
这是最简单的sf控制模型,当有多个逻辑控制的时候,可以构成很复杂的系统。
附打开的另外两个方法:①,打开simulink,然后,找到sf模块②,在cw中输入stateflow,得到下图。
便可以打开。
二、简单介绍编辑状态图状态图是sf中最基本的。
如下所示。
拖动下来以后,可以得到一个状态,上图中的开灯与关灯就是两个状态图,它们表征系统所术语的一个状态。
状态动作:keyword:state actions名称与注释,大家都应该知道。
关于状态动作,表示表示在着一种状态下,内部的执行命令。
假如,每开一次灯,计数一次;灯开着的时候,自动控制空调降温;当灯关闭的时候,关闭所有的家用电器。
那么,就如下图:这个时候,就完成了开灯时候我们需要做的工作。
这儿,为了表示简单,我用中文解释,实际上都需要使用数学表达式。
连接节点以及转移其实,就是复杂了上面的图像。
节点以及转移如下图,假设声音很大,关灯;声音很小,开电视。
便需要节点。
而转移在任何地方一般都需要,且自己拖动就可以了(比较智能)。
转移标签(重要)转移标签就是转移需要使用的条件以及状态。
事件表示只有事件发生才有可能条件转移;条件表示事件中的条件发生才有可能转移;条件动作表示条件满足时候就执行的动作;转移动作在整个通道都有效猜执行。
StateFlow使⽤教程基本理论应⽤模式:(1)使⽤if-else逻辑判断(2)使⽤两个或者三个等的状态转换;三个状态的话,注意是否每个状态都能切换到另两个状态。
⽐如下⾯第⼀个例⼦中当switch_on为0的时候在on状态和standby 状态都切换到off状态。
(3)StateFlow⾥⾯的参数为全局变量,可以多个状态中⽤。
如:调⽤函数,并⾏的两个状态模块,⼀个状态机中变量来控制另⼀个状态模块中的切换条件。
(4)分层1)下图中,左边和右边是同时并⾏(and模式)的两个chart,并⾏后边框编程虚线;2)每⼀层都需要有⼀个缺省转移的状态(默认状态),⽤箭头指向该状态。
(5)during和entryentry使⽤如下图中,当前状态为⿊⾊画框的,但是根据默认的状态原因,输出⼒矩分别为20(图中未显⽰),200(LowSlipRate中的entry),80(LowSlipRate1中的entry),70(LowSlipRate1中的during)During使⽤下图中,Torqueff值进⼊LowSlipRate1状态时为80,然后每个采样时间递减10.采样周期为1.例⼦(进⼊⼀个状态后,下⼀次还进⼊这个状态)在on模块,直接switchon==0就回到off状态;On模块进⼊T>160时候,就要,先关闭device,然后开风扇降温到T<65,才回到off状态。
Stateflow函数:T<65;65去掉红⾊框中的条件时,温度⾼了只能先让风扇降温到低温下才能彻底把风扇和device关掉。
三个档位的风扇(三个状态的转换)三个状态都能转换到另外两个状态;在上⾯的func_fanMode函数中,确定风扇的关0、中0.75、⾼1强度。
⾼模式和中模式频繁切换;实例:红绿灯三个状态的转变三个输出在三个状态机中,输出应该为全局变量;所以输出状态要么在不同状态机中修改,要么在⼀个状态机中进⼊和出去的时候更改。
Stateflow Stateflow工作窗口介绍工作窗口介绍工作窗口介绍::创建框图之后,可以将其锁定,具体做法是:1. 选择Edit 菜单下的Chart Properties 选项打开Chart 属性对话框2. 在Editor 域里面选择Locked 选项。
在matlab 窗口中输入sfnew ,则出现了带chart 的simulink 工作界面Inf 代表无穷大两个chart 的并行状态的设置:在Stateflow 的空白处,右击鼠标,选择Decomposition-parallel (AND )此时两个状态的边框将变成虚线,并出现边框状态(state ):双击它就可以在其中写一些命令,格式如下(%后面的是我自加的,方便解释): name/ %此状态的名称entry:entry action %刚转换到此状态时执行entry actionduring:during action %在此状态之中时执行during actionexit:exit action %退出此状态时执行exit action(可以是事件触发)注意 StateFlow 同层次的图执行顺序是从上到下,从左到右的优先级原则,during 和on 事件的执行顺序由他们在状态图中的位置决定,先写的先执行on event_name:on event_name action %当某事件发生时执行on event_name action历史节点(History Junction ):一旦一个状态框中有这个历史节点,在退出这个状态时会将这个状态的一些信息保存下来,当下次再进入此状态时,此状态的初始状态就会是前面保存过的那些信息。
默认转换(default transition ):把他拖到一个状态的旁边,它就会指向一个状态,表示系统启动后将首先进入这个状态。
节点(Junction ):它是方便画状态图的,当各个状态之间的转换很复杂时,可以设立中间节点,将一些相同的转换指向它,然后再由它指向各个状态(或另一个中间节点)转换线(transition ):将鼠标放在一个状态的旁边,当它变成+形状的时候,按下左键不动,就会拉出一条线来,当拉到另一个状态旁边时松开左键,这样就画出了一条由一个状态指向另一个状态的转换线,选中这条线,将鼠标停留在上面,鼠标会变成一个I 的样子,这时按下鼠标,就可以在上面写语句,例:switch(switch 事件使状态转换)或[output>maxtime](当此条件满足时进行状态的转变)。