matlab stateflow教程

上传人:suns****4568 文档编号:89394904 上传时间:2019-05-24 格式:PDF 页数:51 大小:2.08MB
返回 下载 相关 举报
matlab stateflow教程_第1页
第1页 / 共51页
matlab stateflow教程_第2页
第2页 / 共51页
matlab stateflow教程_第3页
第3页 / 共51页
matlab stateflow教程_第4页
第4页 / 共51页
matlab stateflow教程_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《matlab stateflow教程》由会员分享,可在线阅读,更多相关《matlab stateflow教程(51页珍藏版)》请在金锄头文库上搜索。

1、 164 第十二章 利用状态流 Stateflow 进行控制系统状态转换 第十二章 利用状态流 Stateflow 进行控制系统状态转换 Statefolw 是一种图形化的设计开发工具,是有限状态机的图形实现工具,有人称之为状态流。主 要用于 simulink 中控制和检测逻辑关系的。用户可以在进行 Simulink 仿真时,使用这种图形化的工 具实现各个状态之间的转换,解决复杂的监控逻辑问题。它和 Simulink 同时使用使得 Simulink 更具 有事件驱动控制能力。利用状态流可以做以下事情: 1) 基于有限状态机理论的相对复杂系统进行图形化建模和仿真; 2) 设计开发确定的、检测的控

2、制系统; 3) 更容易在设计的不同阶段修改设计、评估结果和验证系统的性能; 4) 自动直接地从设计中产生整数、浮点和定点代码(需要状态流编码器) ; 5) 更好地结合利用 Matlab 和 Simulink 的环境对系统进行建模、仿真和分析。 在状态流图中利用状态机原理、流图概念和状态转化图,状态流能够对复杂系统的行为进行清晰、 简洁的描述。 Stateflow 生成的监控逻辑可以直接嵌入到 Simulink 模型下,两者之间能够实现无缝连接。仿真初始 化时,Simulink 会自动启动编译程序,将 Stateflow 绘制的逻辑框图转换成 C 格式的 S函数(Mex文 件) ,产生的代码就是

3、仿真目标,且在状态流内称作 Sfun 目标,这样在仿真过程中直接调用相应的动态连 接库文件,将二者组成一个仿真整体。Sfun 目标只能与 Simulink 一起使用。在产生代码前,如果还没有 建立名为 sfprj 子目录,状态流会在 Matlab 的当前目录下产生一个 sfprj 子目录。状态流在产生代码的过 程中使用 sfprj 子目录存贮产生的文件。 12.1 有限状态机简介 Stateflow 的仿真原理是有限状态机 (finite state machine, 简称 FSM) 理论。 为了更快地掌握 Stateflow 的使用方法,用户有必要先了解 FSM 的一些基本知识。 所谓有限状

4、态机是指系统中存在可数的状态,在某些事件发生时,系统从一个状态转换成另一个状 态,故有限状态机又称为事件驱动的系统。在有限状态机的描述中,可以设计出由一种状态转换至另一 种状态的条件,并将每对可转换的状态均设计出状态迁移的事件,从而构造出状态迁移图。 Simulink/Stateflow 为用户提供了图形界面支持 的设计有限状态机的方法。它允许用户建立有限的 状态,用图形的形式绘制出状态迁移的条件,并使 用其规定的命令设计状态迁移执行的任务,从而构 造出整个有限状态机系统。 在 Stateflow 中,状态和状态转换是最基本的元 素,有限状态机的示意图如图 12.1 所示。 图 12.1 中有

5、三个(有限个)状态,这几个状态的转 换是有条件的, 其中有些状态之间是相互转换的, A 状态是自行转换的。在有限状态机系统中,还表明 了状态迁移的条件或事件。 Stateflow 模型一般是嵌在 Simulink 模型下运行 的,Stateflow 是事件驱动的,这些事件可以来自同 一个 Stateflow 图中,也可以来自 Simulink。 12.2 Stateflow 应用基础 图 12.1 有限状态机示意图 165 在 MATLAB 命令窗口键入 stateflow 命令,将打开如图 12.2.1 所示的界面。其中,sflib 窗口中有许多 Simulink 给用户提供的仿真算例。 如

