Stateflow教程学习教案课件_第1页
Stateflow教程学习教案课件_第2页
Stateflow教程学习教案课件_第3页
Stateflow教程学习教案课件_第4页
Stateflow教程学习教案课件_第5页
已阅读5页,还剩131页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

会计学1Stateflow教程会计学1Stateflow教程Stateflow概述:

Stateflow是集成于Simulink中的图形化设计与开发工具,主要用于针对控制系统中的复杂控制逻辑进行建模与仿真,Stateflow适用于针对事件响应系统(ReactiveSystem)进行建模和仿真。与事件响应系统相对应的就是动态变换系统(DynamicTransformationalSystem)。动态变换系统通常可以利用数学表达式、方程等组成的输入/输出关系进行描述,像这样的系统利用Simulink进行建模是最为方便的。而事件响应系统通常利用一些自然语言或者逻辑表达式进行描述,这样的系统就需要利用Stateflow来进行建模。Stateflow与Simulink结合起来,可以创建确定性监管控制系统。利用Stateflow可视化的模型和直观的仿真能力,可以清晰、简洁地反映出复杂动态逻辑关系。Stateflow的基础是有限状态机理论,它通过对状态图、流程图的创建,对事件驱动系统进行建模和仿真。第1页/共68页Stateflow概述:Statefl第一章创建状态图Stateflow编辑器创建和编辑状态图第2页/共68页第一章创建状态图Stateflow编辑器第2页/共6Stateflow编辑器创建Simulink模型1.直接在MATLAB命令行窗体中键入指令sfnew2.打开Simulink库浏览器,在库浏览器中找到Stateflow的模块库第3页/共68页Stateflow编辑器创建Simulink模型第3页/双击模型文件或者库文件中的Stateflow图块打开Stateflow编辑器

执行Stateflow编辑器File菜单下的ChartProperties命令,打开属性框第4页/共68页双击模型文件或者库文件中的Stateflow图块打开S创建和编辑状态图插入图形对象1.创建状态在图形对象面板的状态图标上按下鼠标左键并保持,将状态Stateflow编辑器的空白区域中Keyword:StateActions就是状态动作。为数据对象进行赋值或者进行数据对象的运算也可以通过状态动作进行事件广播以触发其他系统的变化状态动作的关键字主要有三种:entry:当状态被激活时执行相应的动作。exit:当状态退出活动状态时执行相应的动作during:当状态保持其活动状态时执行相应的动作第5页/共68页创建和编辑状态图插入图形对象Keyword:State在状态上单击鼠标右键,在快捷菜单中选择Properties命令,可以通过状态的属性对话框进一步定义状态2.创建连接节点

连接节点作为转移通路的判决点或汇合点,也是在状态图中常用的图形元素之一,特别是在流程图中,由于流程图不能包含任何状态,因此只有依靠连接节点完成通路的连接和判断分支,连接节点不是记忆元件。第6页/共68页在状态上单击鼠标右键,在快捷菜单中选择Pro在图形对象面板的连接节点图标上按下鼠标左键并保持,将状态拖放到Stateflow编辑器的空白区域中。节点上单击鼠标右键,通过弹出的快捷菜单执行Properties命令,进入属性框3.创建转移转移是Stateflow框图中最常见的图形元素之一,无论是包含状态的状态图中还是没有状态的流程图中,几乎都存在转移。转移描述的是有限状态系统内的逻辑流。转移管理了当系统从当前状态改变时,这个系统可能发生的模式改变。当转移发生时,源状态变为非活动的状态,目标状态变为活动的状态。转移是带有箭头的线,这就使整个状态图或者流程图成为了“有向图”,状态或者流程之间的转换,将直接受到转移方向的约束。第7页/共68页在图形对象面板的连接节点图标上按下鼠标左键并保持,将状态创建转移的具体步骤是:(1)当鼠标光标接近状态的边缘时,鼠标光标将变成十字形状。(2)按下鼠标左键并保持,将引出的转移线拖放到目标状态的边缘即可,第8页/共68页创建转移的具体步骤是:第8页/共68页给转移添加标签的方法:(1)左键单击选中相应的转移,此时转移将显示问号;(2)左键单击出现的问号,则进入文本编辑状态;(3)在光标处插入文本;(4)单击Stateflow编辑器中任意一处,结束标签的插入。组成转移标签的四个部分不一定完整地出现,但是不论出现哪几个部分,标签的内容必须按照上面指定的顺序书写。条件动作与转移动作两者之间的区别:条件动作在条件满足的情况下就能够执行,而转移动作需要在整个转移通路都有效的情况下,在执行转移的时候才执行。第9页/共68页给转移添加标签的方法:组成转移标签的四个部分不一定完整地出现Stateflow中都可以使用三类语法元素作为动作:(1)数学运算表达式或者逻辑运算表达式。(2)调用函数。(3)事件广播。4.默认转移:默认转移是一类特殊的转移,可以把它看做是状态转移的特例。默认转移确定当有限状态机或者父层次状态处于活动状态的时候,在其所有的子状态中第一个被激活的状态。根据有限状态机的要求,当有限状态系统被激活时,必有相应的确定的某个状态被激活。而默认转移就定义了当状态机被激活或者层次模型中父层次状态被激活时,具体哪个子状态被激活。第10页/共68页Stateflow中都可以使用三类语法元素作为动作:第10创建默认转移的方法如下:鼠标单击图形对象面板中的默认转移图标,然后将默认的转移(注意鼠标光标的变化)放置在状态或者连接节点的边缘,就可以完成默认转移的创建了说明:Stateflow的状态图中,同一层次上的状态只有两种工作模式,一种叫做异或(OR)模式,另一种叫做并行(AND)模式。在异或模式下,同一层次上的子状态必须有一个子状态具有默认的转移,同时该子状态被称为默认状态。

由于Stateflow是一种事件驱动模型建模环境,不允许出现模型运行的二义性,因此,正确的使用默认转移就非常重要,因为默认转移就是用来改变状态机或者父层次状态被激活时,相应的子状态二义性的图形元素在默认转移上添加标签的方法和在一般的转移上添加标签的方法是一样的,可以在默认转移的标签上加上事件和条件来进行限制,也可以将动作和默认转移相关联。不过,一个有限状态系统必须确保能够正确地被激活,这一点在使用默认转移时非常重要,因为状态机的默认转移只有一次执行的机会。如果没有明确的子状态能够被激活,系统会报告二义性错误第11页/共68页创建默认转移的方法如下:第11页/共68页5.添加注释:如果需要在Stateflow的框图中使用LaTex字符集,则需要按照下列步骤完成:(1)在已经添加的文本上单击鼠标右键,这时将显示快捷菜单;(2)选择快捷菜单中TextFormat子菜单中的LaTexInstructions复选项;(3)用鼠标单击已经添加的文本注释,重新进入文本编辑模式;(4)添加LaTex字符,例如键入y={\itAe}^{\alphax}sin(\beta\itt);(5)在文本编辑区外单击鼠标完成注释的添加,此时的注释内容将变为y=Aeaxsin(bt),如图所示。第12页/共68页5.添加注释:如果需要在Stateflow的框图中使用编辑图形对象外观:

