Simulink Ststeflow教程 — 1 Stateflow概述

目录

1.1 Stateflow简介

1.2 Stateflow编辑

1.2.1 打开方式

1.2.2 状态

1.2.3 迁移

1.3 数据与事件

1.3.1 数据

1.3.2 事件


1.1 Stateflow简介

Stateflow 作为集成于 Simulink 的图形化设计与开发工具,主要针对控制系统里的复杂控制逻辑展开建模与仿真工作,尤其适用于对事件响应系统(Reactive System)进行建模与仿真。

事件响应系统对应的是动态变换系统(Dynamic Transformational System) 。动态变换系统一般能够通过数学表达式、方程等构建的输入 / 输出关系加以描述,对于此类系统,运用 Simulink 进行建模最为便捷。而事件响应系统通常借助自然语言或逻辑表达式来描述,这种情况下就需要 Stateflow 来实现建模。Stateflow 凭借其可视化模型与直观的仿真能力,可清晰、简洁地展现复杂动态逻辑关系。Stateflow 以有限状态机理论为基础,通过创建状态图、流程图,对事件驱动系统实施建模与仿真。

事件驱动系统广泛存在于诸多领域,像电话系统、汽车控制系统、通信网络、计算机操作系统、航空电子系统以及人机交互界面等都有其身影。基于此,Stateflow 具备以下主要功能:

  • 控制对象建模:Stateflow 的核心用途之一是协同 Simulink 对控制系统进行建模与仿真。例如在对汽车发动机建模时,需对发动机风冷系统建模,此时可利用 Stateflow 构建发动机温度监控模型,模拟激活风扇、水泵等制冷设备的动态流程。
  • 状态逻辑切换:在对复杂逻辑系统建模时,常需建立各子系统间的关联关系。以 Simulink 创建复杂逻辑控制 / 切换模型为例,可运用 Stateflow 实现其中的逻辑控制与约束,依据系统运行仿真过程中生成的各类数据,在不同工况间切换,模拟实际工作情形。
  • 复杂逻辑的可视化开发:Stateflow 支持可视化编程,可针对复杂逻辑,如 If-Else 结构、循环结构等开展可视化开发工作。
  • 嵌入式系统应用:在航空电子设备、车辆设备、电信设备(如路由算法)、通信系统(如计算机外设)以及可编程逻辑控制器(PLC)等嵌入式系统领域有广泛应用。
  • 人机界面(MMI:主要应用于图形化用户界面(GUI)方面。

Stateflow 对象分为图形对象和非图形对象两类:

  • 图形对象:涵盖状态、历史节点、迁移、默认迁移、连接节点、真值表、图形函数、Embedded Matlab 函数、盒函数、Simulink 函数。
  • 非图形对象:包含事件、数据、目标。

Stateflow 状态机采用基于容器的层次结构来管理 Stateflow 对象。也就是说,一个 Stateflow 对象能够容纳其他 Stateflow 对象。其中,最高层级的对象是 Stateflow 状态机,它囊括了所有的 Stateflow 对象,进而涵盖了 Simulink 中所有的 Stateflow 状态图以及数据、事件、目标对象。同样,状态图包含状态、盒函数、函数、数据、事件、迁移、节点与注释事件,可利用这一系列对象构建 Stateflow 状态图。具体到某个状态,也可包含上述各类对象 。

1.2 Stateflow编辑

1.2.1 打开方式

(1)可直接通过SImulink库找到Stateflow; 

(2)Matlab行命令窗口输入sfnew,直接创建一个新的带有chart的模型;

(3)Simulink模型中双击鼠标左键搜索chart;

Stateflow工具箱中的Chat模块是使用最广泛的模块,使用Chart模块进行软件逻辑的实现时,有两种方式:流程图(Flow Chart)和状态机(State Machine)。

1.2.2 状态

点击进入到Chart模型,左侧状态栏从上到下分别代表:状态、节点、转移、框、simulink状态、simulink函数、图形函数、matlab函数、真值表、历史、退出、进入、注释、图像。

在Stateflow状态图的顶层或某一父状态下,可以并存有多个状态,它们之间的关系可分为互斥和并行。

互斥状态:的矩形边框显示为实线,同一级的互斥状态,至多允许激活一个状态。如下图,state1和state2是互斥的,二者只能有一个状态处于激活状态;

并行状态:矩形边框是虚线,同一级的并行状态,可在同一时刻被激活,如下图,state1和state2是并行关系,二者可以同时处于激活状态。

状态名是由字母、数字、下划线组成,若状态名后面跟随的是回车符,斜线是可有可无的。根据State的分层结构,同级的各个子状态不允许同名,但不同级的状态则不受限制。可指定多个动作,每个动作之间以回车、分号、逗号区隔,动作类型关键词后必须跟随一个半角冒号。

动作类型

缩写

说明

entry

en

进入当前状态时的动作

during

du

处于当前状态,并且某事件发生时的动作

exit

ex

离开当前状态时的动作

bind

约束一个事件或数据,使得仅当前状态及其子状态有权限广播该事件或修改该数据

on event_name

当前状态接收 1 次广播事件时的动作

on after(n, event_name)

当前状态完整接收 n 次广播事件后的动作

on before(n, event_name)

当前状态完整接收 n 次广播事件前的动作

on at(n, event_name)

当前状态完整接收 n 次广播事件时的动作

on every(n, event_name)

当前状态每接收 n 次广播事件时的动作

1.2.3 迁移

Stateflow状态图使用一条单向箭头曲线表示迁移,将两个图形对象连接起来,大多数情况下,迁移是指系统从源状态向目标状态的转移。在迁移曲线上加上标签,可以指定系统在何种条件下从源状态向目标状态转移。

Stateflow 中迁移的表示形式为event[condition] {condition_action}/transition action。其中 “event” 表示引发迁移的事件;“[condition]” 代表迁移发生的条件,是一个布尔表达式;“{condition_action}” 是当条件为真时执行的动作;“/transition_action” 是发生迁移即进入目标状态前所执行的动作。

1.3 数据与事件

1.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状态图外部的源代码导入的数据

1.3.2 事件

事件也是非图形的对象,它驱动着整个stateflow状态图的运行。和数据一样,事件同样有它的作用域,根据作用域的不同,可分为以下几种:

(1)stateflow状态图本地事件

(2)自外部simulink模块输入的事件

(3)向外部simulink模块输出的事件

添加数据或事件的方法很简单,像创建变量一样,只需要改一下作用域就行。或者使用菜单项Add和使用Model Explorer,建议使用后者。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

几度春风里

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

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

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

打赏作者

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

抵扣说明:

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

余额充值