Stateflow_matlab教程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

状态转移—输入事件定义
事件类型
状态转移—定义多个输入事件
状态转移—默认转移注意事项
• 当其父状态被激活的时候,默认转移仅仅执行一 次。那么当父状态再次从非活动状态进入到活动 状态,默认转移将再次执行 • 当默认转移在状态图的第一层的时候,需要小心。 如果第一次触发事件发生时默认转移无效,系统 将发出一个二义性警告,这个警告错误一般在父 状态被激活,而父状态下的子状态不能确认具体 哪一个被激活时发出。这时候,状态图被激活了, 但是没有一个确定的状态被激活。 • 注:如果在Stateflow调试器中从错误检测选项字 段中去除State Inconsistency,则上述的二义性 错误警告不会发出。
Stateflow系统建模技术
2010年7月5日
内容提要
• • • • • • Stateflow入门介绍及基本概念 创建状态图 状态转移 流程图建模 状态图的层次 并行机制
Stateflow入门介绍
• Stateflow是一个交互式设计工具,用来对复杂的 事件驱动模型系统进行建模与仿真。通过紧密地 与Simulink和MATLAB集成,Stateflow将复杂的 控制和监督逻辑有效地结合到Simulink模型中, 为Simulink用户提供了一个设计嵌入式系统的完 美解决方案。
创建状态图—状态的标签
• 每个状态都必须要有一个名字。标签一个 状态时,左键单击问号,在光标处输入文 本。注意鼠标点接近问号时它所发生的变 化。状态名要以字符串开始,中间不能有 空格,但可以写成多行。编辑状态标签时, 左键单击标签进入文本编辑模式。
创建状态图—创建转移
• 从源对象的边缘左键保持并且拖拉到目标 对象边缘。转移只能开始或终止于状态的 直线的边缘(不能是状态的圆角)。当鼠 标点接近状态的直线边缘时光标变为十字 花。 • 默认情况下,转移的精确行为是有效的, 要想使他无效,可以在转移上右键单击, 在快捷菜单上清掉Smart选项。
状态转移—事件驱动
• 所谓事件是指触发的发生。一个触发可以是隐含 存在的,按照预先的配置自动的发生。同样,触 发也可以显性的定义,在一个具有过零特性的信 号发生,或者被函数调用时,触发发生,也就是 发出了事件。由于这种触发而引起的相应的动作 执行,被称之为事件驱动 • 在Stateflow中,所有的状态图的运行都是依靠事 件驱动。换句话说,状态图是依赖于事件而活动 的。事件同样驱动状态的变化。 • 每次触发一次,状态图就重新进行判断一次。
内容提要
• • • • • • Stateflow入门介绍及基本概念 创建状态图 状态转移 流程图建模 状态图的层次 并行机制
状态转移—概念
• Stateflow状态图被称为“状态转移图”,这些状 态图中包含了所谓的状态、状态转移管理和维护 当前内存中活动的状态 • 一旦包含了状态转移的状态图处于活动的状态, 则状态图将一直处于这种活动状态,直到整个模 型仿真计算结束。 • 当在某一个制定的时间步长内完成了必要的工作 后,状态图简单地进入到一种暂时挂起的状态, 而不是非活动状态。也就是说,在连续两次触发 事件之间,状态图是一直处于活动状态的。
状态转移—默认转移注意事项(续)
• 一定要牢记一点,一旦Stateflow状态图被激活, 则状态图会一直处于激活状态直到系统仿真的结 束。由于默认转移的执行需要依赖父状态的再次 激活,则这里的默认转移将不再有机会执行了。 • 若需要通过事件来控制状态的执行,则可以建立 一个哑元状态,或者将状态图置于使能子系统中, 将相应的触发事件设置为Reset
创建状态图—设置箭头尺寸
• 修改转移箭头尺寸的方法: 右键单击转移弹出快捷菜单,从Arrowhead Size子菜单中选取合适的尺寸。从状态的快 捷菜单下对该选项进行设置,所有指向该 状态的边缘的箭头尺寸都将改变
创建状态图—图形显示配置
• 可以配置一个框图的图形风格。包括定制 状态、转移、节点、标签和背景的颜色, 状态和转移标签的字体。通过选取Edit菜单 下的Style选项打开图形风格对话框来进行 编辑。 • 对话框中: 左键单击对象或标签,设置颜色 右键单击标签,设置字体
• 例子:exp01_1和exp01_2
状态转移—使用数据对象
• 数据对象主要是用在 条件和动作语句中。 可以根据需要在 Stateflow图表中限制 用在条件中 数据对象的使用,也 可以使用数据对象作 为chart和外部环境的 接口,这里所说的外 部环境即Simulink模型 中的其他模块。
用在动作中
Stateflow入门介绍
Stateflow能够做:
• 基于有限状态机理论对复杂的响应型系统进行可 视化建模与仿真 • 设计和开发复杂的监控逻辑 • 在同一个Stateflow框图中同时使用流程图和状态 转移图表示法 • 自动地从模型中生成整数或浮点数代码 • 可随时方便修改设计,评估结果,验证系统性能
状态转移—使用条件
• 条件表达式包括 : 使用布尔运算符比较两个数据对象 以布尔变量作为返回值的函数 • 条件表达式不能通过调用函数而更改数据对象或 影响改变图表中的状态 • 赋值表达式不能作为条件表达式 • 使用“与”操作符“&&”完成条件表达式的与操 作 • 使用“或”操作符“| |”完成条件表达式的或操作
注释
创建状态图—定制对象属性
• 右键单击某一对象, 弹出快捷菜单,选择 Properties选项,就会 出现关于这个对象的 属性对话框。 • 不同对象,属性对话 框有所差异
状态属性对话框
转移属性对话框
创建状态图—设置字体大小
• 设置状态和转移的标签及注释信息的字体大小: 左键单击选中对象 选取Edit菜单下的Set Font Size选项 选择合适的字体 • 也可以通过对象的快捷菜单进行设置: 右键单击对象弹快捷菜单 选取Font Size选项 选择合适的尺寸
创建状态图—插入图块Chart
• 在MATLAB命令窗口输入 >> sfnew • 直接从stateflow库中拖Chart块到模型中

创建状态图—几个术语
• 每个Chart被称作一个stateflow图块,每个图块都 有对应的stateflow框图,模型中所有的图块的集 合叫做stateflow状态机,且一个模型中只有一个
创建状态图—创建缺省转移
• 左键单击图形编辑器左边的一列工具条上 的第三个按钮,然后左键单击缺省状态的 直线边缘。如果转移从状态或节点的边缘 分离出来,它就会变成缺省转移。
创建状态图—转移的变更
• 从一个状态的边缘到另一个状态的边缘,可以改 变转移的任何一个末端(带箭头或不带箭头的): 左键保持在想改变的转移的末端,然后拖拉它离 开原来的边缘 到达想要的目标的边缘时释放转移的末端,重新 连接转移 • 要想改变转移的线路而不影响它的两端的连接时, 左键保持在转移的两个末端之间的线上,拖拉即 可改变
创建状态图—转移标签及移动
• 给转移加标签:左键单击转移选中它,左 键单击出现的问号,在光标处插入文本。 左键单击文本进入文本编辑模式进行编辑 转移的标签 • 移动转移标签:左键保持在标签位置,拖 拉到想安放的位置,可以把转移标签移到 框图内的任何位置
创建状态图——添加注释
• 在框图中指定位置添 加注释: 右键单击框图中要加 注释的位置,弹出快 捷菜单 选择快捷菜单中的Add Note选项 在光标处插入文本 • 左键单击文本进入到 编辑模式编辑文本
创建状态图—框图的缩放
• 缩放范围20%至500% • 左键单击zoom按钮 上部放大,下部缩小 • 左键单击两个zoom按钮的 中间调用下拉菜单来选择 缩放的比例 • 移动鼠标到两个zoom按钮 的中间空白处,左键保持 在该处直到出现双箭头, 向上向下拖拉进行缩放
2个zoom按钮
创建状态图—改变状态尺寸
• 左键保持状态的一个 圆角拖拉即可,当移 动鼠标到状态的圆角 时,会出现一个双箭 头,这是就可以左键 保持这个圆角,然后 拖拉直到满意的尺寸 大小
创建状态图—改变节点尺寸
• 右键单击节点,弹出一个快捷菜单,然后 选择Junction Size选项选择需要的大小尺寸
创建状态图—移动和复制对象
• 左键保持并且拖拉对象,移动一个状态或 节点 • 右键保持拖动对象,拷贝一个对象 • 如果想移动或拷贝一组对象,首先要框选 所感兴趣的对象,然后按上面的方法操作 • 注:单击时必须点到对象的边缘里面
状态转移—概念(续)
• 具有状态转移的Stateflow状态图相当于一种包含 了离散系统模块的触发子系统。这种子系统在内 存中保持自己的状态,在有触发时更新自己的输 出,而在两个连续的触发之间保持自己的状态。
状态转移—概念(续)
• 当一个状态转移图处于活动状态时,这个状态转 移图首先尝试激活相应的状态,以及邻近的状态。 如果,状态机处于第一层,则执行的第一个元素 是系统的默认转移。由于状态机在模型运行结束 之前一直处于活动状态,默认转移仅仅有效一次, 即在状态机被激活的首次有效,这一点必须注意。 如果状态的第一层仅有一个状态,则可以不使用 默认的转移。一旦进入一个状态,这个状态就一 直处于活动状态,直到退出为止。与状态机类似, 状态也在连续两次触发之间挂起而不会成为不活 动状态。
状态转移—转移动作
事件 条件 条件动作 转移动作
• 转移动作标签主要由四个部分组成 • 在转移动作标签中不一定需要包含所有的上述部 分,但是必须按照图中所示的顺序书写转移动作 标签。 • 条件动作和转移动作运行有所区别,条件动作在 条件满足的时候就运行了,而转移动作需要在整 个转移通路有效时才运行。见例子exp03
状态转移—过零触发
• 过零触发事件具有三种形 式: 1上升沿触发:当过零信号 由负值变为正值,或者由 负值变为0,或者由0变为 正 2下降沿触发:当过零信号 由正值变为负值,或者由 正值变为0,或者由0变为 负值 3双边沿触发:上述两种触 发机制的结合
下降沿
上升沿
状态转移—产生事件
• 利用下列的模块可以在Simulink中 产生相应的过零信号: 震荡函数 脉冲发生器 阶跃信号(每个阶跃信号仅能产生 一个事件) 双端输入开关 静态模块
双击
状态机
图块
图块包含的内容
源自文库框图
创建状态图—编辑器
• 可以用编辑器开发stateflow框图 • 仿真过程中可以用编辑器来显示状态图的执行过程
创建状态图—编辑器
• 将框图锁定的方法: File→ChartProperties→Locked选项
创建状态图—插入状态和节点
• 先左键单击选中对象 按钮,然后在编辑区 左键单击放下对象 • 要插入一个对象的多 个拷贝,双击对象按 钮,然后再编辑区左 键单击添加,右键单 击停止添加 • 要删除某个对象,选 中后按Delete键删除
状态转移—定义数据对象
添加数据
数据名称
数据对象范围
数据类型
状态转移—活动状态输出
• 可以将状态的活动状态作 为Stateflow块的输出,在 状态属性对话框中选中 Output State Activity选项, stateflow块就创建了一个 数据对象输出到模型,而 数据对象名称和状态的名 称一致,数值只能是1或0 • 例子exp02
状态转移—浏览器
• 使用浏览器可以观察所定义的数据和事件 • 运行浏览器:使用Tool菜单下的Explorer命令 • 浏览器左边列显示了状态机包含的所有层次结构
层次结构
事件
数据
状态转移—浏览器(续)
• 在浏览器中可以定义事件和数据对象属性 • 用鼠标右键拖放事件或数据对象,可以完成复制 操作 • 浏览器中的Add菜单可以对在层次树中选择的 stateflow图表完成添加/定义数据和事件对象的操 作
stateflow基本概念
有限元状态机
状态 转移 事件 条件
动作 数据对象 连接节点 缺省转移
实例:DVD播放机
一个状态机(也可以包含多个Chart)
2转移
1状态 5动作 4条件
8缺省转移 7连接节点 3事件
6Counter数据对象
内容提要
• • • • • • Stateflow入门介绍及基本概念 创建状态图 状态转移 流程图建模 状态图的层次 并行机制
相关文档
最新文档