Stateflow状态图

目录

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等等。

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

warries

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值