改变尺寸和位置单击右键单击右键在注释上单击鼠标右键而出现的快捷菜单。在菜单中,共计有三个子菜单可以用来修改注释文本的外观,分别为:FontSize:设置注释文本的尺寸。TextFormat:设置注释文本的基本格式,包括粗体、斜体和LaTex字符支持。TextAlignment:设置注释文本的对齐方式,包括左对齐、居中和右对齐。第13页/共68页编辑图形对象外观:改变尺寸和位置单击右键单击右键在注释上单第二章状态图的仿真状态图的基本概念事件数据对象状态图的更新模式stateflow模型查看器第14页/共68页第二章状态图的仿真状态图的基本概念第14页/共68页状态图的基本概念状态图管理和维护着当前模型中活动的状态。一旦包含了状态转移的状态图处于活动的状态,则状态图将一直处于这种活动状态,直到整个模型仿真计算结束。并且,只要状态图处于活动状态,则必定至少有一个状态处于激活状态。状态图从非活动状态到活动状态以及状态之间的切换,都要由事件触发,即在事件的驱动之下,状态图才能仿真运行。所谓Stateflow的事件触发,就是事件驱动的发生。触发可以由系统隐含发生,也可以按照要求显性地定义。在Simulink中,显性定义的事件就是某些过零信号的发生,也就是说,只有过零信号才能够触发状态转移的发生或者状态机的激活。由这种触发而引起的相应的动作执行,被称为事件驱动。第15页/共68页状态图的基本概念状态图管理和维护着当前模型中活动的状态。一事件:添加事件:执行Stateflow图形编辑器Add菜单下Event子菜单中的任何一个命令,例如执行Local命令,则Stateflow将弹出如图所示的对话框。Scope属性:该属性定义事件的作用类型。在Add菜单下的Event子菜单中具有三个菜单命令,分别为Local、InputfromSimulink和OutputtoSimulink,通过这三个菜单命令定义事件,得到的Scope属性不一致。具有Local属性的事件是在状态图内部发挥作用。具有InputfromSimulink属性的事件是从Simulink框图输入到Stateflow中的,也就是Stateflow框图的外部触发事件。具有OutputtoSimulink属性的事件是从Stateflow框图输出到Simulink中的,即利用Stateflow定义的事件驱动或者触发其他Stateflow框图或者子系统动作。第16页/共68页事件:添加事件:Scope属性:该属性定义事件的作用类型。如果用户设置事件的Scope属性为InputfromSimulink或者OutputtoSimulink,则添加事件的对话框会发生变化,Trigger属性:Trigger属性总共有四个可能值,分别为Either、Falling、Rising和FunctionCall。在Simulink条件执行子系统中,特别是在使能或者触发子系统中,触发子系统工作的触发源就具有不同属性。触发子系统的触发源与这里的Trigger属性的意义完全一样,分别为双边沿触发、下降沿触发、上升沿触发。FunctionCall(函数调用)是一类比较特殊的触发属性第17页/共68页如果用户设置事件的Scope属性为Inputfrom创建事件实例:

