找回密码
 注册
Simdroid-非首页
查看: 158|回复: 5

stateflow 的使用

[复制链接]
发表于 2007-8-22 14:32:51 | 显示全部楼层 |阅读模式 来自 黑龙江哈尔滨
我想用 stateflow 来作有限状态机方面的课题,请教高手应该看哪方面的资料
发表于 2010-7-5 15:10:47 | 显示全部楼层 来自 山东东营
Simdroid开发平台
stateflow是做什么的啊
回复 不支持

使用道具 举报

发表于 2010-7-5 16:42:37 | 显示全部楼层 来自 北京
本帖最后由 ljelly 于 2010-7-5 16:43 编辑
stateflow是做什么的啊
jingtu819 发表于 2010-7-5 15:10

自己搜索一下就知道了

  1. Stateflow是有限状态机(finite state machine)的图形工具,它可以用于解决复杂的逻辑问题,用户可以通过图形化工具实现在不同状态之间的转换。Stateflow可以直接嵌入到Simulink仿真模型中,并且在仿真的初始化阶段,SIMULINK会把Stateflow绘制的逻辑图形通过编译程序转换成C语言,使二者有机地结合在一起。 Stateflow可以在SIMULINK Extra模块库中找到。
  2.   Stateflow的仿真原理是有限状态机(finite state machine)理论,有限状态机是指系统含有可数的状态,在相应的状态事件发生时,系统会从当前状态转移到与之对应的状态。在有限状态机中实现状态的转移是有一定条件的,同时相互转换的状态都会有状态转移事件,这样就构成了状态转移图。在SIMULINK的仿真窗口中,允许用户建立有限个状态以及状态转移的条件与事件,从而绘制出有限状态机系统,这样就可以实现对系统的仿真。Stateflow的仿真框图一般都会嵌入到Simulink仿真模型中,同时实现状态转移的条件或是事件即可以取自Stateflow仿真框图,也可以来自Simulink仿真模型。
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-7-6 07:30:39 | 显示全部楼层 来自 安徽合肥
自带的help 讲得最详细了。
回复 不支持

使用道具 举报

发表于 2010-9-2 09:50:27 | 显示全部楼层 来自 黑龙江哈尔滨
stateflow就是用来作状态流图的,可以用它设计一些状态和
各个状态之间的转换条件,然后放在simulink中仿真。

    说了这么多,我的手痒起来了,还是动手做吧,^_^。
    一.打开simulink,新建一个model(保存为time.mdl),在simulink的左边找到state
flow并选中他,将右边的chart拖入新建的model中,双击这个chart,就出现了stateflow
的编辑器,先介绍一下这里面能画的东东(在左边的工具栏上)
    1.左边工具栏上第一个图标是方框似的东东,将它拖入编辑器中,就表示一个状态
(state),双击它就可以在其中写一些
命令,格式如下(%后面的是我自加的,方便解释):
name/                                   %此状态的名称
entry:entry action                      %刚转换到此状态时执行entry action
during:during action                    %在此状态之中时执行during action
exit:exit action                        %退出此状态时执行exit action
on event_name:on event_name action      %当某事件发生时执行on event_name action
    2.左边工具栏上第二个图标是一个圆中有个H的东东,它的名字叫做历史节点(Hist
ory Junction) ,可将他拖入一个状态框中(就是上面说的).一旦一个状态框中有这个历
史节点,在退出这个状态时会将这个状态的一些信息保存下来,当下次再进入此状态时,
此状态的初始状态就会是前面保存过的那些信息。
    3.左边工具栏上第三个图标是一个一根线指向一个方框的东东,叫默认转换(defau
lt transition),把他拖到一个状态的旁边,它就会指向一个状态,表示系统启动后将首
先进入这个状态。
    4.左边工具栏上第四个图标(他的样子太复杂了,不描述了,反正是最后一个,呵
呵)代表的东东,叫节点(Junction),它是方便画状态图的,当各个状态之间的转换
很复杂时,可以设立中间节点,将一些相同的转换指向它,然后再由它指向各个状态(
或另一个中间节点)
    5.还得介绍一下画转换线(transition),将鼠标放在一个状态的旁边,当它变成+形
