目录
1.Stateflow简介
2.Stateflow编辑
2.1 打开方式
2.2 状态
2.3 状态名称
2.4 迁移
2.4.1 迁移
2.4.2 默认迁移
2.4.3 迁移有效条件
3 数据与事件
3.1 数据
3.2 事件
4 示例
1.Stateflow简介
Stateflow对象可分为图形对象和非图形对象。
图形对象包括:状态、历史节点、迁移、默认迁移、连接节点、真值表、图形函数、Embedded Matlab函数、盒函数、Simulink函数;
非图形对象包括:事件、数据、目标。
Stateflow状态机使用一种基于容器的层次结构管理Stateflow对象,也就是说,一个Stateflow对象可以包含其他的Stateflow对象。
最高级的对象时Stateflow状态机,它包含了所有的Stateflow对象,因此也就包含了Simulink中的所有的Stateflow状态图及数据、事件、目标对象。
同样的,状态图包含了状态、盒函数、函数、数据、事件、迁移、节点与注释事件。我们可以使用这一系列对象建立一个Stateflow状态图。具体到一个状态,也可以包含上述的对象。
2.Stateflow编辑
2.1 打开方式
1.可直接通过SImulink库找到Stateflow;
2.Matlab行命令窗口输入sfnew,直接创建一个新的带有chart的模型;
3.Simulink模型中双击鼠标左键搜索chart;
2.2 状态
上述图形从上到下分别代表:
状态、节点、转移、框、simulink状态、simulink函数、图形函数、matlab函数、真值表、历史、退出、进入、注释、图像。
在Stateflow状态图的顶层或某一父状态下,可以并存有多个状态,它们之间的关系可分为互斥和并行。
互斥状态的矩形边框显示为实线,同一级的互斥状态,至多允许激活一个状态。如下图,状态A和B是互斥的,二者只能有一个状态处于激活状态;当状态A被激活,同样的其子状态A1和A2也只能有一个处于激活状态。
并行状态的矩形边框是虚线,同一级的并行状态,可在同一时刻被激活,如下图,状态A和B是并行关系,二者可以同时处于激活状态;子状态A1和A2也同时处于激活状态,而子状态B1和B2只能有一个被激活。
2.3 状态名称
如下表
特别注意:状态名是由字母、数字、下划线组成,若状态名后面跟随的是回车符,斜线是可有可无的。根据State的分层结构,同级的各个子状态不允许同名,但不同级的状态则不受限制。
可指定多个动作,每个动作之间以回车、分号、逗号区隔,动作类型关键词后必须跟随一个半角冒号。
2.4 迁移
2.4.1 迁移
Stateflow状态图使用一条单向箭头曲线表示迁移,将两个图形对象连接起来,大多数情况下,迁移是指系统从源状态向目标状态的转移。在迁移曲线上加上标签,可以指定系统在何种条件下从源状态向目标状态转移。
2.4.2 默认迁移
默认迁移是一种特殊的迁移形式,它没有源对象。用于指定同一级有多个互斥状态并存时,需要首先激活的状态。某些情况下,默认迁移也可以加入标签,限制其所指向目标状态的激活。
代表含义:
1.事件
指定迁移的触发事件。若另行指定触发条件,条件为真时,且发生该触发事件时,即发生迁移,是可选项,如果用户不指定触发事件,则任何事件都能够引发该事件。多个触发事件之间使用逻辑或运算符‘|’分隔。
2.条件
条件用布尔表达式,为真,一旦发生指定的触发事件,则发生迁移。条件表达式的前后必须使用方括号“[]”包围。
3.条件动作
当条件表达式为真时,立刻执行条件动作。若事先未指定条件,系统则假设条件为真,并执行该条件动作。
4.迁移动作
当迁移目标有效时,执行迁移动作。若迁移标签由多个字段组成,则当整个标签有效时,执行迁移动作。
2.4.3 迁移有效条件
对于非默认的迁移,当源对象处于激活状态的且迁移标签有效时,发生迁移;对于默认迁移,当其父状态被激活时,发生迁移。
下表列出了迁移标签的有效条件,用户可以根据需要,选择性地输入迁移标签的部分或全部字段。
3 数据与事件
3.1 数据
数据是非图形的对象,有一个很重要的特性:作用阈,用户在使用数据时必须明确定义该特性,根据作用域的不同,数据可分为以下几种:
(1)Stateflow状态图本地数据(Local)
(2)从外部simulink模块输入的数据(Input from Simulink)
(3)向外部simulink模块输入的数据(Output to Simulink)
(4)临时数据)
(5)定义在matlab工作空间的数据
(6)常数
(7)向simulink模型与stateflow状态图外部的目标(代码)导出的数据
(8)自simulink模型与stateflow状态图外部的源代码导入的数据
3.2 事件
事件也是非图形的对象,它驱动着整个stateflow状态图的运行。和数据一样,事件同样有它的作用域,根据作用域的不同,可分为以下几种:
(1)stateflow状态图本地事件
(2)自外部simulink模块输入的事件
(3)向外部simulink模块输出的事件
添加数据或事件的方法很简单,像创建变量一样,只需要改一下作用域就行。
或者使用菜单项Add和使用Model Explorer,建议使用后者。
matlab版本为2022a
事件的添加同样
路径:simulink-建模-
也可以对添加的变量在符号窗格进行更改其作用域
4 示例
光说不练假把戏
下面通过一个实例来加深理解。
汽车换挡实例
原理很简单,当车速达到某一值时,对应的档位发生变化,将车速信息返回到dispalce。
完整的模型图如下。
运行结果
当车速给25时,
D2出现高亮,说明逻辑等正确。
其他的可自行实验,可结合实际驾驶情况进行改变输入条件,例如进行R倒车,D的输入就为0等等。