6、果用户在 MATLAB 命令窗 口键入 sfnew 命令,将打开嵌入 Stateflow 模块 Charts 的 Simulink 窗 口 untitled*。如图 12.2(b)所示。其 中 Charts 是空白的 Stateflow 模块图 标。 双 击untitled* 窗 口 中 的 Stateflow 模块打开如图 12.3 所示的 Stateflow 编辑界面,用户可以在此 窗口中编辑所需的 Stateflow 模型。 Stateflow 提供了强大的图形编辑功 能,用户可以使用它描述很复杂的 逻辑关系式。 Stateflow 编辑界面中点击鼠标 右键,可以看到图 12.4(a)所

7、示的快 捷菜单,选择其中的 Properties(属 性)菜单,可以打开图 12.4(b)所 示的对话框,用户可以在此对话框 中设置整个 Stateflow 模型的属性。 用户可以利用 Stateflow 编辑界 面左侧的个编辑工具绘制 Stateflow 图形,下面介绍常用的编辑工具。 1、 状态工具 系统的状态是指系统运行的模 态。在 Stateflow 下,状态有两种行 为:活动的(active)和非活动的 (inactive) 。 单击状态工具按钮并拖 动到编辑界面的空白处,即可绘制 出一个状态的示意模块。用户可以 在该模块右上角的问号位置填写状 态的名称及动作描述, 如标记为 On,

8、 本例中状态的动作描述为 entry: speed = 1, 将 speed 的值赋为 1。 (事 实上,状态动作有很多种,不止 entry 一种,为了使读者先掌握状态流的一般知识,复杂的状态流的状态 动作类型及其应用我们在随后的部分再来阐述。 )激活 On 模块,使用热键 CtrlC 和 CtrlV 或使用 edit 菜单下的复制及粘贴命令, 即可再复制一个同样的模块, 将复制的模块标记改为 Off, 动作描述改为 entry: speed = 0。使用该工具,可以绘制出所有需要的状态,如图 12.5 所示。 如果右击建立的状态图标, 并选择快捷菜单中的 Properties 菜单项, 可打

9、开图 12.6 所示的设置状态属 性的对话框。用户也可以在 Label 栏填写状态的名称和动作描述。 图 12.2(a) sflib 窗口 图 12.2(b) 嵌入 Stateflow 模块的 Simulink 窗口 图 12.2 Stateflow 启动窗口 166 状态工具 历史交汇工具 缺省状态迁移工具 交汇连接工具 放大缩小工具 图 12.3 Stateflow 编辑界面 真值表 图形函数工具 内嵌 Matlab 函数 模型整理工具 (a)Stateflow 快捷菜单 (b)Stateflow 属性设置对话框 图 12.4 Stateflow 模型的属性设置 167 2、 状态迁移关系

10、设置 在一个状态块的边界按下鼠标键并拖动至另一个状态的边界释放, 可以绘制出从一个状态到另一 个状态的连线。单击此连线,在该连线上会出现一个问号,用户可以在该问号出添加状态迁移标记。 状态迁移标记可以含有触发事件、迁移条件、条件动作及迁移动作,或他们中的任意组合。状态迁移 图 12.6 状态属性设置对话框 图 12.5 Stateflow 窗口的新建状态及其设置 168 标记的一般形式是 触发事件迁移条件关系式条件动作/迁移动作 图 12.7 中的状态 迁移显示了状态迁移 标记的一般形式。 触发事件表示只 要迁移关系式是真, 该触发事件可以引发 状态的迁移。缺省触 发事件时,任何事件 均可在条