运行过程中,单击ManualSwitch模块向Stateflow框图发出事件第18页/共68页创建事件实例:运行过程中,单击ManualSwitc使用多个输入事件:同一个Stateflow的图块可以使用多个输入事件。但是,不论用户为Stateflow的图块定义了多少个输入事件,每个Stateflow的图块都只能具有一个事件输入端口。因此,在向Stateflow的图块增加不止一个输入事件时,需要将不同的事件通过Mux块组合成为输入事件向量,然后将组合后的输入事件向量连接到Stateflow图块上。第19页/共68页使用多个输入事件:同一个Stateflow的图块可以使用数据对象:Stateflow使用数据对象来管理维护Stateflow框图内部的数据信息。在Stateflow中,数据对象主要用于动作或者条件中。用户既可以限制数据对象在相应的图形对象内部使用,也可以将数据对象作为Stateflow与Simulink模型之间的接口来使用。执行Stateflow图形编辑器的Add菜单中Data子菜单下的任何一个命令,例如Local,则Stateflow会打开如图所示的对话框。Scope属性:Local、Input、Output与事件相同Constant:所定义的数据对象在Stateflow模型中为常量即保持静态,数据对象在Simulink/Stateflow模型运行过程中其数值一般不发生变化,并且数据在模型中为只读,不可写的状态。Parameter:所定义的数据对象将通过Stateflow框图的上层Simulink子系统封装之后的参数获取初值。也就是说当Stateflow的框图位于某个封装子系统内部时,Stateflow的Parameter类型数据对象可以直接获取封装子系统设定的参数。具有Parameter属性的数据对象与具有Constant属性的数据对象类似,在整个仿真过程中,Stateflow不能修改其数值。DataStoreMemory:所定义的数据对象与Simulink数据空间共享,也就是说,该数据对象与Simulink工作空间中的某个数据对象相互绑定。此时该数据对象的名称必须与Simulink工作空间中数据对象的名称一致。第20页/共68页数据对象:Stateflow使用数据对象来管理维护数据类型模式(DataTypeMode)Inherited类型的数据对象一般为Stateflow的输入或者输出数据对象,它能够通过与Simulink模块相连接的信号线来判断具体的数据类型对象。Built-in类型是Stateflow数据对象默认的数据类型,通常情况下,都使用Simulink内建的数据类型作为数据对象的数据类型。Expression类型是指可以通过一个表达式来表示数据类型Fixedpoint类型用于模型的定点数据设置,若选择了该类型,则可以完成Stateflow模型数据的量化处理。第21页/共68页数据类型模式(DataTypeMode)第21页/共6状态图的更新模式不是所有的有限状态系统都具有外部事件的定义,有些模型就没有针对Stateflow模型定义任何输入事件,可是Stateflow的模型依然能够正常地运行。那么对于这种没有定义任何输入事件的系统,它是如何运行的呢?这就是状态图的更新模式所发挥的作用。Stateflow的框图有三种更新模式,分别为Inherited、Discrete和Continuous第22页/共68页状态图的更新模式不是所有的有限状态系统都具有外部事件的定义,系统默认使用Inherited更新模式,在这种更新模式下可能存在以下三种情况:(1)有输入事件定义。如果Stateflow框图定义了输入事件,并且Simulink提供了相应输入事件,则整个框图就按照所定义的事件触发来更新。也就是说,在相应类型的事件发生时,Stateflow框图进行相应的工作,例如状态的转移、动作的执行等。(2)未定义输入事件但定义了输入数据。如果Stateflow框图没有定义事件而定义了输入数据,则Stateflow框图按照其连接的Simulink输入信号中更新频率最高的信号更新周期来更新框图,这相当于输入数据的采样更新触发了Stateflow框图的执行。(3)既未定义输入事件又未定义输入数据。如果Stateflow框图既没有定义输入事件,又没有定义输入数据,则Stateflow框图继承其父层次模型的更新周期。如果Stateflow框图位于系统模型的顶层,则Stateflow框图继承模型的仿真周期作为自己的更新周期。Discrete更新模式,是将Stateflow框图看做有固定周期的离散块,在设置该更新模式时,Stateflow框图属性对话框中的SampleTime属性需要设置具体的更新周期,单位为秒。Continuous更新模式,则Stateflow框图好比Simulink模型中的一个连续系统模块,此时Stateflow的框图将按照系统仿真步长完成更新。第23页/共68页系统默认使用Inherited更新模式,在这种更新模式下注意:如果为框图定义了输入事件,则框图的更新模式就只能设置为Inherited,此时Stateflow框图将严格按照事件的发生来驱动有限状态系统的运行。当使用外部事件进行触发更新状态图时,默认地,第一个事件的发生用来唤醒状态图(激活状态图),而不是进行状态转移的执行。如果需要改变此模式,则需要设置Stateflow框图属性中的Execute(enter)ChartAtInitialization选项。选择了该选项,则意味着当前的Stateflow框图将在模型初始化阶段就被激活,这样,在后续的事件触发过程中,就直接进行状态的转换了第24页/共68页注意:如果为框图定义了输入事件,则框图的更新模式就只能设置为第三章流程图转移冲突流程图的创建图形函数stateflow模型调试器第25页/共68页第三章流程图转移冲突第25页/共68页概述:在Stateflow框图中,流程图是比较特殊的一种。流程图中不包含任何状态,它仅仅由连接节点和转移组成。由于流程图没有任何状态,因此流程图就不包含任何记忆元件(Stateflow中只有状态是记忆元件),所以,在一次更新之中,流程图从检测其默认转移开始,到检测完每一条有效的通路且到达不具备有效出口的转移为止,在连续的两次触发之间,一直处于非活动的状态。转移冲突:所谓转移冲突,就是在Stateflow框图运行的过程中可能在某一时刻同时存在几个有效的转移,那么此时Stateflow将根据一些原则来处理这些冲突,这就是转移冲突的处理原则。假设当前事件E发生并且条件C也满足,则四个转移通路都是有效的,即形成了转移冲突。那么Stateflow是如何处理这种情况呢?第26页/共68页概述:在Stateflow框图中,流程图是比较特殊的一原则:当事件发生需要进行转移检测时,Stateflow总是首先检测具有最多限制的转移,如果能够满足则执行这个转移,其他的有效转移就统统忽略。(1)如果此时发生的事件是E且条件C也满足,即该转移有效,则执行这个转移,其余的转移就不再进行检测和执行了(2)条件不满足则检测只有事件限制的转移;条件C不满足,此时发生的事件是E,即该转移有效,则执行这个转移,其余的转移就不再进行检测和执行了。(3)此时发生的事件不满足,则接着检测具有条件的转移;如果此时条件C能够满足,即该转移有效,则执行这个转移,其余的转移就不再进行检测和执行了。(4)如果条件和事件都不匹配,最后检测的转移就是那条无条件的转移,由于无条件的转移是肯定可以执行的总结:转移的检测次序就是由上至下分别检测,当系统发现一条有效的转移时,就立即执行,其他的转移即使有效,也都被忽略了。第27页/共68页原则:当事件发生需要进行转移检测时,Stateflow总同限制级别的若干条转移同时有效状态Standby向High状态、Medium状态和Low状态的转移都对使用条件进行了限制。根据前面的介绍,这三个转移由于都仅仅使用条件进行了限制,因此它们具有相同的转移检测优先级别。所以这个框图在进行仿真的时候,就会报告转移冲突错误如果转移从状态出发,则从状态的左上角开始,按顺时针的方向决定转移的优先权;如果转移从连接节点出发,则从连接节点的12点方向开始,按顺时针的方向决定转移的优先权。几何原则:第28页/共68页同限制级别的若干条转移同时有效状态Standby向Hi用户自定义检测次序:两个步骤:(1)在Stateflow图形编辑器中单击右键,在弹出的菜单中选择ExecutionOrder子菜单下的Enable'Userspecifiedexecutionorder'forthischart…命令,(2)用鼠标右键单击需要改变检测次序的转移,例如要修改上图所示模型的第一个转移检测次序,则用右键单击该转移,在出现的快捷菜单的ExecutionOrder子菜单下选择检测次序。由于这里从状态A到状态B具有四个转移,因此转移执行次序的选项为1~4。默认地,该转移检测次序为1,可以将其修改为其他数值,修改某一条转移的检测次序后,其他的转移可以根据用户指定的次序以及Stateflow默认的检测次序原则进行重新排序。第29页/共68页用户自定义检测次序:两个步骤:(2)用鼠标右键单击需要改变检常用逻辑结构模型:if(条件){动作}if(条件){动作A}else{动作B}if(条件1){动作A}elseif(条件2){动作B}else{动作C}第30页/共68页常用逻辑结构模型:if(条件){动作}if(条件){动作Aif(条件1){动作Aif(条件2){动作B}}switch-case第31页/共68页if(条件1){动作Aif(条件2){动作B}for循环for(index=0;index<nloops;index++){Action;}while循环while(Condition){Action;}do-while循环do{Action;}while(Condition)第32页/共68页for循环for(index=0;ind流程图回溯现象if(c1){act1;if(c2){act2;}elseif(c3){act3;}}else{act4;}分析:假设,条件c1为真,条件c2和条件c3为假第33页/共68页流程图回溯现象if(c1)分析:假设,条件c1为真,第注意:在流程图中,仅存在转移的检测,而不存在转移真正的执行。所以,在流程图中,所有的动作都需要在条件动作中完成,即使定义了转移动作,在执行流程图的时候,转移动作也不会发挥任何作用。在流程图中,存在且仅存在一个终止节点,流程图的更新执行最终终止在流程图的终止节点上。所有转移通路都必须最终汇合到终止节点。为每一个分支节点提供无条件的转移通路,用于控制一些异常情况或者未预料到的情况。流程图不能出现回溯现象。如果流程图位于Stateflow的Chart层次,则在连续两次更新之间,整个Stateflow框图处于非活动的状态。第34页/共68页注意:在流程图中,仅存在转移的检测,而不存在转移真正的执状态中的流程图该Stateflow框图具有两个状态:状态Normal和状态Inverse。在这两个状态中都包含了流程图。它们包含的流程图十分简单,就是根据输入数据进行相应的逻辑判断,然后决定具体的输出。从框图上看,这两个流程图的体系结构完全一致,有所区别的就是参数,即处理的数据不同,这里可以通过图形函数的形式来完成模型的创建。第35页/共68页状态中的流程图该Stateflow框图具有两个状态:状创建图形函数在Stateflow图形编辑器的图形对象工具栏上单击图形函数按钮,在Stateflow图形编辑器中任意的空白位置单击鼠标左键,即完成了向现有模型增加图形函数的工作。第36页/共68页创建图形函数在Stateflow图形编辑器的图形对象工具stateflow调试器状态面板(StatusPane)控制面板(ControlPane)选项面板(ControlPane)显示面板(DisplayPane)第37页/共68页stateflow调试器状态面板(StatusPane)第3状态断点:StateDuring:在执行状态的During动作之前进入调试模式StateEntry:在执行状态的Entry动作之前进入调试模式。StateExit:在执行状态的Exit动作之前进入调试模式转移断点:WhenTested:在转移被检测之前进入调试模式。WhenValid:转移经过检测是有效的,在执行前进入调试模式。事件的断点:StartofBroadcast:在事件被广播之前进入调试模式EndofBroadcast:在事件广播结束后进入调试模式图形函数的断点:FunctionCall:在函数被调用之前进入调试模式第38页/共68页状态断点:第38页/共68页第四章有限状态系统—层次化建模状态动作层次化建模历史节点内部转移子状态图stateflow的查询工具第39页/共68页第四章有限状态系统—层次化建模状态动作第39页/共68状态动作:entry:当事件发生,状态被激活时执行相应的动作exit:当事件发生,状态退出活动状态时执行相应的动作during:当事件发生,状态保持其活动状态时执行相应的动作onevent动作是指当状态处于活动状态,事件event发生,而状态并不退出活动状态时所执行的动作。bind动作是指将事件或者数据对象与状态绑定的动作。被绑定的事件只能由状态以及状态的子状态进行广播,而被绑定的数据对象只能由状态以及状态的子状态中相应的动作进行修改。绑定的数据对象可以在其他状态中被访问,但是不能修改;绑定的事件可以被所有状态监听,但是不能由其他状态广播。注意:在进行状态动作的定义时,可以使用状态动作关键字的简写方式,也就是说,在定义状态动作时只要写关键字的前两个字符即可。例如定义状态的entry动作,只要在状态中定义:en:data++;即可。onevent动作是during动作的特例,两者的区别就是:onevent动作需要有特定事件触发才可能执行;而during动作在有事件发生,但又没有使状态退出活动状态时就可以执行。第40页/共68页状态动作:entry:当事件发生,状态被激活时执行相应的动讨论车载播放器onevent事件相当于during事件的子集,即当STEP_UP事件发生时,首先执行during动作,然后再来执行onSTEP_UP动作。这样,在发生STEP_UP事件时,track数据对象每次累加了两次。数据对象data与状态A进行了绑定,这样在其他的地方就只能读取data,而不能修改数据对象data。第41页/共68页讨论车载播放器onevent事件相当于during在动作中使用事件输出事件广播所谓事件广播,其实就是在动作中调用事件。事件广播主要用来在Stateflow中影响其他状态图或者条件执行子系统的运行。Simulink的条件执行子系统有使能子系统、触发子系统和函数调用子系统,利用事件广播以及数据的输出就可以在Stateflow中调用这些不同类型的子系统,完成复杂的工作。类型为InputfromSimulink的事件是不能够通过状态动作、转移动作或者条件动作进行广播的。此外,类型为Local的事件也可以进行广播,这就是在第6章将要介绍的本地事件广播。第42页/共68页在动作中使用事件输出事件广播第42页/共68页输出状态的活动情况Stateflow还可以将Stateflow状态的活动情况输出到Simulink。利用Stateflow框图的活动情况可以触发、使能其他子系统或者Stateflow框图运行,从而实现系统的同步协调工作。第43页/共68页输出状态的活动情况第43页/共68页函数调用子系统在Stateflow的事件类型中,存在类型为函数调用(FunctionCall)的事件,此类事件能够触发函数调用子系统。函数调用子系统是一类比较特殊的子系统,该类子系统在整个Simulink模型内部运行起来就好比函数一样,需要通过其他的系统来调用才能够执行。当Stateflow框图中的转移动作发出函数调用事件之后,系统首先执行Simulink模型中的函数调用子系统;当函数调用子系统全部运行完毕,并将新的计算结果提供给Stateflow的输入数据对象后,Stateflow才继续激活相应的目标状态。因此,在很多Simulink和Stateflow混合的系统模型中,都充分利用了这一“函数调用”特性,利用Stateflow模型来控制Simulink子系统的运行,合理完成数据的交互任务。第44页/共68页函数调用子系统当Stateflow框图中的转移动作发出第绑定事件如果将事件与状态绑定,则只有状态内的动作(状态动作)或者子状态的动作(子状态之间的转移动作和条件动作)能够调用该事件,实现事件的广播。事件广播可以是输出事件的广播,也可以是本地事件的广播。第45页/共68页绑定事件第45页/共68页层次化建模层次化模型的构成第46页/共68页层次化建模层次化模型的构成第46页/共68页层次化状态图的转移转移原则:(1)子状态的各种对象仅仅在父状态活动时才有可能执行或者有效(2)当存在直接从父状态发出的转移时,可以不用考虑具体哪一个子状态处于活动状态(3)超转移优先于子状态之间的转移而被检测。case1:假设,当前Super1状态处于活动状态

同时其子状态Sub2也处于活动状态,当事件E发生时case2:如果Super2状态处于活动状态,同时其子状态Sub4处于活动状态,当事件E发生时第47页/共68页层次化状态图的转移case1:假设,当前Super1状历史节点:车载音响系统为例,每次打开车载音响时,音响总是恢复前一次关闭音响时的状态,如果前一次关闭音响时正在收听激光唱机,则再次打开音响时,音响总是会恢复打开激光唱机,甚至从关闭音响时正在播放的音轨处继续播放歌曲。那么像这样的系统用Stateflow来进行建模就需要使用Stateflow中的历史节点。历史节点是一种特殊的Stateflow图形对象,它只能够用于具有层次的状态内部在层次化的框图子状态之间如果存在超转移,则历史节点也无法发挥作用历史节点能够影响默认转移的工作,使默认转移仅在首次激活系统时发挥作用,其余的时间就依赖于历史节点记录的状态来恢复子状态的活动情况第48页/共68页历史节点:历史节点是一种特殊的Stateflow图形对象内部转移:内部转移是一种特殊的转移。就是指在状态内部的转移,它从父状态内边缘出发,终止于父状态内的子状态或者连接节点边缘上,也可以终止于状态的内边缘。内部转移能够适当地减小模型复杂度,提高模型的执行效率第49页/共68页内部转移:内部转移能够适当地减小模型复杂度,提高模型的执行示例:讨论关于自循环转移的执行(1)当前状态A处于活动状态,事件E发生,但是条件C1不满足(2)事件E再次发生了,而且此时条件C1满足(3)事件E第三次发生,此时条件C2不满足(1)当前父状态A处于活动状态,同时子状态A1处于活动状态,当事件R发生时(2)如果当前父状态A处于活动状态,同时子状态A2处于活动状态,当事件R发生第50页/共68页示例:讨论(1)当前状态A处于活动状态,(2)事件E层次化模型的转移检测优先权转移检测的基本原则:(1)转移测试首先从最高层次的活动状态开始,然后逐级向内检测;(2)外部转移优先于内部转移被检测;(3)在同样的层次上,超转移首先被检测。

根据这些基本原则,有以下的检测顺序:(1)转移的测试总是从活动的父状态开始。向外的转移,即从父层次状态外边缘出发的转移首先被测试,这些转移能够使父状态退出活动转移,所以它们首先被检测。(2)接着被检测的是内部转移,即从父层次状态内边缘出发的转移。(3)从活动的子状态开始检测转移。从子状态外边缘出发穿越父状态边缘的转移——超转移,首先被检测。(4)然后是父状态内部子状态之间的转移被检测。第51页/共68页层次化模型的转移检测优先权转移检测的基本原则:第51页/共6假设此时父状态A处于活动状态并且子状态A1处于活动状态,当触发发生时,根据前面介绍的层次化状态图转移检测优先权和转移冲突检测优先权,求系统处理的次序状态动作与状态执行的次序(1)当Super父状态被首次激活时(2)当父状态处于活动状态而此时发生了某个事件触发时示例:讨论转移检测第52页/共68页假设此时父状态A处于活动状态并且子状态A1状态动作与状子状态图在创建层次化模型时,尽管使某个状态包含了其他的状态、转移以及连接节点等图形对象而构成了层次,但是在用鼠标移动父状态时,子状态并不跟随父状态移动,这对于编辑层次化的状态图很不方便,而且,当子层次内部的状态变得复杂时,框图的编辑区域是有限的。为了解决这些问题,就引出了子状态图的方式。使用组合的状态(1)在需要组合的状态上单击鼠标右键,例如这里就需要右键单击PowerON状态。(2)在弹出的快捷菜单中执行MakeContents子菜单下的Grouped命令最便捷的方法是通过鼠标双击来完成,利用鼠标左键双击需要组合的状态,则状态会变成组合模式,再次双击,则取消组合模式。创建子状态图ex11第53页/共68页子状态图在创建层次化模型时,尽管使某个状态包含了其他的状态第五章有限状态系统—并行机制并行机制本地事件广播隐含事件时间逻辑第54页/共68页第五章有限状态系统—并行机制并行机制第54页/共68页并行机制概述在有限状态系统中,状态的行为可以按照其解析方式分为两大类:互斥状态(exclusive或者OR)和并行状态(parallel或者AND)。如果在层次化的状态图中包含了互斥的状态,也就意味着同一时刻在同一层次的状态中仅有一个状态处于活动状态;若状态被设置为并行状态,则位于同一层次下的所有状态都在同一时刻处于活动状态。在同一层次下,状态要么是互斥的,要么是并行的,不可能在同一层次下存在两种模式共存的情况。状态Slot和状态Player的边框是虚线,因此这两个状态就是处于并行状态的Stateflow状态其内部包含的子状态NoDisk和HasDisk以及Stop和Play状态边框是实线,因此子状态之间是互斥的状态,子状态在相应的层次同一时刻只能有一个处于活动状态。第55页/共68页并行机制概述状态Slot和状态Player其内当状态处于并行时,并行的状态并不是严格地同时被激活,它们的执行和激活也有一定的次序基本原则就是:在图形编辑器中,位置较高的状态具有较高的执行次序编号。处于同一水平线上的并行状态,左边的状态具有较高的执行次序编号。当第一个事件发生时,求系统首先激活整个状态图,依次激活相应的状态并执行动作当再次发生事件E时,求系统依次执行相应的转移并执行相应的动作第56页/共68页当状态处于并行时,并行的状态并不是严格地同时被激活,它们图形盒的应用图形盒(Box)是一种比较特别的Stateflow图形对象,它并不参与Stateflow的实际运行,也不能看做是状态。从图形盒上引出转移或者将转移的终点放置在图形盒的边缘上都是非法的。不过,图形盒能够影响并行状态的执行次序,在某些情况下可以将图形盒作为框图的组织形式。图形盒(Box)功能:层次化建模应用数据对象:创建在图形盒内部的本地数据对象只能够被图形盒内部包含的对象使用影响并行状态的执行次序:图形盒对象是所有图形对象中位置最高的对象第57页/共68页图形盒的应用图形盒(Box)是一种比较特别的Statefl本地事件广播定义本地事件:本地事件主要用于包含并行状态的有限状态系统,使不同的并行状态之间进行交互。第58页/共68页本地事件广播定义本地事件:第58页/共68页广播本地事件进行本地事件广播就是将事件的名称写在相应的动作中就可以了。那么监听这个事件的相应动作——状态转移、动作等就会在事件广播的时刻完成工作。直接事件广播直接事件广播,就是将特定的事件发送给指定的状态,而不是出现一呼百应的情况。直接事件广播需要通过函数send来实现,它的语法如下:send(event_name,state_name);第59页/共68页广播本地事件第59页/共68页受限事件广播将定义在状态内部的事件叫做受限事件(QualifiedEvent),在动作中实现受限事件广播的方法是通过以下语法实现的:state_name.event_name;广播的事件仅仅被定义该事件的状态接收,因为这个事件是定义在指定的状态中的本地事件,在其他状态中,这个事件是没有意义的。事件广播的执行次序事件广播很类似函数的调用,可以将广播事件看做在动作执行的过程中调用了一个函数,在函数执行完毕退出之后,系统才继续后面的工作。也就是说,当事件被广播后,系统将与事件广播相关的所有动作都执行完毕之后,才会继续执行广播事件动作之后需要执行的其他动作。第60页/共68页受限事件广播事件广播的执行次序事件广播很类似函数的调用,可以一般事件广播的执行假设当前处于活动的子状态为A1a和A2a,当事件E1发生时如果此时活动的子状态同样为A1a和A2a,那么当事件E1发生时第61页/共68页一般事件广播的执行假设当前处于活动的子状态为A1a和A直接事件广播的执行状态图的本地事件广播能够影响状态图内部所有相关的对象,为了避免事件广播引起一些不必要的动作执行,需要使用直接事件广播,将事件直接发送给状态。

假设当前处于活动的子状态为A1a和A2a,当事件E1发生时受限事件广播的执行假设当前处于活动的子状态为A1a和A2a,当事件E1发生时第62页/共68页直接事件广播的执行假设当前处于活动受限事件广播的执行假设当前早期返回逻辑Stateflow在处理状态机工作时实际上是一种单线程的工作方式,事件广播会打断当前的工作流程,而且只有在广播事件相关的工作全部结束之后,才继续处理原来的后续工作。在这种处理方式下,事件广播对原有的工作流程有时可能会造成一些影响,并且产生一些冲突现象。针对不同的动作类型,Stateflow解决的原则略有不同,这里总结如下:Entry动作:如果与事件广播相关的所有动作都执行完毕之后,状态已经不再处于活动状态,则所有剩余的entry动作以及进入状态之后的相应处理就不运行了。Exit动作:如果与事件广播相关的所有动作都执行完毕之后,状态已经不再处于活动状态,则所有剩余的exit动作以及退出源状态进入目标状态之间的转移就不运行了。During动作:如果与事件广播相关的所有动作都执行完毕之后,状态已经不再处于活动状态,则所有剩余的during动作就不运行了。条件动作:如果与事件广播相关的动作都执行完毕之后,转移流程的源状态或者流程图的父层次状态不再处于活动状态,则所有剩余的未执行或未检测流程就不再被检测执行了。转移动作:如果与事件广播相关的动作都执行完毕之后,转移通路的父层次状态不再处于活动状态,或者父层次状态中另外一个子状态被激活了,则所有剩余的未执行的转移动作就不再执行了。当前活动的状态为A,在事件E发生时第63页/共68页早期返回逻辑Stateflow在处理状态机工作时实际上是一简化并行状态图的设计隐含事件隐含事件(ImplicitEvents),就是在Stateflow模型运行过程中,状态图或者状态发生了某些变化时,系统将其作为某些类型事件来处理的事件。隐含事件之所以隐含是因为在使用这些类型的事件时,用户不需要在数据字典中明显地定义事件就可以直接被Stateflow使用。隐含事件类型:状态图被唤醒。状态被激活,进入活动状态状态退出活动状态数据对象的数值发生了变化。Stateflow中,是通过若干关键字来定义这些隐含事件的,这些关键字包括:change或chg:数据对象发生变化时发生相应的事件。enter或en:进入某个状态时发生相应的事件。exit或ex:退出某个状态时发生相应的事件。tick:与wakeup效果一致。wakeup:当状态图被唤醒时发生相应的事件。第64页/共68页简化并行状态图的设计隐含事件第64页/共68页在使用隐含事件时要利用相应的关键字以及具体的对象,其基本语法为:event(object_name)Stateflow还定义了隐含条件,它需要通过关键字in来定义:[in(state_name)],in函数内定义的state_name状态当前处于激活的状态,则该条件为真,否则为假第65页/共68页在使用隐含事件时要利用相应的关键字以及具体的对象,其基本语法时间逻辑时间逻辑(TemporalLogic)是在Stateflow模型中根据某些事件的发生次数来进行判断的逻辑运算,这类运算得到的结果为逻辑量,非真即假。可以将时间逻辑当作事件或者条件应用于系统的转移中。时间逻辑对建立那些需要统计某些信号次数并且信号次数达到一定数量才进行状态切换的系统非常有用。时间逻辑定义关键字:after(n,Event):当事件Event发生了n次以后,after运算得到的结果都是逻辑真before(n,Event):当事件Event发生n次以前before运算符得到的结果都是逻辑真at(n,Event):当事件Event第n次发生时,at运算得到的结果是逻辑真every(n,Event):当事件Event每发生n次时,every运算得到的结果是逻辑真第66页/共68页时间逻辑第66页/共68页时间逻辑应用时间逻辑可以作为条件或者事件应用在转移标签中;时间逻辑是不能用于默认转移或者流程图中的转移的。如果将时间逻辑用于控制转移,则转移的源状态就是时间逻辑的相关状态(AssociateState);如果将时间逻辑用于状态动作,则包含状态动作的状态就是时间逻辑的相关状态(AssociateState)。第67页/共68页时间逻辑应用时间逻辑是不能用于默认转移或者流程图中的转移的。会计学69Stateflow教程会计学1Stateflow教程Stateflow概述:

Stateflow是集成于Simulink中的图形化设计与开发工具,主要用于针对控制系统中的复杂控制逻辑进行建模与仿真,Stateflow适用于针对事件响应系统(ReactiveSystem)进行建模和仿真。与事件响应系统相对应的就是动态变换系统(DynamicTransformationalSystem)。动态变换系统通常可以利用数学表达式、方程等组成的输入/输出关系进行描述,像这样的系统利用Simulink进行建模是最为方便的。而事件响应系统通常利用一些自然语言或者逻辑表达式进行描述,这样的系统就需要利用Stateflow来进行建模。Stateflow与Simulink结合起来,可以创建确定性监管控制系统。利用Stateflow可视化的模型和直观的仿真能力,可以清晰、简洁地反映出复杂动态逻辑关系。Stateflow的基础是有限状态机理论,它通过对状态图、流程图的创建,对事件驱动系统进行建模和仿真。第1页/共68页Stateflow概述:Statefl第一章创建状态图Stateflow编辑器创建和编辑状态图第2页/共68页第一章创建状态图Stateflow编辑器第2页/共6Stateflow编辑器创建Simulink模型1.直接在MATLAB命令行窗体中键入指令sfnew2.打开Simulink库浏览器,在库浏览器中找到Stateflow的模块库第3页/共68页Stateflow编辑器创建Simulink模型第3页/双击模型文件或者库文件中的Stateflow图块打开Stateflow编辑器

执行Stateflow编辑器File菜单下的ChartProperties命令,打开属性框第4页/共68页双击模型文件或者库文件中的Stateflow图块打开S创建和编辑状态图插入图形对象1.创建状态在图形对象面板的状态图标上按下鼠标左键并保持,将状态Stateflow编辑器的空白区域中Keyword:StateActions就是状态动作。为数据对象进行赋值或者进行数据对象的运算也可以通过状态动作进行事件广播以触发其他系统的变化状态动作的关键字主要有三种:entry:当状态被激活时执行相应的动作。exit:当状态退出活动状态时执行相应的动作during:当状态保持其活动状态时执行相应的动作第5页/共68页创建和编辑状态图插入图形对象Keyword:State在状态上单击鼠标右键,在快捷菜单中选择Properties命令,可以通过状态的属性对话框进一步定义状态2.创建连接节点

连接节点作为转移通路的判决点或汇合点,也是在状态图中常用的图形元素之一,特别是在流程图中,由于流程图不能包含任何状态,因此只有依靠连接节点完成通路的连接和判断分支,连接节点不是记忆元件。第6页/共68页在状态上单击鼠标右键,在快捷菜单中选择Pro在图形对象面板的连接节点图标上按下鼠标左键并保持,将状态拖放到Stateflow编辑器的空白区域中。节点上单击鼠标右键,通过弹出的快捷菜单执行Properties命令,进入属性框3.创建转移转移是Stateflow框图中最常见的图形元素之一,无论是包含状态的状态图中还是没有状态的流程图中,几乎都存在转移。转移描述的是有限状态系统内的逻辑流。转移管理了当系统从当前状态改变时,这个系统可能发生的模式改变。当转移发生时,源状态变为非活动的状态,目标状态变为活动的状态。转移是带有箭头的线,这就使整个状态图或者流程图成为了“有向图”,状态或者流程之间的转换,将直接受到转移方向的约束。第7页/共68页在图形对象面板的连接节点图标上按下鼠标左键并保持,将状态创建转移的具体步骤是:(1)当鼠标光标接近状态的边缘时,鼠标光标将变成十字形状。(2)按下鼠标左键并保持,将引出的转移线拖放到目标状态的边缘即可,第8页/共68页创建转移的具体步骤是:第8页/共68页给转移添加标签的方法:(1)左键单击选中相应的转移,此时转移将显示问号;(2)左键单击出现的问号,则进入文本编辑状态;(3)在光标处插入文本;(4)单击Stateflow编辑器中任意一处,结束标签的插入。组成转移标签的四个部分不一定完整地出现,但是不论出现哪几个部分,标签的内容必须按照上面指定的顺序书写。条件动作与转移动作两者之间的区别:条件动作在条件满足的情况下就能够执行,而转移动作需要在整个转移通路都有效的情况下,在执行转移的时候才执行。第9页/共68页给转移添加标签的方法:组成转移标签的四个部分不一定完整地出现Stateflow中都可以使用三类语法元素作为动作:(1)数学运算表达式或者逻辑运算表达式。(2)调用函数。(3)事件广播。4.默认转移:默认转移是一类特殊的转移,可以把它看做是状态转移的特例。默认转移确定当有限状态机或者父层次状态处于活动状态的时候,在其所有的子状态中第一个被激活的状态。根据有限状态机的要求,当有限状态系统被激活时,必有相应的确定的某个状态被激活。而默认转移就定义了当状态机被激活或者层次模型中父层次状态被激活时,具体哪个子状态被激活。第10页/共68页Stateflow中都可以使用三类语法元素作为动作:第10创建默认转移的方法如下:鼠标单击图形对象面板中的默认转移图标,然后将默认的转移(注意鼠标光标的变化)放置在状态或者连接节点的边缘,就可以完成默认转移的创建了说明:Stateflow的状态图中,同一层次上的状态只有两种工作模式,一种叫做异或(OR)模式,另一种叫做并行(AND)模式。在异或模式下,同一层次上的子状态必须有一个子状态具有默认的转移,同时该子状态被称为默认状态。

由于Stateflow是一种事件驱动模型建模环境,不允许出现模型运行的二义性,因此,正确的使用默认转移就非常重要,因为默认转移就是用来改变状态机或者父层次状态被激活时,相应的子状态二义性的图形元素在默认转移上添加标签的方法和在一般的转移上添加标签的方法是一样的,可以在默认转移的标签上加上事件和条件来进行限制,也可以将动作和默认转移相关联。不过,一个有限状态系统必须确保能够正确地被激活,这一点在使用默认转移时非常重要,因为状态机的默认转移只有一次执行的机会。如果没有明确的子状态能够被激活,系统会报告二义性错误第11页/共68页创建默认转移的方法如下:第11页/共68页5.添加注释:如果需要在Stateflow的框图中使用LaTex字符集,则需要按照下列步骤完成:(1)在已经添加的文本上单击鼠标右键,这时将显示快捷菜单;(2)选择快捷菜单中TextFormat子菜单中的LaTexInstructions复选项;(3)用鼠标单击已经添加的文本注释,重新进入文本编辑模式;(4)添加LaTex字符,例如键入y={\itAe}^{\alphax}sin(\beta\itt);(5)在文本编辑区外单击鼠标完成注释的添加,此时的注释内容将变为y=Aeaxsin(bt),如图所示。第12页/共68页5.添加注释:如果需要在Stateflow的框图中使用编辑图形对象外观:

改变尺寸和位置单击右键单击右键在注释上单击鼠标右键而出现的快捷菜单。在菜单中,共计有三个子菜单可以用来修改注释文本的外观,分别为:FontSize:设置注释文本的尺寸。TextFormat:设置注释文本的基本格式,包括粗体、斜体和LaTex字符支持。TextAlignment:设置注释文本的对齐方式,包括左对齐、居中和右对齐。第13页/共68页编辑图形对象外观:改变尺寸和位置单击右键单击右键在注释上单第二章状态图的仿真状态图的基本概念事件数据对象状态图的更新模式stateflow模型查看器第14页/共68页第二章状态图的仿真状态图的基本概念第14页/共68页状态图的基本概念状态图管理和维护着当前模型中活动的状态。一旦包含了状态转移的状态图处于活动的状态,则状态图将一直处于这种活动状态,直到整个模型仿真计算结束。并且,只要状态图处于活动状态,则必定至少有一个状态处于激活状态。状态图从非活动状态到活动状态以及状态之间的切换,都要由事件触发,即在事件的驱动之下,状态图才能仿真运行。所谓Stateflow的事件触发,就是事件驱动的发生。触发可以由系统隐含发生,也可以按照要求显性地定义。在Simulink中,显性定义的事件就是某些过零信号的发生,也就是说,只有过零信号才能够触发状态转移的发生或者状态机的激活。由这种触发而引起的相应的动作执行,被称为事件驱动。第15页/共68页状态图的基本概念状态图管理和维护着当前模型中活动的状态。一事件:添加事件:执行Stateflow图形编辑器Add菜单下Event子菜单中的任何一个命令,例如执行Local命令,则Stateflow将弹出如图所示的对话框。Scope属性:该属性定义事件的作用类型。在Add菜单下的Event子菜单中具有三个菜单命令,分别为Local、InputfromSimulink和OutputtoSimulink,通过这三个菜单命令定义事件,得到的Scope属性不一致。具有Local属性的事件是在状态图内部发挥作用。具有InputfromSimulink属性的事件是从Simulink框图输入到Stateflow中的,也就是Stateflow框图的外部触发事件。具有OutputtoSimulink属性的事件是从Stateflow框图输出到Simulink中的,即利用Stateflow定义的事件驱动或者触发其他Stateflow框图或者子系统动作。第16页/共68页事件:添加事件:Scope属性:该属性定义事件的作用类型。如果用户设置事件的Scope属性为InputfromSimulink或者OutputtoSimulink,则添加事件的对话框会发生变化,Trigger属性:Trigger属性总共有四个可能值,分别为Either、Falling、Rising和FunctionCall。在Simulink条件执行子系统中,特别是在使能或者触发子系统中,触发子系统工作的触发源就具有不同属性。触发子系统的触发源与这里的Trigger属性的意义完全一样,分别为双边沿触发、下降沿触发、上升沿触发。FunctionCall(函数调用)是一类比较特殊的触发属性第17页/共68页如果用户设置事件的Scope属性为Inputfrom创建事件实例:

运行过程中,单击ManualSwitch模块向Stateflow框图发出事件第18页/共68页创建事件实例:运行过程中,单击ManualSwitc使用多个输入事件:同一个Stateflow的图块可以使用多个输入事件。但是,不论用户为Stateflow的图块定义了多少个输入事件,每个Stateflow的图块都只能具有一个事件输入端口。因此,在向Stateflow的图块增加不止一个输入事件时,需要将不同的事件通过Mux块组合成为输入事件向量,然后将组合后的输入事件向量连接到Stateflow图块上。第19页/共68页使用多个输入事件:同一个Stateflow的图块可以使用数据对象:Stateflow使用数据对象来管理维护Stateflow框图内部的数据信息。在Stateflow中,数据对象主要用于动作或者条件中。用户既可以限制数据对象在相应的图形对象内部使用,也可以将数据对象作为Stateflow与Simulink模型之间的接口来使用。执行Stateflow图形编辑器的Add菜单中Data子菜单下的任何一个命令,例如Local,则Stateflow会打开如图所示的对话框。Scope属性:Local、Input、Output与事件相同Constant:所定义的数据对象在Stateflow模型中为常量即保持静态,数据对象在Simulink/Stateflow模型运行过程中其数值一般不发生变化,并且数据在模型中为只读,不可写的状态。Parameter:所定义的数据对象将通过Stateflow框图的上层Simulink子系统封装之后的参数获取初值。也就是说当Stateflow的框图位于某个封装子系统内部时,Stateflow的Parameter类型数据对象可以直接获取封装子系统设定的参数。具有Parameter属性的数据对象与具有Constant属性的数据对象类似,在整个仿真过程中,Stateflow不能修改其数值。DataStoreMemory:所定义的数据对象与Simulink数据空间共享,也就是说,该数据对象与Simulink工作空间中的某个数据对象相互绑定。此时该数据对象的名称必须与Simulink工作空间中数据对象的名称一致。第20页/共68页数据对象:Stateflow使用数据对象来管理维护数据类型模式(DataTypeMode)Inherited类型的数据对象一般为Stateflow的输入或者输出数据对象,它能够通过与Simulink模块相连接的信号线来判断具体的数据类型对象。Built-in类型是Stateflow数据对象默认的数据类型,通常情况下,都使用Simulink内建的数据类型作为数据对象的数据类型。Expression类型是指可以通过一个表达式来表示数据类型Fixedpoint类型用于模型的定点数据设置,若选择了该类型,则可以完成Stateflow模型数据的量化处理。第21页/共68页数据类型模式(DataTypeMode)第21页/共6状态图的更新模式不是所有的有限状态系统都具有外部事件的定义,有些模型就没有针对Stateflow模型定义任何输入事件,可是Stateflow的模型依然能够正常地运行。那么对于这种没有定义任何输入事件的系统,它是如何运行的呢?这就是状态图的更新模式所发挥的作用。Stateflow的框图有三种更新模式,分别为Inherited、Discrete和Continuous第22页/共68页状态图的更新模式不是所有的有限状态系统都具有外部事件的定义,系统默认使用Inherited更新模式,在这种更新模式下可能存在以下三种情况:(1)有输入事件定义。如果Stateflow框图定义了输入事件,并且Simulink提供了相应输入事件,则整个框图就按照所定义的事件触发来更新。也就是说,在相应类型的事件发生时,Stateflow框图进行相应的工作,例如状态的转移、动作的执行等。(2)未定义输入事件但定义了输入数据。如果Stateflow框图没有定义事件而定义了输入数据,则Stateflow框图按照其连接的Simulink输入信号中更新频率最高的信号更新周期来更新框图,这相当于输入数据的采样更新触发了Stateflow框图的执行。(3)既未定义输入事件又未定义输入数据。如果Stateflow框图既没有定义输入事件,又没有定义输入数据,则Stateflow框图继承其父层次模型的更新周期。如果Stateflow框图位于系统模型的顶层,则Stateflow框图继承模型的仿真周期作为自己的更新周期。Discrete更新模式,是将Stateflow框图看做有固定周期的离散块,在设置该更新模式时,Stateflow框图属性对话框中的SampleTime属性需要设置具体的更新周期,单位为秒。Continuous更新模式,则Stateflow框图好比Simulink模型中的一个连续系统模块,此时Stateflow的框图将按照系统仿真步长完成更新。第23页/共68页系统默认使用Inherited更新模式,在这种更新模式下注意:如果为框图定义了输入事件,则框图的更新模式就只能设置为Inherited,此时Stateflow框图将严格按照事件的发生来驱动有限状态系统的运行。当使用外部事件进行触发更新状态图时,默认地,第一个事件的发生用来唤醒状态图(激活状态图),而不是进行状态转移的执行。如果需要改变此模式,则需要设置Stateflow框图属性中的Execute(enter)ChartAtInitialization选项。选择了该选项,则意味着当前的Stateflow框图将在模型初始化阶段就被激活,这样,在后续的事件触发过程中,就直接进行状态的转换了第24页/共68页注意:如果为框图定义了输入事件,则框图的更新模式就只能设置为第三章流程图转移冲突流程图的创建图形函数stateflow模型调试器第25页/共68页第三章流程图转移冲突第25页/共68页概述:在Stateflow框图中,流程图是比较特殊的一种。流程图中不包含任何状态,它仅仅由连接节点和转移组成。由于流程图没有任何状态,因此流程图就不包含任何记忆元件(Stateflow中只有状态是记忆元件),所以,在一次更新之中,流程图从检测其默认转移开始,到检测完每一条有效的通路且到达不具备有效出口的转移为止,在连续的两次触发之间,一直处于非活动的状态。转移冲突:所谓转移冲突,就是在Stateflow框图运行的过程中可能在某一时刻同时存在几个有效的转移,那么此时Stateflow将根据一些原则来处理这些冲突,这就是转移冲突的处理原则。假设当前

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论