状的时候,按下左键不动,就会拉出一条线来,当拉到另一个状态旁边时松开左键,这样
就画出了一条由一个状态指向另一个状态的转线,选中这条线,将鼠标停留在上面,鼠标
会变成一个I的样子,这时按下鼠标,就可以在上面写语句,例:switch(switch事件使状
态转换)或[output>maxtime](当此条件满足时进行状态的转变)。

    二.再介绍一下stateflow是怎样跟simulink通讯的,在stateflow编辑器中点tool菜
单下的explore,在左边支开time,选中chart,我们将在此添加一个事件和两个数据(计数
器所需要的)。
    1.点Add菜单下event,在右边就新产生了一行,将它的名字(name)改成switch,范围
(scope)改成input from simulink,触发器形式(Trigger)改成Rising(其实这儿无所谓)
,此时你看看time.mdl,是不是chart模块上方多了一个上升的标志,此时在time.mdl添
加一个pulse generator(在simulink\sources里面),将他的输出接到chart的上方,就
表示每当pulse generator产生的信号上升时,switch事件发生。
    2.再添加两个data,点Add菜单下data,在右边将他的名字改成output,scope改成out
put to simulink,此时time.mdl中chart就多出来一个输出端口,它就是要给simulink用
的,在这里output就是计数器的输出(我们的目标),可以接上一个scope或display看输出结
果(simulink/sinks下,怎么添加及连线就介绍了),再点add--data,将他的名字改成
maxtime,scope改成constant,将它的FrWs画上勾,表示他是一个常量,将在matlab的
workspace里设定,这里的含义就是计数器的最大值,当计数器的输出达到这个最大值时,
输出将自动清零,表示重新开始计数。添加完成后,就可关闭explore了。

    三.有了上述的准备,就可以在stateflow中画状态流图了,还是在stateflow编辑器
里,从左边的工具栏上拉出一个状态来(上面介绍过方法了),双击它,在其中写上
reset/                  %此状态的名称为reset
entry:output=0;         %当进入此状态时,将output赋值为0,表示将计数器输出清零
再拉入一个默认转换(Default transition,左边工具栏上第三个),拖到reset状态的旁
边,使它指向reset状态,这样就表示reset状态将是系统启动后第一个进入的状态。再
拉入一个状态,在其中写上
count/                %此状态的名称为count
entry:output++;       %当进入此状态时,output加1,表明计数器记一次数
此时再拖入一个节点(Junction,左边工具栏上第四个,其实可以不用,这儿是介绍一下他
的用法),然后画两条转换线(transition,上面介绍怎么画了),一条由reset状态指向这
个节点,一条由count状态指向这个节点,在这两条线都写上switch,表示一旦switch事件
发生,不管当前是哪个状态,都将转换到此节点上来(跟simulink联系来讲,就是当time.
mdl里的pulse generator的信号上升时,就将产生状态的转变)。然后再画两条转换线,
一条由这个节点指向reset状态,在线上写上[output>=maxtime],表示一旦output超过
最大值时,将进入到reset状态(将计数器清零),另一条线由这个节点指向count状态,在
线上写上[output<maxtime],表示output没有达到最大值时,还是进入count状态进行计数
。这样下来,整个状态图就设计完工了。

    四.嗯...,运行了,爽ing,^0^
    在time.mdl窗口下将simulation parameters(按ctrl+E就会出现,在simulation菜
单下)的stop time改成200(当然希望能多运行一下了,呵呵),然后在matlab的workspace
下打maxtime=10;设定计数器的最大值为10(这儿测试用,可以自己指定哦),然后运行,看
看结果吧,在scope或display可以看到。其是你双击chart,将你刚才画的状态流图打开,
此时再运行,可以看到状态是怎么转换的,呵呵,很形象,如果嫌他转换的太快,没来得
及看,那就在tool菜单下选debug,在breakpoint后面选上一些复选框,然后运行,可以实
现单步运行,慢慢的看到底是怎么转换的(不详细介绍了,写的累了,^_^)

    stateflow到底有没有用,或者有多大得用,还是留给大家一起评论吧。
    可以用help stateflow看看一些相关命令,用help sfdemos看看matlab自带的一些
例子

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-12-12 00:02:15 | 显示全部楼层 来自 辽宁沈阳
学习一下!!!!!!!!!!!!!!!!!!!!

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-5 05:23 , Processed in 0.053281 second(s), 20 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表