11、件关系式为 真的情况下引发状态 的迁移。图 12.7 的示 例 中 , 只 要 条 件 off_count=0为真, 事件 off_switch 可以引发状态 On 至状态 Off 的迁移。 条件关系式一般是布尔表达式,写在方括号中。该关系式为真时,使得对于特定的触发信号迁移 有效。本例中,只要当条件关系式 off_count=0 为真时,发生的事件 off_switch 才可引发状态迁移。 条件动作是指当条件关系式一旦成立(即为真) ,就执行的动作,通常发生在迁移终点被确定有 效之前。如果没有规定条件关系式,则认为条件关系式为真,即刻执行条件动作。条件动作必须写字 花括号中。图 12.7 的

12、示例中,只要条件off_count=0为真,即可执行条件动作 off_count+。 迁移动作是指当迁移终点已经确定有效,才执行的动作。如果迁移包含很多阶段,迁移动作只有 在整个迁移通道到终点确认为有效后方可执行。迁移动作写在斜线/之后。图 12.7 的示例中,当条 件off_count=0为真,发生了 off_switch 事件,迁移终点状态 Off 确认为有效,此时执行迁移动作 LED_off 图 12.8 也给出了一个简单的状态迁移标记示例。在该例中,用户可以使用状态迁移属性设置对 话框对状态迁移条件进行设置。右键状态迁移连线即可打开状态迁移属性设置对话框,在 Label 栏中 设置即可

13、。请读者自行点击问号,将图中未设置触发事件的迁移事件设置为 on_switch,并保存此例。 本例的两个状态迁移均采用的是事件触发,状态迁移也可以采用关系式触发,一旦状态迁移上所描述 的关系式成立,则状态迁移开始启动。关系式触发的状态迁移上的关系式格式是 关系式,如temp 120等。 3、 缺省状态转移 设置 缺省状态转 移设置的作用是 告诉 Stateflow 图 形, 当它开始工作 时, 哪个状态先处 于激活状态。 点击 Stateflow 图形编 辑界面中的图标 ,然后将鼠标 移动需要设置的 图 12.8 Stateflow 状态迁移设置 缺省状态迁移 图 12.7 状态迁移标记的一般

14、形式举例 169 状态即可。见图 12.8。 4、 事件与数据设置 前面我们为状态迁移规定了迁移触发事件的名称, 也就是说状态的迁移仅在这些事件发生的时候 才开始。为了利用这些事件触发,我们必须先定义这些事件。定义 on_ switch 和 off_switch 事件需要 一下几步: a) 从 stateflow 编辑界面的 add 菜单选择 Event,并在随后弹出的下拉菜单下选择 Input from Simulink,打开事件对话框,见图 12.9; 将事件对话框中的 Name 改为 off_switch,trigger 选择为 Falling(即下降沿触发) ,点击 OK 保存 off

15、_switch 事件的设置。 b) 重复上述步骤设置 on_switch 事件,触发事件仍选择 Input from Simulink,Name 设置为 on_switch,trigger 选择为 Rising(即上升沿触发) 。 注:事件的范围(Scope)有三种选项:Local 是指利用本 Stateflow 图形界面产生的触发事件; Input from Simulink 是指从 Simulink 模型引入事件至 Stateflow 图形界面; Output to Simulink 是指将 Stateflow 图形界 图 12.9 Stateflow 事件对话框 事件对话框 170 面产

16、生的事件输出到 Simulink 模型中。 事件的触发方式亦有多种选择:Either、Rising、Falling 和 Function Call 四种。其中选择 Rising 或 Falling 分别指利用事件的上升沿或下降沿触发,Either 是指不管上升沿还是下降沿事件均可以触发, Function Call 是一种函数调用的触发方式。 前面我们还为状态设置了动作,如状态 On 的动作描述为 entry:speed = 1,是希望在状态 On 激活时 将 speed 的值赋为 1,这个数据是要在 Simulink 模型中使用的,所以要将数据传递到 Simulink 模型中。 在能够被利用之前,这个数据必须先定义。数据的定义步骤如下 从 stateflow 编辑界面的 add 菜单选择 Data, 并在随后弹出的下拉菜单下选择 Output to Simulink, 打开数据对话框,将图 12.10; 将数据名 Name 改为 speed,点击 OK 保存设置即可。 注意:数据范围可以设置为 Local(局部数据) 、Inpu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号