一、基础知识
Simulink是MATLAB的一个附加产品,用于模拟、生成和测试动态系统。Stateflow是Simulink的一个附加工具,它提供了一个图形化的编程环境,用于设计和模拟复杂系统的控制逻辑和状态机。Stateflow是设计复杂控制逻辑和状态机的强大工具,特别适用于需要精确控制和状态管理的系统,如汽车电子、航空航天和工业自动化等领域。
作用与优势:
-
状态机建模:Stateflow允许你创建状态机,这些状态机可以描述系统在不同状态下的行为。
-
层次化状态图:你可以创建层次化的状态图,这使得复杂的状态逻辑更加清晰和易于管理。
-
并行状态:Stateflow支持并行状态,这意味着你可以模拟同时发生的多个状态。
-
事件和转移:Stateflow允许你定义事件和状态之间的转移条件,这有助于模拟复杂的逻辑和条件。
-
代码生成:Stateflow支持代码生成,这意味着你可以从Stateflow图表生成C/C++代码,用于嵌入式系统开发。
二、光讲理论不讲实操就是耍流氓!
状态迁移图示意: 基于不同条件跳转至不同的状态!
以如下状态图为例,建立状态机
三、详细步骤
话不多说直接上手
打开matlab,打开simulink,建立空模型
在库浏览器输入stateflow,选择这个chart,也可以直接双击空白处,输入chart。
双击这个chart进去
选择一个状态,鼠标左键点击,会引出一条线,可以连接别的状态,这条线就是状态转移的条件,达到条件后,会从该状态转移至箭头所指的状态
自己完成余下操作,将三个状态互相的连接起来,如下图
点击你连的线,发现会有三个参数,我这里一 一给你解释
事件名称,或者是信号名称
判断条件,满足则跳转
动作,跳转后携带的动作或者是属性改变
直接在信号线上面输入条件,我举个很简单的例子,我这里设置为a>b
另外一种添加状态的动作:这里介绍一下,点击State里面,输入控制代码
entry:b=a;字面意思,进入,然后执行一次;那么如果想每个周期都执行一个动作呢?
那就用during:b=a;
这里关键字后面要有冒号:,冒号后面接动作,语句结束要加分号;
exit:字面意思,退出动作
以上都是为了教学基本操作,赋值都是乱来的,现在可以自己研究,创建条件以及执行语句。
当然啦,也可以继续跟着博主进行,这里为了方便运行,这里把状态条件以及执行动作都稍稍改动了一下,懒得换图片了,不会的跟着前面操作,一模一样的操作,改成这样。
现在,状态机画好了,但是有一个新的问题,我的a,b变量没有创建,现在回去创建一下这两个变量。
点击添加变量,把类型改成输入,因为我们要以外部的条件作为状态A的输入,这下懂了吧,好哥们儿们!
同样的方式,我们创建一个变量b,这里类型需要改一下
可以看出我么这个a作为输入,b作为输出的状态机就做好啦,自己可以双击这个chart改个名字。
现在我们接一个输入输出来源,输入选一个常数模块,输出连接一个示波器。直接点击运行!
双击示波器,检查一下图像!
这里仿真时间只有十秒,我们看不太出来明显的现象,我们把仿真时间设置为无穷大,让它一直跑起来!
这就是最简单的状态机,后续更多知识持续更新中!!!!
手把手教会!!!