Stateflow教程学习教程.pptx

上传人:莉*** 文档编号:77383892 上传时间:2023-03-14 格式:PPTX 页数:68 大小:1.66MB
返回 下载 相关 举报
Stateflow教程学习教程.pptx_第1页
第1页 / 共68页
Stateflow教程学习教程.pptx_第2页
第2页 / 共68页
点击查看更多>>
资源描述

《Stateflow教程学习教程.pptx》由会员分享,可在线阅读,更多相关《Stateflow教程学习教程.pptx(68页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Stateflow概述:Stateflow 是集成于 Simulink 中的图形化设计与开发工具,主要用于针对控制系统中的复杂控制逻辑进行建模与仿真,Stateflow 适用于针对事件响应系统(Reactive System)进行建模和仿真。与事件响应系统相对应的就是动态变换系统(Dynamic Transformational System)。动态变换系统通常可以利用数学表达式、方程等组成的输入/输出关系进行描述,像这样的系统利用 Simulink 进行建模是最为方便的。而事件响应系统通常利用一些自然语言或者逻辑表达式进行描述,这样的系统就需要利用 Stateflow 来进行建模。State

2、flow 与Simulink 结合起来,可以创建确定性监管控制系统。利用 Stateflow 可视化的模型和直观的仿真能力,可以清晰、简洁地反映出复杂动态逻辑关系。Stateflow 的基础是有限状态机理论,它通过对状态图、流程图的创建,对事件驱动系统进行建模和仿真。第1页/共68页第一页,编辑于星期六:二十二点 三十分。第一章第一章 创建状态图创建状态图Stateflow编辑器创建和编辑状态图第2页/共68页第二页,编辑于星期六:二十二点 三十分。StateflowStateflow编辑器编辑器创建 Simulink 模型1.直接在 MATLAB 命令行窗体中键入指令 sfnew2.打开 S

3、imulink 库浏览器,在库浏览器中找到 Stateflow 的模块库第3页/共68页第三页,编辑于星期六:二十二点 三十分。双击模型文件或者库文件中的 Stateflow 图块打开 Stateflow 编辑器 执行 Stateflow 编辑器 File 菜单下 的 Chart Properties 命令,打开属性框第4页/共68页第四页,编辑于星期六:二十二点 三十分。创建和编辑状态图创建和编辑状态图插入图形对象1.创建状态 在图 形对象面板的状态图标上按下鼠标左键并保持,将状态Stateflow 编辑器的空白区域中Keyword:State Actions 就是状态动作。为数据对象进行赋

4、值或者进行数据对象的运算也可以通过状态动作进行事件广播以触发其他系统的变化状态动作的关键字主要有三种:entry:当状态被激活时执行相应的动作。exit:当状态退出活动状态时执行相应的动作during:当状态保持其活动状态时执行相应的 动作第5页/共68页第五页,编辑于星期六:二十二点 三十分。在状态上单击鼠标右键,在快捷菜单中选择 Properties 命令,可以通过状态的属性对话框进一步定义状态2.创建连接节点 连接节点作为转移通路的判决点或汇合点,也是在状态图中常用的图形元素之一,特别是在流程图中,由于流程图不能包含任何状态,因此只有依靠连接节点完成通路的连接和判断分支,连接节点不是记忆

5、元件。第6页/共68页第六页,编辑于星期六:二十二点 三十分。在图形对象面板的连接节点图标 上按下鼠标左键并保持,将状态拖放到Stateflow 编辑器的空白区域中。节点上单击鼠标右键,通过弹出的快捷菜单执行 Properties 命令,进入属性框3.创建转移 转移是 Stateflow 框图中最常见的图形元素之一,无论是包含状态的状态图中还是没有状态的流程图中,几乎都存在转移。转移描述的是有限状态系统内的逻辑流。转移管理了当系统从当前状态改变时,这个系统可能发生的模式改变。当转移发生时,源状态变为非活动的状态,目标状态变为活动的状态。转移是带有箭头的线,这就使整个状态图或者流程图成为了“有向

6、图”,状态或者流程之间的转换,将直接受到转移方向的约束。第7页/共68页第七页,编辑于星期六:二十二点 三十分。创建转移的具体步骤是:(1)当鼠标光标接近状态的边缘时,鼠标光标将变成十字形状。(2)按下鼠标左键并保持,将引出的转移线拖放到目标状态的边缘即可,第8页/共68页第八页,编辑于星期六:二十二点 三十分。给转移添加标签的方法:(1)左键单击选中相应的转移,此时转移将显示问号;(2)左键单击出现的问号,则进入文本编辑状态;(3)在光标处插入文本;(4)单击 Stateflow 编辑器中任意一处,结束标签的插入。组成转移标签的四个部分不一定完整地出现,但是不论出现哪几个部分,标签的内容必须

7、按照上面指定的顺序书写。条件动作与转移动作两者之间的区别:条件动作在条件满足的情况下就能够执行,而转移动作需要在整个转移通路都有效的情况下,在执行转移的时候才执行。第9页/共68页第九页,编辑于星期六:二十二点 三十分。Stateflow 中都可以使用三类语法元素作为动作:(1)数学运算表达式或者逻辑运算表达式。(2)调用函数。(3)事件广播。4.默认转移:默认转移是一类特殊的转移,可以把它看做是状态转移的特例。默认转移确定当有限状态机或者父层次状态处于活动状态的时候,在其所有的子状态中第一个被激活的状态。根据有限状态机的要求,当有限状态系统被激活时,必有相应的确定的某个状态被激活。而默认转移

8、就定义了当状态机被激活或者层次模型中父层次状态被激活时,具体哪个子状态被激活。第10页/共68页第十页,编辑于星期六:二十二点 三十分。创建默认转移的方法如下:鼠标单击图形对象面板中的默认转移图标,然后将默认的转移(注意鼠标光标的 变化)放置在状态或者连接节点的边缘,就可以完成默认转移的创建了说明:Stateflow 的状态图中,同一层次上的状态只有两种工作模式,一种叫做异或(OR)模式,另 一种叫做并行(AND)模式。在异或模式下,同 一层次上的子状态必须有一个子状态具有默认的转移,同时该子状态被称为默认状态。由于 Stateflow 是一种事件驱动模型建模环境,不允许出现模型运行的二义性,

9、因此,正确的使用默认转移就非常重要,因为默认转移就是用来改变状态机或者父层次状态被激活时,相应的子状态二义性的图形元素在默认转移上添加标签的方法和在一般的转移上添加标签的方法是一样的,可以在默认转移的标签上加上事件和条件来进行限制,也可以将动作和默认转移相关联。不过,一个有限状态系统必须确保能够正确地被激活,这一点在使用默认转移时非常重要,因为状态机的默认转移只有一次执行的机会。如果没有明确的子状态能够被激活,系统会报告二义性错误第11页/共68页第十一页,编辑于星期六:二十二点 三十分。5.添加注释:如果需要在 Stateflow 的框图中使用 LaTex 字符集,则需要按照下列步骤完成:(

10、1)在已经添加的文本上单击鼠标右键,这时将显示快捷菜单;(2)选择快捷菜单中 Text Format 子菜单中的 LaTex Instructions 复选项;(3)用鼠标单击已经添加的文本注释,重新进入文本编辑模式;(4)添加 LaTex 字符,例如键入 y=itAealphaxsin(betaitt);(5)在文本编辑区外单击鼠标完成注释的添加,此时的注释内 容将变为y=Aeax sin(bt),如图所示。第12页/共68页第十二页,编辑于星期六:二十二点 三十分。编辑图形对象外观:改变尺寸和位置单击右键单击右键在注释上单击鼠标右键而出现的快捷菜单。在菜单中,共计有三个子菜单可以用来修改注

11、释文本的外观,分别为:Font Size:设置注释文本的尺寸。Text Format:设置注释文本的基本格式,包 括粗体、斜体和 LaTex 字符支持。Text Alignment:设置注释文本的对齐方式,包括左对齐、居中和右对齐。第13页/共68页第十三页,编辑于星期六:二十二点 三十分。第二章第二章 状态图的仿真状态图的仿真状态图的基本概念事件数据对象状态图的更新模式stateflow模型查看器第14页/共68页第十四页,编辑于星期六:二十二点 三十分。状态图的基本概念状态图管理和维护着当前模型中活动的状态。一旦包含了状态转移的状态图处于活动的状态,则状态图将一直处于这种活动状态,直到整个

12、模型仿真计算结束。并且,只要状态图处于活动状态,则必定至少有一个状态处于激活状态。状态图从非活动状态到活动状态以及状态之间的切换,都要由事件触发,即在事件的驱动之下,状态图才能仿真运行。所谓 Stateflow 的事件触发,就是事件驱动的发生。触发可以由系统隐含发生,也可以按照要求显性地定义。在 Simulink 中,显性定义的事件就是某些过零信号的发生,也就是说,只有过零信号才能够触发状态转移的发生或者状态机的激活。由这种触发而引起的相应的动作执行,被称为事件驱动。第15页/共68页第十五页,编辑于星期六:二十二点 三十分。事件:添加事件:执行 Stateflow 图形编辑器 Add 菜单下

13、 Event 子菜单中的任何一个命令,例如执行 Local 命令,则 Stateflow 将弹出如图所示的对话框。Scope 属性:该属性定义事件的作用类型。在 Add菜单下的 Event 子菜单中具有三个菜单命令,分别为 Local、Input from Simulink 和 Output to Simulink,通过这三个菜单命令定义事件,得到的 Scope 属性不一致。具有Local属性的事件是在状态图内部发挥作用。具有Input from Simulink 属性的事件是从 Simulink框图输入到 Stateflow 中的,也就是 Stateflow 框图的外部触发事件。具有 Out

14、put to Simulink 属性的事件是从Stateflow 框图输出到 Simulink 中的,即利用 Stateflow 定义的事件驱动或者触发其他 Stateflow 框图或者子系统动作。第16页/共68页第十六页,编辑于星期六:二十二点 三十分。如果用户设置事件的 Scope 属性为 Input from Simulink 或者 Output to Simulink,则添加事件的对话框会发生变化,Trigger 属性:Trigger 属性总共有四个可能值,分别为 Either、Falling、Rising 和 FunctionCall。在 Simulink 条件执行子系统中,特别是

15、在使能或者触发子系统中,触发子系统工作的触发源就具有不同属性。触发子系统的触发源与这里的 Trigger 属性的意义完全一样,分别为双边沿触发、下降沿触发、上升沿触发。Function Call(函数调用)是一类比较特殊的触发属性第17页/共68页第十七页,编辑于星期六:二十二点 三十分。创建事件实例:运行过程中,单击 Manual Switch 模块向 Stateflow 框图发出事件第18页/共68页第十八页,编辑于星期六:二十二点 三十分。使用多个输入事件:同一个 Stateflow 的图块可以使用多个输入事件。但是,不论用户为 Stateflow 的图块定义了多少个输入事件,每个 St

16、ateflow 的图块都只能具有一个事件输入端口。因此,在向Stateflow 的图块增加不止一个输入事件时,需要将不同的事件通过 Mux 块组合成为输入事件向量,然后将组合后的输入事件向量连接到 Stateflow 图块上。第19页/共68页第十九页,编辑于星期六:二十二点 三十分。数 据 对 象:Stateflow 使用数据对象来管理维护 Stateflow 框图内部的数据信息。在 Stateflow 中,数据对象主要用于动作或者条件中。用户既可以限制数据对象在相应的图形对象内部使用,也可以将数据对象作为 Stateflow 与 Simulink 模型之间的接口来使用。执行 Statefl

17、ow 图形编辑器的 Add 菜单中 Data 子菜单下的任何一个命令,例如 Local,则 Stateflow 会打开如图所示的对话框。Scope 属性:Local、Input、Output 与事件相同Constant:所定义的数据对象在 Stateflow 模型中为常量即保持静态,数据对象在Simulink/Stateflow 模型运行过程中其数值一般不发生变化,并且数据在模型中为只读,不可写的状态。Parameter:所定义的数据对象将通过 Stateflow 框图的上层 Simulink 子系统封装之后的参数获取初值。也就是说当 Stateflow 的框图位于某个封装子系统内部时,Sta

18、teflow的 Parameter 类型数据对象可以直接获取封装子系统设定的参数。具有 Parameter 属性的数据对象与具有Constant 属性的数据对象类似,在整个仿真过程中,Stateflow 不能修改其数值。Data Store Memory:所定义的数据对象与 Simulink 数据空间共享,也就是说,该数据对象与 Simulink 工作空间中的某个数据对象相互绑定。此时该数据对象的名称必须与Simulink 工作空间中数据对象的名称一致。第20页/共68页第二十页,编辑于星期六:二十二点 三十分。数据类型模式(Data Type Mode)Inherited 类型的数据对象一般

19、为 Stateflow 的输入或者输出数据对象,它能够通过与Simulink 模块相连接的信号线来判断具体的数据类型对象。Built-in 类型是 Stateflow 数据对象默认的数据类型,通常情况下,都使用 Simulink 内建的数据类型作为数据对象的数据类型。Expression 类型是指可以通过一个表达式来表示数据类型Fixed point 类型用于模型的定点数据设置,若选择了该类型,则可以完成 Stateflow 模型数据的量化处理。第21页/共68页第二十一页,编辑于星期六:二十二点 三十分。状态图的更新模式不是所有的有限状态系统都具有外部事件的定义,有些模型就没有针对 Stat

20、eflow 模型定义任何输入事件,可是 Stateflow 的模型依然能够正常地运行。那么对于这种没有定义任何输入事件的系统,它是如何运行的呢?这就是状态图的更新模式所发挥的作用。Stateflow 的框图有三种更新模式,分别为 Inherited、Discrete 和 Continuous第22页/共68页第二十二页,编辑于星期六:二十二点 三十分。系统默认使用 Inherited 更新模式,在这种更新模式下可能存在以下三种情况:(1)有输入事件定义。如果 Stateflow 框图定义了输入事件,并且 Simulink 提供了相应输入事件,则整个框图就按照所定义的事件触发来更新。也就是说,在

21、相应类型的事件发生时,Stateflow 框图进行相应的工作,例如状态的转移、动作的执行等。(2)未定义输入事件但定义了输入数据。如果 Stateflow 框图没有定义事件而定义了输入数据,则 Stateflow 框图按照其连接的 Simulink 输入信号中更新频率最高的信号更新周期来更新框图,这相当于输入数据的采样更新触发了 Stateflow 框图的执行。(3)既未定义输入事件又未定义输入数据。如果 Stateflow 框图既没有定义输入事件,又没有定义输入数据,则 Stateflow 框图继承其父层次模型的更新周期。如果 Stateflow 框图位于系统模型的顶层,则 Stateflo

22、w 框图继承模型的仿真周期作为自己的更新周期。Discrete 更新模式,是将 Stateflow 框图看做有固定周期的离散块,在设置该更新模式时,Stateflow 框图属性对话框中的 Sample Time 属性需要设置具体的更新周期,单位为秒。Continuous更新模式,则 Stateflow 框图好比 Simulink 模型中的一个连续系统模块,此时 Stateflow 的框图将按照系统仿真步长完成更新。第23页/共68页第二十三页,编辑于星期六:二十二点 三十分。注意:如果为框图定义了输入事件,则框图的更新模式就只能设置为 Inherited,此时 Stateflow框图将严格按照

23、事件的发生来驱动有限状态系统的运行。当使用外部事件进行触发更新状态图时,默认地,第一个事件的发生用来唤醒状态图(激活状态图),而不是进行状态转移的执行。如果需要改变此模式,则需要设置 Stateflow框图属性中的 Execute(enter)Chart At Initialization 选项。选择了该选项,则意味着当 前的 Stateflow 框图将在模型初始化阶段就被激活,这样,在后续的事件触发过程中,就直接进行状态的 转换了第24页/共68页第二十四页,编辑于星期六:二十二点 三十分。第三章第三章 流程图流程图转移冲突流程图的创建图形函数stateflow模型调试器第25页/共68页第

24、二十五页,编辑于星期六:二十二点 三十分。概述:在 Stateflow 框图中,流程图是比较特殊的一种。流程图中不包含任何状态,它仅仅由连接节点和转移组成。由于流程图没有任何状态,因此流程图就不包含任何记忆元件(Stateflow 中只有状态是记忆元件),所以,在一次更新之中,流程图从检测其默认转移开始,到检测完每一条有效的通路且到达不具备有效出口的转移为止,在连续的两次触发之间,一直处于非活动的状态。转移冲突:所谓转移冲突,就是在 Stateflow 框图运行的过程中可能在某一时刻同时存在几个有效的转移,那么此时 Stateflow 将根据一些原则来处理这些冲突,这就是转移冲突的处理原则。假

25、设当前事件 E 发生并且条件 C 也满足,则四个转移通路都是有效的,即形成了转移冲突。那么 Stateflow 是如何处理这种情况呢?第26页/共68页第二十六页,编辑于星期六:二十二点 三十分。原则:当事件发生需要进行转移检测时,Stateflow 总是首先检测具有最多限制的转移,如果能够满足则执行这个转移,其他的有效转移就统统忽略。(1)如果此时发生的事件是 E 且条件 C 也满足,即该转移有效,则执行这个转移,其余的转移就不再进行检测和执行了(2)条件不满足则检测只有事件限制的转移;条件 C 不满足,此时发生的事件是 E,即该转移有效,则执行这个转移,其余的转移就不再进行检测和执行了。(

26、3)此时发生的事件不满足,则接着检测具有条件的转移;如果此时条件 C 能够满足,即该转移有效,则执行这个转移,其余的转移就不再进行检测和执行了。(4)如果条件和事件都不匹配,最后检测的转移就是那条无条件的转移,由于无条件的转移是肯定可以执行的总结:转移的检测次序就是由上至下分别检测,当系统发现一条有效的转移时,就立即执行,其他的转移即使有效,也都被忽略了。第27页/共68页第二十七页,编辑于星期六:二十二点 三十分。同限制级别的若干条转移同时有效状态 Standby 向 High 状态、Medium 状态和 Low 状态的转移都对使用条件进行了限制。根据前面的介绍,这三个转移由于都仅仅使用条件

27、进行了限制,因此它们具有相同的转移检测优先级别。所以这个框图在进行仿真的时候,就会报告转移冲突错误如果转移从状态出发,则从状态的左上角开始,按顺时针的方向决定转移的优先权;如果转移从连接节点出发,则从连接节点的 12 点方向开始,按顺时针的方向决定转移的优先权。几何原则:第28页/共68页第二十八页,编辑于星期六:二十二点 三十分。用户自定义检测次序:两个步骤:(1)在 Stateflow 图形编辑器中单击右键,在弹出的菜单中选择 Execution Order 子菜单下的 Enable User specified execution order for this chart命令,(2)用鼠

28、标右键单击需要改变检测次序的转移,例如要修改上图所示模型的第一个转移检测次 序,则用右键单击该转移,在出现的快捷菜单 的 Execution Order 子菜单下选择检测次序。由于这里从状态 A 到状态 B具有四个转移,因 此转移执行次序的选项为 14。默认地,该 转移检测次序为1,可以将其修改为其他数值,修改某一条转移的检测次序后,其他的转移可 以根据用户指定的次序以及 Stateflow 默认的检 测次序原则进行重新排序。第29页/共68页第二十九页,编辑于星期六:二十二点 三十分。常用逻辑结构模型:if(条件)动作if(条件)动作 A else 动作 Bif(条件 1)动作 A else

29、 if(条件 2)动作 B else 动作 C第30页/共68页第三十页,编辑于星期六:二十二点 三十分。if(条件 1)动作 A if(条件 2)动作 B switch-case第31页/共68页第三十一页,编辑于星期六:二十二点 三十分。for 循环 for(index=0;index nloops;index+)Action;while 循环while(Condition)Action;do-while 循环doAction;while(Condition)第32页/共68页第三十二页,编辑于星期六:二十二点 三十分。流程图回溯现象if(c1)act1;if(c2)act2;else i

30、f(c3)act3;else act4;分析:假设,条件 c1 为真,条件 c2 和条件 c3 为假第33页/共68页第三十三页,编辑于星期六:二十二点 三十分。注意:在流程图中,仅存在转移的检测,而不存在转移真正的执行。所以,在流程图中,所有的动作都需要在条件动作中完成,即使定义了转移动作,在执行流程图的时候,转移动作也不会发挥任何作用。在流程图中,存在且仅存在一个终止节点,流程图的更新执行最终终止在流程图的终止节点上。所有转移通路都必须最终汇合到终止节点。为每一个分支节点提供无条件的转移通路,用于控制一些异常情况或者未预料到的情况。流程图不能出现回溯现象。如果流程图位于 Stateflow

31、 的 Chart 层次,则在连续两次更新之间,整个 Stateflow 框图处于非活动的状态。第34页/共68页第三十四页,编辑于星期六:二十二点 三十分。状态中的流程图该 Stateflow 框图具有两个状态:状态 Normal 和状态 Inverse。在这两个状态中都包含了流程图。它们包含的流程图十分简单,就是根据输入数据进行相应的逻辑判断,然后决定具体的输出。从框图上看,这两个流程图的体系结构完全一致,有所区别的就是参数,即处理的数据不同,这里可以通过图形函数的形式来完成模型的创建。第35页/共68页第三十五页,编辑于星期六:二十二点 三十分。创建图形函数在 Stateflow 图形编辑

32、器的图形对象工具栏上单击图形函数按钮,在 Stateflow 图形编辑器中任意的空白位置单击鼠标左键,即完成了向现有模型增加图形函数的工作。第36页/共68页第三十六页,编辑于星期六:二十二点 三十分。stateflow调试器状态面板(StatusPane)控制面板(Control Pane)选项面板(Control Pane)显示面板(Display Pane)第37页/共68页第三十七页,编辑于星期六:二十二点 三十分。状态断点:State During:在执行状态的 During 动作之前进入调试模式State Entry:在执行状态的 Entry 动作之前进入调试模式。State Ex

33、it:在执行状态的 Exit 动作之前进入调试模式转移断点:When Tested:在转移被检测之前进入调试模式。When Valid:转移经过检测是有效的,在执行前进入调试模式。事件的断点:Start of Broadcast:在事件被广播之前进入调试模式End of Broadcast:在事件广播结束后进入调试模式图形函数的断点:Function Call:在函数被调用之前进入调试模式第38页/共68页第三十八页,编辑于星期六:二十二点 三十分。第四章第四章 有限状态系统有限状态系统层次化建模层次化建模状态动作层次化建模历史节点内部转移子状态图stateflow的查询工具第39页/共68页

34、第三十九页,编辑于星期六:二十二点 三十分。状态动作:entry:当事件发生,状态被激活时执行相应的动作exit:当事件发生,状态退出活动状态时执行相应的动作during:当事件发生,状态保持其活动状态时执行相应的动作on event 动作是指当状态处于活动状态,事件 event 发生,而状态并不退出活动状态时所执行的动作。bind 动作是指将事件或者数据对象与状态绑定的动作。被绑定的事件只能由状态以及状态的子状态进行广播,而被绑定的数据对象只能由状态以及状态的子状态中相应的动作进行修改。绑定的数据对象可以在其他状态中被访问,但是不能修改;绑定的事件可以被所有状态监听,但是不能由其他状态广播。

35、注意:在进行状态动作的定义时,可以使用状态动作关键字的简写方式,也就是说,在定义状态动作时只要写关键字的前两个字符即可。例如定义状态的 entry 动作,只要在状态中定义:en:data+;即可。on event 动作是 during 动作的特例,两者的区别就是:on event 动作需要有特定事件触发才可能执行;而 during 动作在有事件发生,但又没有使状态退出活动状态时就可以执行。第40页/共68页第四十页,编辑于星期六:二十二点 三十分。讨论车载播放器 on event 事件相当于 during 事件的子集,即当 STEP_UP 事件发生时,首先执行 during 动作,然后再来执行

36、 on STEP_UP 动作。这样,在发生 STEP_UP 事件时,track数据对象每次累加了两次。数据对象 data 与状态 A 进行了绑定,这样在其他的地方就只能读取 data,而不能修改数据对象 data。第41页/共68页第四十一页,编辑于星期六:二十二点 三十分。在动作中使用事件输出事件广播所谓事件广播,其实就是在动作中调用事件。事件广播主要用来在 Stateflow 中影响其他状态图或者条件执行子系统的运行。Simulink 的条件执行子系统有使能子系统、触发子系统和函数调用子系统,利用事件广播以及数据的输出就可以在 Stateflow 中调用这些不同类型的子系统,完成复杂的工作

37、。类型为 Input from Simulink 的事件是不能够通过状态动作、转移动作或者条件动作进行广播的。此外,类型为 Local 的事件也可以进行广播,这就是在第 6 章将要介绍的本地事件广播。第42页/共68页第四十二页,编辑于星期六:二十二点 三十分。输出状态的活动情况Stateflow 还可以将 Stateflow 状态的活动情况输出到 Simulink。利用 Stateflow 框图的活动情况可以触发、使能其他子系统或者 Stateflow 框图运行,从而实现系统的同步协调工作。第43页/共68页第四十三页,编辑于星期六:二十二点 三十分。函数调用子系统在 Stateflow 的

38、事件类型中,存在类型为函数调用(Function Call)的事件,此类事件能够触发函 数调用子系统。函数调用子系统是一类比较特殊的子系统,该类子系统在整个Simulink 模型内部运行起来就好比函数一样,需要通过其他的系统来调用才能够执行。当 Stateflow 框图中的转移动作发出函数调用事件之后,系统首先执行 Simulink 模型中的函数调用子系统;当函数调用子系统全部运行完毕,并将新的计算结果提供给 Stateflow 的输入数据对象后,Stateflow 才继续激活相应的目标状态。因此,在很多 Simulink 和 Stateflow 混合的系统模型中,都充分利用了这一“函数调用”

39、特性,利用 Stateflow 模型来控制 Simulink 子系统的运行,合理完成数据的交互任务。第44页/共68页第四十四页,编辑于星期六:二十二点 三十分。绑定事件如果将事件与状态绑定,则只有状态内的动作(状态动作)或者子状态的动作(子状态之间的转移动作和条件动作)能够调用该事件,实现事件的广播。事件广播可以是输出事件的广播,也可以是本地事件的广播。第45页/共68页第四十五页,编辑于星期六:二十二点 三十分。层次化建模层次化模型的构成第46页/共68页第四十六页,编辑于星期六:二十二点 三十分。层次化状态图的转移转移原则:(1)子状态的各种对象仅仅在父状态活动时才有可能执行或者有效(2

40、)当存在直接从父状态发出的转移时,可以不用考虑具体哪一个子状态处于活动状态(3)超转移优先于子状态之间的转移而被检测。case1:假设,当前 Super1 状态处于活动状态同时其子状态 Sub2 也处于活动状态,当事件 E发生时case2:如果 Super2 状态处于活动状态,同时其子状态 Sub4 处于活动状态,当事件 E发生时第47页/共68页第四十七页,编辑于星期六:二十二点 三十分。历史节点:车载音响系统为例,每次打开车载音响时,音响总是恢复前一次关闭音响时的状态,如果前一次关闭音响时正在收听激光唱机,则再次打开音响时,音响总是会恢复打开激光唱机,甚至从关闭音响时正在播放的音轨处继续播

41、放歌曲。那么像这样的系统用Stateflow 来进行建模就需要使用 Stateflow 中的历史节点。历史节点是一种特殊的 Stateflow 图形对象,它只能够用于具有层次的状态内部在层次化的框图子状态之间如果存在超转移,则历史节点也无法发挥作用历史节点能够影响默认转移的工作,使默认转移仅在首次激活系统时发挥作用,其余的时间就依赖于历史节点记录的状态来恢复子状态的活动情况第48页/共68页第四十八页,编辑于星期六:二十二点 三十分。内部转移:内部转移是一种特殊的转移。就是指在状态内部的转移,它从父状态内边缘出发,终止于父状态内的子状态或者连接节点边缘上,也可以终止于状态的内边缘。内部转移能够

42、适当地减小模型复杂度,提高模型的执行效率第49页/共68页第四十九页,编辑于星期六:二十二点 三十分。示例:讨论关于自循环转移的执行(1)当前状态 A 处于活动状态,事件 E 发生,但是条件 C1 不满足(2)事件 E 再次发生了,而且此时条件 C1 满足(3)事件 E 第三次发生,此时条件 C2 不满足(1)当前父状态 A 处于活动状态,同时子状态A1 处于活动状态,当事件 R 发生时(2)如果当前父状态 A 处于活动状态,同时子状态 A2 处于活动状态,当事件 R 发生第50页/共68页第五十页,编辑于星期六:二十二点 三十分。层次化模型的转移检测优先权转移检测的基本原则:(1)转移测试首

43、先从最高层次的活动状态开始,然后逐级向内检测;(2)外部转移优先于内部转移被检测;(3)在同样的层次上,超转移首先被检测。根据这些基本原则,有以下的检测顺序:(1)转移的测试总是从活动的父状态开始。向外的转移,即从父层次状态外边缘出发的转移首先被测试,这些转移能够使父状态退出活动转移,所以它们首先被检测。(2)接着被检测的是内部转移,即从父层次状态内边缘出发的转移。(3)从活动的子状态开始检测转移。从子状态外边缘出发穿越父状态边缘的转移超转移,首先被检测。(4)然后是父状态内部子状态之间的转移被检测。第51页/共68页第五十一页,编辑于星期六:二十二点 三十分。假设此时父状态 A 处于活动状态

44、并且子状态 A1处于活动状态,当触发发生时,根据前面介绍的层次化状态图转移检测优先权和转移冲突检测优先权,求系统处理的次序状态动作与状态执行的次序(1)当 Super 父状态被首次激活时(2)当父状态处于活动状态而此时 发生了某个事件触发时示例:讨论转移检测第52页/共68页第五十二页,编辑于星期六:二十二点 三十分。子状态图在创建层次化模型时,尽管使某个状态包含了其他的状态、转移以及连接节点等图形对象而构成了层次,但是在用鼠标移动父状态时,子状态并不跟随父状态移动,这对于编辑层次化的状态图很不方便,而且,当子层次内部的状态变得复杂时,框图的编辑区域是有限的。为了解决这些问题,就引出了子状态图

45、的方式。使用组合的状态(1)在需要组合的状态上单击鼠标右键,例如这里就需要右键单击 PowerON 状态。(2)在弹出的快捷菜单中执行 Make Contents 子菜单下的 Grouped 命令最便捷的方法是通过鼠标双击来完成,利用鼠标左键双击需要组合的状态,则状态会变成组合模式,再次双击,则取消组合模式。创建子状态图ex11第53页/共68页第五十三页,编辑于星期六:二十二点 三十分。第五章第五章 有限状态系统有限状态系统并行机制并行机制并行机制本地事件广播隐含事件时间逻辑第54页/共68页第五十四页,编辑于星期六:二十二点 三十分。并 行 机 制概述在有限状态系统中,状态的行为可以按照其

46、解析方式分为两大类:互斥状态(exclusive或者 OR)和并行状态(parallel 或者 AND)。如果在层次化的状态图中包含了互斥的状态,也就意味着同一时刻在同一层次的状态中仅有一个状态处于活动状态;若状态被设置为并行状态,则位于同一层次下的所有状态都在同一时刻处于活动状态。在同一层次下,状态要么是互斥的,要么是并行的,不可能在同一层次下存在两种模式共存的情况。状态 Slot 和状态 Player 的边框是虚线,因此这两个状态就是处于并行状态的 Stateflow 状态其内部包含的子状态 NoDisk 和HasDisk 以及 Stop 和 Play 状态边框是实线,因此子状态之间是互斥

47、的状态,子状态在相应的层次同一时刻只能有一个处于活动状态。第55页/共68页第五十五页,编辑于星期六:二十二点 三十分。当状态处于并行时,并行的状态并不是严格地同时被激活,它们的执行和激活也有一定的次序基本原则就是:在图形编辑器中,位置较高的状态具有较高的执行次序编号。处于同一水平线上的并行状态,左边的状态具有较高的执行次序编号。当第一个事件发生时,求系统首先激活整个状态图,依次激活相应的状态并执行动作当再次发生事件 E 时,求系统依次执行相应的转移并执行相应的动作第56页/共68页第五十六页,编辑于星期六:二十二点 三十分。图形盒的应用图形盒(Box)是一种比较特别的 Stateflow 图

48、形对象,它并不参与 Stateflow 的实际运行,也不能看做是状态。从图形盒上引出转移或者将转移的终点放置在图形盒的边缘上都是非法的。不过,图形盒能够影响并行状态的执行次序,在某些情况下可以将图形盒作为框图的组织形式。图形盒(Box)功能:层次化建模应用数据对象:创建在图形盒内部的本地数据对象只能够被图形盒内部包含的对 象使用影响并行状态的执行次序:图形盒对象是所有图形对象中位置最高的对象第57页/共68页第五十七页,编辑于星期六:二十二点 三十分。本地事件广播定义本地事件:本地事件主要用于包含并行状态的有限状态系统,使不同的并行状态之间进行交互。第58页/共68页第五十八页,编辑于星期六:

49、二十二点 三十分。广播本地事件进行本地事件广播就是将事件的名称写在相应的动作中就可以了。那么监听这个事件的相应动作状态转移、动作等就会在事件广播的时刻完成工作。直接事件广播直接事件广播,就是将特定的事件发送给指定的状态,而不是出现一呼百应的情况。直接事件广播需要通过函数 send 来实现,它的语法如下:send(event_name,state_name);第59页/共68页第五十九页,编辑于星期六:二十二点 三十分。受限事件广播将定义在状态内部的事件叫做受限事件(Qualified Event),在动作中实现受限事件广播的方法是通过以下语法实现的:state_name.event_name;

50、广播的事件仅仅被定义该事件的状态接收,因为这个事件是定义在指定的状态中的本地事件,在其他状态中,这个事件是没有意义的。事件广播的执行次序事件广播很类似函数的调用,可以将广播事件看做在动作执行的过程中调用了一个函数,在函数执行完毕退出之后,系统才继续后面的工作。也就是说,当事件被广播后,系统将与事件广播相关的所有动作都执行完毕之后,才会继续执行广播事件动作之后需要执行的其他动作。第60页/共68页第六十页,编辑于星期六:二十二点 三十分。一般事件广播的执行假设当前处于活动的子状态为 A1a 和 A2a,当事件 E1 发生时如果此时活动的子状态同样为 A1a 和 A2a,那么当事件 E1 发生时第

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

当前位置:首页 > 应用文书 > PPT文档

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