01--Simulink/Stateflow概述
Stateflow是集成于Simulink中的图形化设计与开发工具,主要 用于针对控制系统中的复杂控制逻辑进行建模与仿真,或者说, Stateflow适用于针对事件响应系统进行建模与仿真。 Stateflow必须与Simulink联合使用!
Stateflow可以完成MATLAB/Simulink绝大多数工作,主要应用:
1.控制对象建模
2.状态逻辑切换
3.复杂逻辑的可视化开发(流程图)
4.嵌入式系统应用
5.复杂系统
02--基本的Stateflow创建和编辑介绍
Stateflow模型的创建就是包含了Stateflow模块的Simulink模型。 Stateflow模型的创建有三种方式:
1.状态的标签组成:状态名称、注释和状态动作
2.转移标签组成:事件、条件、条件动作和转移动作
3.节点
4.各种函数:Simulink函数,流程图函数,matlab函数
03--状态图的仿真
状态图又被称为“状态转移图”,一旦处于活动状态,则会一直维持这 个状态,直到状态转移或者仿真结束。
例:声控灯的状态一般就是开闭两种,状态图对声控灯二元状态进行仿 真。
1.基于条件输入的模型 状态动作:entry:当事件发生时,状态被激活时执行的动作 exit:当事件发生时,状态退出时执行的动作 during:当事件发生时,状态保持时执行的动作
2.基于事件触发的模型 状态图从非活动状态到活动状态以及状态之间的切换,都要由事件 触发。即,在事件的驱动下状态图才能仿真进行。 当在某个步长内完成了必要的工作后,状态图简单地进入到一种暂 时挂起的状态,等待下一次触发事件的到来。在两次触发事件之间,状 态图实际上一直处于活动状态。两个连续触发之间将保持之前的状态。
例:白炽灯的状态一般就是开闭两种,也是生活中比较常见的事件响应 事物。搭建状态图对声控灯二元状态进行仿真。
04--流程图
在Stateflow中,流程图是一种比较特殊的应用。流程图中不包含任何状态, 它仅由连接节点和转移组成。
由于流程图中没有任何状态,因此不具备任何记忆元件(状态是记忆元 件)。
在一次更新中,流程图从检测其默认转移开始,到检测完每一条有效的 通路且到达不具备有效出口的转移为止,在连接的两次触发之间,一直处于非 活动的状态。
1.选择结构
①if(条件){动作}
②if(条件){动作A}else{动作B}
③if(条件1){动作A}elseif (条件2){动作B}else{动作C}
④if(条件1){动作A if(条件2){动作B}}
2.循环结构
①for循环
②while(condition)do(Action)结构
③do – while结构
05--层次化建模
动作执行的顺序 在转移过程中动作执行顺序如下: 1、可转移时的条件动作; 2、状态1的退出动作; 3、转移标签上的转移动作; 4、状态2的进入动作。 在一个程序中,会有很多状态动作和转移动作,那么对于复杂程序而言,先要执 行什么动作,后执行什么动作呢
在转移过程中动作执行顺序如下:
1、可转移时的条件动作; 2、状态1的退出动作; 3、转移标签上的转移动作; 4、状态2的进入动作。
某些应用场景中,可能会重复使用某一程序模块。为了简化程序,通 常将这种被重复使用的模块作为函数进行调用。
MATLAB软件自带了很多应用工具的demo,其中包括了大量的 Stateflow的应用案例。 在MATLAB命令窗口输入“demo”进去案例库,找到Stateflow,点击 进去,选择适合的案例研究
06--Tips:
1.状态的外部自迁移和内部自迁移的区别
外部自转移
内部自转移
V_flag作为输出观测
发现:
内部自转移会判断du条件n=n+1
外部自转移会判断en条件n=n-1
2.事件event和Simulink的条件触发的区别
可以通过在状态内添加自增或自检去判断以上的区别