您的位置:首页 > 其它

Simulink-Stateflow学习——计数器的搭建和stateflow工作过程

2018-03-26 15:14 2991 查看
        Stateflow 是一个基于有限状态机和流程图来构建组合和时序逻辑决策模型并进行仿真的环境。它可以将图形表示和表格表示(包括状态转换图、流程图、状态转换表和真值表)结合在一起,针对系统对事件、基于时间的条件以及外部输入信号的反应方式进行建模。        Stateflow 可用于设计有关监控、任务调度以及故障管理应用程序的逻辑。Stateflow 包括状态图动画及静态和运行时检查,可以在实施前测试设计的一致性和完整性。        Stateflow可以直接嵌入到Simulink模型中,并且在仿真的初始化阶段,Simulink会把Stateflow绘制的逻辑图形通过编译程序转换成C语言,使二者有机地结合在一起。 Stateflow可以在Simulink Extra模块库中找到。

下面是一个简单易学的stateflow实例:
题目:在simulink中搭建一个简单的stateflow,实现在输入的上升沿进行计数,然后输出。



[align=left]    如上图是搭建的stateflow,输入为周期为1的脉冲信号,设定最大值maxtime为18。仿真时间为10s,由于只在上升沿触发,故最后结果只有9。
[/align][align=left]    下图为stateflow的内部:[/align]


    输出结果为:

    下面详细讲解stateflow内部工作的过程:        首先讲解stateflow内部的工作过程。stateflow的内部有两个state,reset和count。当chart模块在第一个上升沿的条件下(注意是1s位置的上升沿,0s时没有上升沿)触发时,chart内部会首先进入到reset状态。此时output=0。state进入节点,节点在sitch,即上升沿触发时,两个state都可以传送至节点,而节点传输至哪个状态,则由输出转换线生的条件决定。由于maxtime设定为18,所以后面再2s,3s……一直到10s计数才达到9,不会进入reset。    哈哈,在刚才继续写的时候突然发现我之前如果调整仿真时间远远大于10s,也就是让计数可以达到18,突然想到为什么结果不是18呢?如下图:


        然后才突然意识到output>maxtime出现了问题。。。


    然后我把output>maxtime改成output>=maxtime,出来的结果就符合预期了!666



注:stateflow的详细搭建过程可参考博客:http://blog.renren.com/share/407154693/16355969210/1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: