Stateflowmatlab教程.ppt

上传人:xt****7 文档编号:1882397 上传时间:2019-11-09 格式:PPT 页数:114 大小:1.39MB
返回 下载 相关 举报
Stateflowmatlab教程.ppt_第1页
第1页 / 共114页
Stateflowmatlab教程.ppt_第2页
第2页 / 共114页
Stateflowmatlab教程.ppt_第3页
第3页 / 共114页
点击查看更多>>
资源描述
Stateflow系统建模技术,2010年7月5日,内容提要,Stateflow入门介绍及基本概念 创建状态图 状态转移 流程图建模 状态图的层次 并行机制,Stateflow入门介绍,Stateflow是一个交互式设计工具,用来对复杂的事件驱动模型系统进行建模与仿真。通过紧密地与Simulink和MATLAB集成,Stateflow将复杂的控制和监督逻辑有效地结合到Simulink模型中,为Simulink用户提供了一个设计嵌入式系统的完美解决方案。,Stateflow入门介绍,Stateflow能够做: 基于有限状态机理论对复杂的响应型系统进行可视化建模与仿真 设计和开发复杂的监控逻辑 在同一个Stateflow框图中同时使用流程图和状态转移图表示法 自动地从模型中生成整数或浮点数代码 可随时方便修改设计,评估结果,验证系统性能,stateflow基本概念,动作 数据对象 连接节点 缺省转移,状态 转移 事件 条件,有限元状态机,实例:DVD播放机,8缺省转移,1状态,2转移,3事件,4条件,5动作,7连接节点,6Counter数据对象,一个状态机(也可以包含多个Chart),内容提要,Stateflow入门介绍及基本概念 创建状态图 状态转移 流程图建模 状态图的层次 并行机制,创建状态图插入图块Chart,在MATLAB命令窗口输入 sfnew 直接从stateflow库中拖Chart块到模型中,拖,创建状态图几个术语,每个Chart被称作一个stateflow图块,每个图块都有对应的stateflow框图,模型中所有的图块的集合叫做stateflow状态机,且一个模型中只有一个,状态机,图块,框图,双击,图块包含的内容,创建状态图编辑器,可以用编辑器开发stateflow框图 仿真过程中可以用编辑器来显示状态图的执行过程,创建状态图编辑器,将框图锁定的方法: FileChartPropertiesLocked选项,创建状态图插入状态和节点,先左键单击选中对象按钮,然后在编辑区左键单击放下对象 要插入一个对象的多个拷贝,双击对象按钮,然后再编辑区左键单击添加,右键单击停止添加 要删除某个对象,选中后按Delete键删除,创建状态图框图的缩放,缩放范围20%至500% 左键单击zoom按钮 上部放大,下部缩小 左键单击两个zoom按钮的中间调用下拉菜单来选择缩放的比例 移动鼠标到两个zoom按钮的中间空白处,左键保持在该处直到出现双箭头,向上向下拖拉进行缩放,2个zoom按钮,创建状态图改变状态尺寸,左键保持状态的一个圆角拖拉即可,当移动鼠标到状态的圆角时,会出现一个双箭头,这是就可以左键保持这个圆角,然后拖拉直到满意的尺寸大小,创建状态图改变节点尺寸,右键单击节点,弹出一个快捷菜单,然后选择Junction Size选项选择需要的大小尺寸,创建状态图移动和复制对象,左键保持并且拖拉对象,移动一个状态或节点 右键保持拖动对象,拷贝一个对象 如果想移动或拷贝一组对象,首先要框选所感兴趣的对象,然后按上面的方法操作 注:单击时必须点到对象的边缘里面,创建状态图状态的标签,每个状态都必须要有一个名字。标签一个状态时,左键单击问号,在光标处输入文本。注意鼠标点接近问号时它所发生的变化。状态名要以字符串开始,中间不能有空格,但可以写成多行。编辑状态标签时,左键单击标签进入文本编辑模式。,创建状态图创建转移,从源对象的边缘左键保持并且拖拉到目标对象边缘。转移只能开始或终止于状态的直线的边缘(不能是状态的圆角)。当鼠标点接近状态的直线边缘时光标变为十字花。 默认情况下,转移的精确行为是有效的,要想使他无效,可以在转移上右键单击,在快捷菜单上清掉Smart选项。,创建状态图创建缺省转移,左键单击图形编辑器左边的一列工具条上的第三个按钮,然后左键单击缺省状态的直线边缘。如果转移从状态或节点的边缘分离出来,它就会变成缺省转移。,创建状态图转移的变更,从一个状态的边缘到另一个状态的边缘,可以改变转移的任何一个末端(带箭头或不带箭头的): 左键保持在想改变的转移的末端,然后拖拉它离开原来的边缘 到达想要的目标的边缘时释放转移的末端,重新连接转移 要想改变转移的线路而不影响它的两端的连接时,左键保持在转移的两个末端之间的线上,拖拉即可改变,创建状态图转移标签及移动,给转移加标签:左键单击转移选中它,左键单击出现的问号,在光标处插入文本。左键单击文本进入文本编辑模式进行编辑转移的标签 移动转移标签:左键保持在标签位置,拖拉到想安放的位置,可以把转移标签移到框图内的任何位置,创建状态图添加注释,在框图中指定位置添加注释: 右键单击框图中要加注释的位置,弹出快捷菜单 选择快捷菜单中的Add Note选项 在光标处插入文本 左键单击文本进入到编辑模式编辑文本,注释,创建状态图定制对象属性,右键单击某一对象,弹出快捷菜单,选择Properties选项,就会出现关于这个对象的属性对话框。 不同对象,属性对话框有所差异,转移属性对话框,状态属性对话框,创建状态图设置字体大小,设置状态和转移的标签及注释信息的字体大小: 左键单击选中对象 选取Edit菜单下的Set Font Size选项 选择合适的字体 也可以通过对象的快捷菜单进行设置: 右键单击对象弹快捷菜单 选取Font Size选项 选择合适的尺寸,创建状态图设置箭头尺寸,修改转移箭头尺寸的方法: 右键单击转移弹出快捷菜单,从Arrowhead Size子菜单中选取合适的尺寸。从状态的快捷菜单下对该选项进行设置,所有指向该状态的边缘的箭头尺寸都将改变,创建状态图图形显示配置,可以配置一个框图的图形风格。包括定制状态、转移、节点、标签和背景的颜色,状态和转移标签的字体。通过选取Edit菜单下的Style选项打开图形风格对话框来进行编辑。 对话框中: 左键单击对象或标签,设置颜色 右键单击标签,设置字体,内容提要,Stateflow入门介绍及基本概念 创建状态图 状态转移 流程图建模 状态图的层次 并行机制,状态转移概念,Stateflow状态图被称为“状态转移图”,这些状态图中包含了所谓的状态、状态转移管理和维护当前内存中活动的状态 一旦包含了状态转移的状态图处于活动的状态,则状态图将一直处于这种活动状态,直到整个模型仿真计算结束。 当在某一个制定的时间步长内完成了必要的工作后,状态图简单地进入到一种暂时挂起的状态,而不是非活动状态。也就是说,在连续两次触发事件之间,状态图是一直处于活动状态的。,状态转移概念(续),具有状态转移的Stateflow状态图相当于一种包含了离散系统模块的触发子系统。这种子系统在内存中保持自己的状态,在有触发时更新自己的输出,而在两个连续的触发之间保持自己的状态。,状态转移概念(续),当一个状态转移图处于活动状态时,这个状态转移图首先尝试激活相应的状态,以及邻近的状态。如果,状态机处于第一层,则执行的第一个元素是系统的默认转移。由于状态机在模型运行结束之前一直处于活动状态,默认转移仅仅有效一次,即在状态机被激活的首次有效,这一点必须注意。如果状态的第一层仅有一个状态,则可以不使用默认的转移。一旦进入一个状态,这个状态就一直处于活动状态,直到退出为止。与状态机类似,状态也在连续两次触发之间挂起而不会成为不活动状态。,状态转移事件驱动,所谓事件是指触发的发生。一个触发可以是隐含存在的,按照预先的配置自动的发生。同样,触发也可以显性的定义,在一个具有过零特性的信号发生,或者被函数调用时,触发发生,也就是发出了事件。由于这种触发而引起的相应的动作执行,被称之为事件驱动 在Stateflow中,所有的状态图的运行都是依靠事件驱动。换句话说,状态图是依赖于事件而活动的。事件同样驱动状态的变化。 每次触发一次,状态图就重新进行判断一次。,状态转移过零触发,过零触发事件具有三种形式: 1上升沿触发:当过零信号由负值变为正值,或者由负值变为0,或者由0变为正 2下降沿触发:当过零信号由正值变为负值,或者由正值变为0,或者由0变为负值 3双边沿触发:上述两种触发机制的结合,下降沿,上升沿,状态转移产生事件,利用下列的模块可以在Simulink中产生相应的过零信号: 震荡函数 脉冲发生器 阶跃信号(每个阶跃信号仅能产生一个事件) 双端输入开关 静态模块,状态转移输入事件定义,事件类型,状态转移定义多个输入事件,状态转移默认转移注意事项,当其父状态被激活的时候,默认转移仅仅执行一次。那么当父状态再次从非活动状态进入到活动状态,默认转移将再次执行 当默认转移在状态图的第一层的时候,需要小心。如果第一次触发事件发生时默认转移无效,系统将发出一个二义性警告,这个警告错误一般在父状态被激活,而父状态下的子状态不能确认具体哪一个被激活时发出。这时候,状态图被激活了,但是没有一个确定的状态被激活。 注:如果在Stateflow调试器中从错误检测选项字段中去除State Inconsistency,则上述的二义性错误警告不会发出。,状态转移默认转移注意事项(续),一定要牢记一点,一旦Stateflow状态图被激活,则状态图会一直处于激活状态直到系统仿真的结束。由于默认转移的执行需要依赖父状态的再次激活,则这里的默认转移将不再有机会执行了。 若需要通过事件来控制状态的执行,则可以建立一个哑元状态,或者将状态图置于使能子系统中,将相应的触发事件设置为Reset 例子:exp01_1和exp01_2,状态转移使用数据对象,数据对象主要是用在条件和动作语句中。可以根据需要在Stateflow图表中限制数据对象的使用,也可以使用数据对象作为chart和外部环境的接口,这里所说的外部环境即Simulink模型中的其他模块。,用在条件中,用在动作中,状态转移定义数据对象,添加数据,数据名称,数据对象范围,数据类型,状态转移活动状态输出,可以将状态的活动状态作为Stateflow块的输出,在状态属性对话框中选中Output State Activity选项,stateflow块就创建了一个数据对象输出到模型,而数据对象名称和状态的名称一致,数值只能是1或0 例子exp02,状态转移浏览器,使用浏览器可以观察所定义的数据和事件 运行浏览器:使用Tool菜单下的Explorer命令 浏览器左边列显示了状态机包含的所有层次结构,事件,数据,层次结构,状态转移浏览器(续),在浏览器中可以定义事件和数据对象属性 用鼠标右键拖放事件或数据对象,可以完成复制操作 浏览器中的Add菜单可以对在层次树中选择的stateflow图表完成添加/定义数据和事件对象的操作,状态转移使用条件,条件表达式包括 : 使用布尔运算符比较两个数据对象 以布尔变量作为返回值的函数 条件表达式不能通过调用函数而更改数据对象或影响改变图表中的状态 赋值表达式不能作为条件表达式 使用“与”操作符“&”完成条件表达式的与操作 使用“或”操作符“| |”完成条件表达式的或操作,状态转移转移动作,转移动作标签主要由四个部分组成 在转移动作标签中不一定需要包含所有的上述部分,但是必须按照图中所示的顺序书写转移动作标签。 条件动作和转移动作运行有所区别,条件动作在条件满足的时候就运行了,而转移动作需要在整个转移通路有效时才运行。见例子exp03,事件,条件,条件动作,转移动作,状态转移状态动作,在下列情况时,发生状态动作 : 初始为非活动状态,事件驱动使其激活entry动作 初始为活动状态,事件驱动使其进入非活动状态exit动作 初始为活动状态,事件没有改变其活动的状态during动作或on动作 状态动作一般作为状态名称标签的一部分,可以紧跟在标签名称后面 可以使用一些关键字来标识动作的作用类型,状态转移状态动作(续),有四种类型状态动作:,系统默认的状态动作为entry,状态转移动作执行顺序,在有事件驱动且条件满足的时候,执行相应的条件动作 整条通路都有效,系统才执行转移动作 原状态的退出动作在转移动作执行之前被执行 接着是组含义动作,然后是目标状态的进入动作,状态转移动作语言,Stateflow的动作语言是图表内部进行交互,以及图表和外部环境进行交互的接口 动作语言的功能: 执行数学计算:操作数据对象 调用函数:使用MATLAB或C语言的函数 触发事件:影响内部或外部的状态,状态转移支持的数学运算,二元操作:* / % + - = & | & | 一元操作: ! - + - 赋值运算:= += -+ *= /= 位操作: & | &= = |=,状态转移调用MATLAB函数,调用MATLAB 函数,需要在函数的名字前使用MATLAB命名空间运算符,如ml y = ml.abs(x) 在使用ml运算符调用MATLAB函数时需要注意以下几点: 使用ml关键字调用的MATLAB函数,仅能使用标量或者字符串作为函数的输入参量 调用函数时的圆括号是必须,无论被调用的函数是否具有参量 如果调用的函数具有返回参数,则返回数值的类型必须为double型 如果具有多个返回变量,仅有第一个返回变量被赋值 如果返回的参数不是标量,仅向量中的第一个元素被赋值,状态转移C语言数学函数,调用C语言数学函数:如y=abs(x) 仿真目标代码生成器提供了min和max函数的宏定义 下表中所列的数学函数可以被调用,状态转移调用函数,调用MATLAB函数时需要使用ml操作符,而调用C语言函数的时候则比较简单 ,例exp04,调用C语言函数,调用MATLAB函数,状态转移图表更新,图表更新也是可以配置的,更新主要有三种形式: Triggered 或Inherited 状态或者被外部输入的事件触发,或者按照输入信号的采样频率进行触发 Sampled 按照一个固定的频率触发状态转换 Continuous每个仿真步长触发状态转换 执行File菜单下的Chart Properties命令,在弹出的对话框中,设置Update method 字段中的内容 系统默认的更新方式是Triggered or Inherited,状态转移触发与继承,通过触发事件更新状态图需要在stateflow块输入具有过零特性的信号 如果具有输入的事件,必须使用Triggered Inherited更新方法 如果没有输入的事件,则状态图按照输入信号的采样频率自动更新 使用继承更新方法,状态图依赖输入信号的更新而更新 exp05,采样周期设为0.2,状态转移采样更新,如果使用采样更新,则stateflow块类似于离散块具有固定的执行频率 采样更新方法按照固定的时间步长触发状态图的更新 使用该方法必须指定一个采样时间 采样更新方法等同于状态图具有固定周期的驱动事件 exp06,离散采样周期0.2,状态转移连续更新,使用连续更新方法时,状态图的运行类似于连续系统模块 连续更新方法在每一个仿真步长触发状态图的转换 连续更新方法等同于状态图具有最小时间步长的触发事件 exp07,状态转移调试器,使用stateflow调试器解决状态图中的错误 在调试器中运行模型,可以完全控制模型运行的过程 执行调试器:使用Tool菜单下的Debug命令,执行状态,全局断点,调试动作,错误检测,动画控制,控制信息,运行信息,状态转移设置断点,可以将转移或状态作为本地断点来控制状态图的运行 右键单击对象在快捷菜单中选择Properties选项 在breakpoints设置相应的属性 设置也可以将断点设置为数据对象的修改或者事件的触发,而这些设置在Stateflow浏览器中完成。,断点控制,状态转移查询器,从Tool 菜单栏中选择find选项, 你也可以使用按钮访问finder 你可以限制搜寻的范围,要么查找Stateflow组件,要么既查找Stateflow组件,同时也查找Simulink对象。,内容提要,Stateflow入门介绍及基本概念 创建状态图 状态转移 流程图建模 状态图的层次 并行机制,流程图建模转移检测优先权,如果有多个有效的转移,检测规则决定执行哪个转移 限制越多的转移,优先级越高: 既有事件又有条件的转移第一个被检测 仅具有事件的转移则被第二个检测 仅具有条件的转移第三个被检测 不加任何限制的转移最后被检测 exp08,低,高,流程图建模转移冲突,如果在同一个优先级中,具有两个合法的转移,在这种情况会触发一个转移冲突错误的警告信息。 Stateflow 通过几何的方法解决这样的问题: 对于来自于一个节点的转移, 按顺时针方向检测转移 对于来自于一个状态的转移, 从状态的左上角开始,检测转移 新版本的stateflow可以自己设置转移执行的顺序,流程图建模流程图,Stateflow 图如果不包含任何状态就构成了一个流程图 流程图主要是由转移和连接节点组成 流程图并不包含任何存储器 流程图一旦被触发,就会一直执行到退出为止 在两个连续的触发之间,这个流程图是不活动的 流程图在没有合法的转移分支的连接节点处执行结束,流程图建模终止节点,终止节点就是连接节点,只不过该连接节点聚集了所有转移路径 终止节点类似函数中的return声明 在一个流程图中,必须要有一个无条件路径来终止连接,防止无穷递归 在一个流程图中, 以 表示的条件动作仅仅是一个可执行的动作,流程图建模If else结构,If else结构,If elseif else结构,流程图建模迭代循环结构,for 循环结构,While循环结构,流程图建模临时数据vs局部数据,状态图中的局部数据就相当于函数的全局变量: 只有在状态图中,数据才可见 当状态图第一次被激活时,局部数据为初值。随后在状态图被激活时,局部数据为前一次数值 重新赋初值时,它的值必须要重置 状态图中的临时数据对象就相当于函数中的一个局部变量 它的值仅在状态图中可见 永远从初值开始 在状态图的以后激活的情况下,自动重置 只有在无状态的状态图中临时数据才是有效的 2009a版本中已没有临时数据类型?,流程图建模密码检测逻辑,密码检测逻辑的要求: 密码是具有四个数字的输入信号 流程图应分别检测每个数字是否与预设的密码匹配 把正确的密码数字声明为常量 如果密码正确,则输出为1,否则为0 见例exp10,内容提要,Stateflow入门介绍及基本概念 创建状态图 状态转移 流程图建模 状态图的层次 并行机制,状态图层次概念,当一个状态图具有第二层状态时就构成了层次 高层次的状态就被称为父状态,而低层次的状态就被称为子状态 状态图中允许拥有的状态层次的数目是没有任何限制的 Stateflow允许在不同层次状态之间存在转移 如果转移穿越了父状态的边界直接到达了低层次的子状态,则转移被称之为超转移 子状态的各种对象仅仅父状态活动时,才有可能执行或者有效 直接从父状态发出的转移,可以不用考虑具体哪一个子状态处于活动状态,状态图层次层次化转移,在具有层次的状态之间转移时,一般转移路径的源头是从最内部的子状态出发,而终止于目标状态的最内部的子状态。例exp11,状态图层次使用层次的目的,在状态图中使用层次有如下几个目的: 使用层次,可以将相关的对象组合在一起,构成族群 可以将一些通用的转移路径或者动作组合成为一个转移动作或路径,简化模型 适当地使用层次,可以有效地缩减生成代码的大小,也能够提高程序执行的效率和可读性,状态图层次生成组合父状态,需要将父状态组合起来 ,这样就可以作为一个整体对状态图进行移动、拷贝或者重新定义尺寸操作 方法: 右键单击父状态弹出快捷菜单,选择Make Contents子菜单下的Grouped命令 或者左键双击父状态,状态图层次低层次默认转移,第二个层次状态的默认转移决定了当父状态被激活时,具体哪一个子状态被激活 思考下图?例exp11和exp12,状态图层次历史节点,历史节点记录了在父状态退出活动状态时,具体哪一个子状态处于活动状态 当父状态再次被激活时,如果子状态没有定义显性直接转移,则历史节点将使其记录的子状态处于活动状态。 例exp13,历史节点,状态图层次内部转移,内部转移是指从父状态边缘内部出发,终止于子状态外边缘的转移,转移始终处于父状态的内部。例exp14,状态图层次层次转移测试优先权,转移的测试从活动的父状态开始 向外的转移首先被测试(level 1) 接着是内部转移(level 2) 然后从活动的子状态开始检测转移 穿越父状态边缘的转移首先被检测(level 3) 然后是父状态内部子状态之间的转移被检测 (level 4) 在同等层次的转移之间,具有最严格限制的转移首先被检测,状态图层次内部转移规则,状态的外部转移优先于内部转移被首先测试 内部转移仅在没有有效的外部转移使父状态退出活动状态时被执行 内部转移优先于子状态之间的转移被首先测试,状态图层次状态动作vs转移测试,状态入口动作在默认转移之前被执行 状态的during或on-event动作在内部转移之前被执行 例exp15,状态图层次子状态图,子状态图是从父状态图中创建的 它在功能上有别于父状态 子状态利用灰色图块隐藏内部细节 简化了状态图的复杂程度 子状态图更类似与Simulink的子系统 创建子状态图: 右键单击父状态弹出快捷菜单,使用Make Contents子菜单,选择Subcharted命令,状态图层次子状态图之间超转移,从源状态出发,左键拖放转移 将转移拖过目标状态的边界,这时在子状态图中心将出现一个虫孔 继续拖放转移到虫孔中心,编辑窗体将自动切换到子状态图的内部,显示子图的细节 继续拖放转移,到最终的子状态的边界,这样完成了超转移的设置,虫孔,状态图层次状态转移流程图,状态之间的转移可以使用流程图来完成复杂的逻辑控制 一旦发生了触发,状态转移中的流程图就会被执行,直到其中的一个分支到达了某个状态 如果存在终点是连接节点的转移分支,这个转移被认为无效 例exp16,状态图层次状态中的流程图,包含于状态中,而没有状态终点的流程图能够控制动作的执行 每次状态被激活,则流程图被执行一次 流程图的运行直到流程图到达终点的节点,或者没有有效的转移路径为止 当流程图运行结束后,父状态保持活动状态,状态图层次定义状态本地数据,可以将数据对象的作用范围定义成为Local或者静态,这样数据对象的有效范围就可以在某个状态内部了 通过浏览器的状态列表,执行浏览器的Tool菜单下的命令,可以为状态添加本地数据对象 利用浏览器的状态列表,可以右键拖放本地数据对象到其他的状态中,状态,添加数据按钮,状态图层次访问数据对象,在其他状态中访问其他状态的数据对象 ,需使用下面的语法结构:state_name.data_name 如果父状态中存在与本地数据对象名称一致的数据对象,访问这个数据对象时也要使用下列语法结构:parent_name.data_name,状态图层次图形函数,图形函数是指在状态图中以图形方式存在的函数 主要结构形式是状态图的流程图 函数一旦被创建,就可以重复使用 允许包含输入输出接口来调用相应的动作或者条件,状态图层次创建图形函数,内容提要,Stateflow入门介绍及基本概念 创建状态图 状态转移 流程图建模 状态图的层次 并行机制,并行机制概念,边框为虚线的状态表示为并行状态 当父状态处于活动状态时,并行状态也处于活动状态 将默认转移终止到并行的状态时非法的,并行机制设置状态解析关系,设置状态的并行关系需要将状态默认的解析关系从互斥变为并行 用鼠标右键单击状态的父状态,注意不是每个状态,然后在Decomposition子菜单下选择Parallel命令 对于顶层的状态,直接在图形编辑器背景右键单击,然后在Decomposition子菜单下选择Parallel命令,并行机制使用层次的并行状态,可以在任意的层次上设置并行状态 在同一个层次上的不同状态的解析关系必须保持一致 即在某个层次上,所有的状态要么是互斥的,要么就是并行的,两种解析状态是不可能同时存在于同一个父中,并行机制并行状态的激活顺序,并行状态的激活是有一定顺序的 并行状态的激活顺序在每一个状态的右上角标明 激活次序一般按照“从上至下,从左至右”的规则,激活次序标注,并行机制并行状态执行顺序,在并行状态中的所有有效的状态(包含子状态)执行到下一个有效的状态被执行为止 exp19执行一次的结果: out=1 out=4 out=8 out=11,并行机制本地事件广播,使用事件广播,可以在某个状态内部触发其他并行状态的执行 被广播的事件在数据字典中定义为Local 。例exp20,事件广播,并行机制本地事件优先级,本地事件广播的优先级相当于函数调用 当出现事件广播时,原有的执行顺序被打断,直到所有与事件广播有关的动作执行完毕 PLAY广播事件时,先执行与其有关的动作 见例exp21,并行机制直接事件广播,使用直接事件广播可以限制广播的事件触发指定的状态 可以防止事件广播无意识的改变整个状态图的状态 使用直接事件广播的命令格式:send(event_name,state_name) 例exp22,并行机制定义状态的本地事件,可以限制事件的作用范围在状态的内部 : 在浏览器种选择某个状态 使用浏览器的Add 菜单添加事件到数据字典 也可以通过浏览器修改事件的可见范围 也可以修改事件到不同的状态中,并行机制受限事件广播,状态之外触发状态的本地事件需要指定状态名,命令格式为:state_name.data_name 使用受限的事件广播可以将事件限制在具体的状态内,例exp23,并行机制隐含事件和条件,有助于简化并行状态之间的依赖关系 减少数据字典中定义的事件数量,降低状态图的复杂程度 隐含事件 : entry(state_name) 或en(state_name) exit(state_name) 或ex(state_name) change(data_name) 或chg(data_name) wakeup 或tick 隐含条件:in(state_name),并行机制使用隐含事件和条件,例exp24,并行机制时间逻辑事件,使用时间逻辑事件,可以根据事件发生的次数决定事件的逻辑转换 时间逻辑操作符(at, every,after和before)分别完成相应的Boolean 运算,处理Stateflow事件的发生次数 时间逻辑可以 : 监测转移 控制on-event状态动作 语法:temporal_operator(number,event_name) Stateflow中有四种时间逻辑: at(n,event) : 当事件第n 次触发时 every(n,event) :当事件每触发n 次时 after(n,event) :当事件触发n 次后 before(n,event) :当事件第n 次触发前 例exp25,并行机制时间逻辑事件(续),下列情况下,事件计数器清零 : 具有时间逻辑转移的源状态进入活动状态 具有on-event 状态动作使用时间逻辑运算符的父状态被激活时,Thank you,stateflow基本概念状态机,有限元状态机是具有有限个状态的系统的理论表述。它以某些缺省的状态为起点,根据所定义的事件和转移进行操作。转移表示状态机如何对事件进行响应。它有明确的输入和输出个数,可以明确地配置所有的模式或状态。它定义了导致系统从一个状态转换到另一个状态的逻辑或事件 直观理解:模型中包含的所有stateflow块的集合,stateflow基本概念状态,在有限元状态机里,状态描述的是系统的一种模式。状态具有布尔行为,也就是说在任何给定的时刻它或者是活动的或者是非活动的。 状态在系统中被看作为记忆元件。它保持系统的当前模式,一旦被激活,状态就保持活动的模式,直到系统改变模式,状态才变为非活动的。 在层次的同一级里,所有的状态要么是互斥(OR)的要么并行(AND)的。如果状态之间是互斥的,那么在任何给定的时刻只有一个状态是活动的,如果状态之间是并行的,在同一时刻所有的状态都是活动的。在同一级里面不可能有既是互斥的又是并行的状态存在。它们必须是或者互斥或者并行。,stateflow基本概念转移,转移描述的是有限状态系统内的逻辑流。转移管理了当系统从当前状态改变时,这个系统可能发生的模式改变。当转移发生时,源状态变为非活动的,目标状态变为活动的。,stateflow基本概念事件,事件控制有限状态系统的执行。只有某个事件发生后系统才能从一个状态改变到另一个状态。事件是非图形对象每个事件都被定义成一个独立的名字。如果一个转移用一个事件名做为标签,仅当那个事件发生时,转移才有效。如果转移没用事件名作为标签,只要有事件发生转移就有效。,stateflow基本概念条件,条件是有限状态系统中的有效流,条件必须定义在括号中。当一个事件发生时,只有当括号中的语句为真或非零时,带有条件标签的转移才有效。转移可以同时拥有事件和条件;条件要放在事件名之后。当转移标签既有事件又有条件时,只有当指定的事件发生并且条件为真时转移才有效,stateflow基本概念动作,转移动作是当一个转移发生时要执行的命令。转移动作定义在“/”之后,动作能影响系统本身,并且(或者)影响到与有限状态系统相关的一些外部元素。动作能够处理数据,调用函数,发生触发事件。 如果把动作和转移相关联,动作语句要放在事件标签和条件语句的后面。,stateflow基本概念数据对象,数据对象存储了关于条件和动作的一些必要的信息。数据对象是非图形对象 每一个数据对象都被指定成一个独立的名字。,stateflow基本概念连接节点,连接节点作为转移通路的判决点或汇合点。它不是记忆元件。因此,转移的执行不能停留在节点上,必须到达某个状态时,转移才能停止。 连接节点可以作为一个决策点。由于连接节点不是记忆元件,转移必须到达某个状态时,执行才能结束。因此,可以利用这个特点来简化模型。,stateflow基本概念缺省转移,缺省转移确定当有限状态机或者父状态处于活动状态的时候,在所有的子状态中第一个被激活的状态。图中当有限状态机变为活动的时候,它首先尝试激活带有缺省转移的子状态,同时可以在缺省转移的标签上加上事件和条件来进行限制,也可以将动作和缺省转移相关联。 注意: 缺省转移并不意味着停止状态在最初就是活动的,它仅仅标志着当DVD播放机系统变为活动的时候这个状态是活动的,状态转移输入事件定义,使用事件驱动具体的转移时,需要在相应的转移上标注事件的名称。然而,所有Stateflow状态机使用的事件都必须在数据字典中明确定义 定义一个从Simulink输入事件的过程比较简单,选择Add菜单下Event命令,接着选择Input From Simulink命令。在弹出的对话框中写入需要定义事件的名称,这个名称必须与状态转移标签上标注的名称一致。同样,需要选择触发的类型,这里需要注意的是在对话框Scope字段一定要设置为Input from Simulink 当单击OK或Apply按钮后,Stateflow块上将出现一个输入端口。同时,也显示了具有输入事件类型的标志。,状态转移定义多个输入事件,每个Stateflow块有且仅有一个事件输入端口。所以,在使用多个驱动事件输入时,必须通过Mux块将不同的事件整合为一个向量。这时,每一个输入事件的索引同Stateflow定义事件的顺序一一对应。需要注意的一点,Mux块的信号索引是由上至下(Mux块垂直放置)或者由左至右的(Mux块水平放置)。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!