利用状态流Stateflow 进行控制系统状态 转换

上传人:f****u 文档编号:128306660 上传时间:2020-04-20 格式:PDF 页数:51 大小:1.94MB
返回 下载 相关 举报
利用状态流Stateflow 进行控制系统状态 转换_第1页
第1页 / 共51页
利用状态流Stateflow 进行控制系统状态 转换_第2页
第2页 / 共51页
利用状态流Stateflow 进行控制系统状态 转换_第3页
第3页 / 共51页
利用状态流Stateflow 进行控制系统状态 转换_第4页
第4页 / 共51页
利用状态流Stateflow 进行控制系统状态 转换_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《利用状态流Stateflow 进行控制系统状态 转换》由会员分享,可在线阅读,更多相关《利用状态流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 文 件 产生的代码就是仿真目标 且在状态流内称作 S

3、fun 目标 这样在仿真过程中直接调用相应的动态连 接库文件 将二者组成一个仿真整体 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 给用户提供的仿真算例 如果用户在 MATLAB 命令窗 口键入 sfnew 命令

6、将打开嵌入 Stateflow 模块 Charts 的 Simulink 窗 口 untitled 如图 12 2 b 所示 其 中 Charts 是空白的 Stateflow 模块图 标 双 击untitled 窗 口 中 的 Stateflow 模块打开如图 12 3 所示的 Stateflow 编辑界面 用户可以在此 窗口中编辑所需的 Stateflow 模型 Stateflow 提供了强大的图形编辑功 能 用户可以使用它描述很复杂的 逻辑关系式 Stateflow 编辑界面中点击鼠标 右键 可以看到图 12 4 a 所示的快 捷菜单 选择其中的 Properties 属 性 菜单 可以

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

8、 实上 状态动作有很多种 不止 entry 一种 为了使读者先掌握状态流的一般知识 复杂的状态流的状态 动作类型及其应用我们在随后的部分再来阐述 激活 On 模块 使用热键 Ctrl C 和 Ctrl V 或使用 edit 菜单下的复制及粘贴命令 即可再复制一个同样的模块 将复制的模块标记改为 Off 动作描述改为 entry speed 0 使用该工具 可以绘制出所有需要的状态 如图 12 5 所示 如果右击建立的状态图标 并选择快捷菜单中的 Properties 菜单项 可打开图 12 6 所示的设置状态属 性的对话框 用户也可以在 Label 栏填写状态的名称和动作描述 图 12 2 a

9、 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 中的状态 迁移显示了状态迁移 标记的一般形式 触发事件表示只 要迁移关系式是真 该触发事件可以引发 状态的迁移 缺省触 发事件时 任何事件 均可在条件关系式为 真的情况下引发状态 的迁移 图 12 7 的示 例 中 只 要 条 件 off count 0 为真 事件 off sw

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

12、包含很多阶段 迁移动作只有 在整个迁移通道到终点确认为有效后方可执行 迁移动作写在斜线 之后 图 12 7 的示例中 当条 件 off count 0 为真 发生了 off switch 事件 迁移终点状态 Off 确认为有效 此时执行迁移动作 LED off 图 12 8 也给出了一个简单的状态迁移标记示例 在该例中 用户可以使用状态迁移属性设置对 话框对状态迁移条件进行设置 右键状态迁移连线即可打开状态迁移属性设置对话框 在 Label 栏中 设置即可 请读者自行点击问号 将图中未设置触发事件的迁移事件设置为 on switch 并保存此例 本例的两个状态迁移均采用的是事件触发 状态迁移也

13、可以采用关系式触发 一旦状态迁移上所描述 的关系式成立 则状态迁移开始启动 关系式触发的状态迁移上的关系式格式是 关系式 如 temp 120 等 3 缺省状态转移 设置 缺省状态转 移设置的作用是 告诉 Stateflow 图 形 当它开始工作 时 哪个状态先处 于激活状态 点击 Stateflow 图形编 辑界面中的图标 然后将鼠标 移动需要设置的 图 12 8 Stateflow 状态迁移设置 缺省状态迁移 图 12 7 状态迁移标记的一般形式举例 169 状态即可 见图 12 8 4 事件与数据设置 前面我们为状态迁移规定了迁移触发事件的名称 也就是说状态的迁移仅在这些事件发生的时候

14、才开始 为了利用这些事件触发 我们必须先定义这些事件 定义 on switch 和 off switch 事件需要 一下几步 a 从 stateflow 编辑界面的 add 菜单选择 Event 并在随后弹出的下拉菜单下选择 Input from Simulink 打开事件对话框 见图 12 9 将事件对话框中的 Name 改为 off switch trigger 选择为 Falling 即下降沿触发 点击 OK 保存 off switch 事件的设置 b 重复上述步骤设置 on switch 事件 触发事件仍选择 Input from Simulink Name 设置为 on switch

15、 trigger 选择为 Rising 即上升沿触发 注 事件的范围 Scope 有三种选项 Local 是指利用本 Stateflow 图形界面产生的触发事件 Input from Simulink 是指从 Simulink 模型引入事件至 Stateflow 图形界面 Output to Simulink 是指将 Stateflow 图形界 图 12 9 Stateflow 事件对话框 事件对话框 170 面产生的事件输出到 Simulink 模型中 事件的触发方式亦有多种选择 Either Rising Falling 和 Function Call 四种 其中选择 Rising 或 F

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

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

当前位置:首页 > 办公文档 > 其它办公文档

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