1、会计学1Stateflow教程教程Stateflow概述:概述:Stateflow 是集成于 Simulink 中的图形化设计与开发工具,主要用于针对控制系统中的复杂控制逻辑进行建模与仿真,Stateflow 适用于针对事件响应系统(Reactive System)进行建模和仿真。与事件响应系统相对应的就是动态变换系统(Dynamic Transformational System)。动态变换系统通常可以利用数学表达式、方程等组成的输入/输出关系进行描述,像这样的系统利用 Simulink 进行建模是最为方便的。而事件响应系统通常利用一些自然语言或者逻辑表达式进行描述,这样的系统就需要利用 S
2、tateflow 来进行建模。Stateflow 与Simulink 结合起来,可以创建确定性监管控制系统。利用 Stateflow 可视化的模型和直观的仿真能力,可以清晰、简洁地反映出复杂动态逻辑关系。Stateflow 的基础是有限状态机理论,它通过对状态图、流程图的创建,对事件驱动系统进行建模和仿真。第1页/共68页第一章第一章 创建状态图创建状态图Stateflow编辑器创建和编辑状态图第2页/共68页第3页/共68页 执行 Stateflow 编辑器 File 菜单下 的 Chart Properties 命令,打开属性框第4页/共68页Keyword:State Actions 就
3、是状态动作。为数据对象进行赋值或者进行数据对象的运算也可以通过状态动作进行事件广播以触发其他系统的变化状态动作的关键字主要有三种:entry:当状态被激活时执行相应的动作。exit:当状态退出活动状态时执行相应的动作during:当状态保持其活动状态时执行相应的 动作第5页/共68页2.创建连接节点创建连接节点 连接节点作为转移通路的判决点或汇合点,也是在状态图中常用的图形元素之一,连接节点作为转移通路的判决点或汇合点,也是在状态图中常用的图形元素之一,特别是在流程图中,特别是在流程图中,由于流程图不能包含任何状态,由于流程图不能包含任何状态,因此只有依靠连接节点完成通路的连因此只有依靠连接节
4、点完成通路的连接和判断分支,连接节点不是记忆元件。接和判断分支,连接节点不是记忆元件。第6页/共68页节点上单击鼠标右键,通过弹出的快捷菜单执行 Properties 命令,进入属性框3.创建转移创建转移 转移是 Stateflow 框图中最常见的图形元素之一,无论是包含状态的状态图中还是没有状态的流程图中,几乎都存在转移。转移描述的是有限状态系统内的逻辑流。转移管理了当系统从当前状态改变时,这个系统可能发生的模式改变。当转移发生时,源状态变为非活动的状态,目标状态变为活动的状态。转移是带有箭头的线,这就使整个状态图或者流程图成为了“有向图”,状态或者流程之间的转换,将直接受到转移方向的约束。
5、第7页/共68页第8页/共68页组成转移标签的四个部分不一定完整地出现,组成转移标签的四个部分不一定完整地出现,但是不论出现哪几个部分,标签的内容必须但是不论出现哪几个部分,标签的内容必须按照上面指定的顺序书写。按照上面指定的顺序书写。条件动作与转移动作两者之间的区别:条件动作在条条件动作与转移动作两者之间的区别:条件动作在条件满足的情况下就能够执行,而转移动作需要在整个件满足的情况下就能够执行,而转移动作需要在整个转移通路都有效的情况下,转移通路都有效的情况下,在执行转移的时候才执行。在执行转移的时候才执行。第9页/共68页第10页/共68页第11页/共68页5.添加注释:添加注释:如果需要
6、在 Stateflow 的框图中使用 LaTex 字符集,则需要按照下列步骤完成:(1)在已经添加的文本上单击鼠标右键,这时将显示快捷菜单;(2)选择快捷菜单中 Text Format 子菜单中的 LaTex Instructions 复选项;(3)用鼠标单击已经添加的文本注释,重新进入文本编辑模式;(4)添加 LaTex 字符,例如键入 y=itAealphaxsin(betaitt);(5)在文本编辑区外单击鼠标完成注释的添加,此时的注释内 容将变为y=Aeax sin(bt),如图所示。第12页/共68页单击右键单击右键在注释上单击鼠标右键而出现的快捷菜单。在在注释上单击鼠标右键而出现的
7、快捷菜单。在菜单中,共计有三个子菜单可以用来修改注释菜单中,共计有三个子菜单可以用来修改注释文本的外观,文本的外观,分别为:分别为:Font Size:设置注释文本的尺寸。Text Format:设置注释文本的基本格式,包 括粗体、斜体和 LaTex 字符支持。Text Alignment:设置注释文本的对齐方式,包括左对齐、居中和右对齐。第13页/共68页第二章第二章 状态图的仿真状态图的仿真状态图的基本概念事件数据对象状态图的更新模式stateflow模型查看器第14页/共68页第15页/共68页Scope 属性:该属性定义事件的作用类型。在 Add菜单下的 Event 子菜单中具有三个菜
8、单命令,分别为 Local、Input from Simulink 和 Output to Simulink,通过这三个菜单命令定义事件,得到的 Scope 属性不一致。具有Local属性的事件是在状态图内部发挥作用。具有Input from Simulink 属性的事件是从 Simulink框图输入到 Stateflow 中的,也就是 Stateflow 框图的外部触发事件。具有 Output to Simulink 属性的事件是从Stateflow 框图输出到 Simulink 中的,即利用 Stateflow 定义的事件驱动或者触发其他 Stateflow 框图或者子系统动作。第16页/
9、共68页Trigger 属性:Trigger 属性总共有四个可能值,分别为 Either、Falling、Rising 和 FunctionCall。在 Simulink 条件执行子系统中,特别是在使能或者触发子系统中,触发子系统工作的触发源就具有不同属性。触发子系统的触发源与这里的 Trigger 属性的意义完全一样,分别为双边沿触发、下降沿触发、上升沿触发。Function Call(函数调用)是一类比较特殊的触发属性第17页/共68页 运行过程中,单击 Manual Switch 模块向 Stateflow 框图发出事件第18页/共68页第19页/共68页Scope 属性:Local、I
10、nput、Output 与事件相同Constant:所定义的数据对象在 Stateflow 模型中为常量即保持静态,数据对象在Simulink/Stateflow 模型运行过程中其数值一般不发生变化,并且数据在模型中为只读,不可写的状态。Parameter:所定义的数据对象将通过 Stateflow 框图的上层 Simulink 子系统封装之后的参数获取初值。也就是说当 Stateflow 的框图位于某个封装子系统内部时,Stateflow的 Parameter 类型数据对象可以直接获取封装子系统设定的参数。具有 Parameter 属性的数据对象与具有Constant 属性的数据对象类似,在
11、整个仿真过程中,Stateflow 不能修改其数值。Data Store Memory:所定义的数据对象与 Simulink 数据空间共享,也就是说,该数据对象与 Simulink 工作空间中的某个数据对象相互绑定。此时该数据对象的名称必须与Simulink 工作空间中数据对象的名称一致。第20页/共68页Fixed point 类型用于模型的定点数据设置,若选择了该类型,则可以完成 Stateflow 模型数据的量化处理。第21页/共68页Stateflow 的框图有三种更新模式,分别为 Inherited、Discrete 和 Continuous第22页/共68页第23页/共68页选择了
12、该选项,则意味着当 前的 Stateflow 框图将在模型初始化阶段就被激活,这样,在后续的事件触发过程中,就直接进行状态的 转换了第24页/共68页第三章第三章 流程图流程图转移冲突流程图的创建图形函数stateflow模型调试器第25页/共68页的过程中可能在某一时刻同时存在几个有效的转移,那么此时 Stateflow 将根据一些原则来处理这些冲突,这就是转移冲突的处理原则。假设当前事件假设当前事件 E 发生并且条件发生并且条件 C 也满足,也满足,则四个转移通路都是有效的,则四个转移通路都是有效的,即形成了即形成了转移冲突。那么转移冲突。那么 Stateflow 是如何处理这是如何处理这
13、种情况呢?种情况呢?第26页/共68页第27页/共68页状态 Standby 向 High 状态、Medium 状态和 Low 状态的转移都对使用条件进行了限制。根据前面的介绍,这三个转移由于都仅仅使用条件进行了限制,因此它们具有相同的转移检测优先级别。所以这个框图在进行仿真的时候,就会报告转移冲突错误如果转移从状态出发,则从状态的左上角开始,按顺时针的方向决定转移的优先权;如果转移从连接节点出发,则从连接节点的 12 点方向开始,按顺时针的方向决定转移的优先权。几何原则几何原则:第28页/共68页两个步骤:(1)在 Stateflow 图形编辑器中单击右键,在弹出的菜单中选择 Executi
14、on Order 子菜单下的 Enable User specified execution order for this chart命令,(2)用鼠标右键单击需要改变检测次序的转移,例如要修改上图所示模型的第一个转移检测次 序,则用右键单击该转移,在出现的快捷菜单 的 Execution Order 子菜单下选择检测次序。由于这里从状态 A 到状态 B具有四个转移,因 此转移执行次序的选项为 14。默认地,该 转移检测次序为1,可以将其修改为其他数值,修改某一条转移的检测次序后,其他的转移可 以根据用户指定的次序以及 Stateflow 默认的检 测次序原则进行重新排序。第29页/共68页i
15、f(条件条件)动作动作 A else 动作动作 Bif(条件条件 1)动作动作 A else if(条件条件 2)动作动作 B else 动作动作 C第30页/共68页switch-case第31页/共68页while 循环循环while(Condition)Action;do-while 循环循环doAction;while(Condition)第32页/共68页if(c1)act1;if(c2)act2;else if(c3)act3;else act4;分析:假设,条件分析:假设,条件 c1 为真,为真,条件条件 c2 和条件和条件 c3 为假为假第33页/共68页n流程图不能出现回溯现
16、象。n如果流程图位于 Stateflow 的 Chart 层次,则在连续两次更新之间,整个 Stateflow 框图处于非活动的状态。第34页/共68页该 Stateflow 框图具有两个状态:状态 Normal 和状态 Inverse。在这两个状态中都包含了流程图。它们包含的流程图十分简单,就是根据输入数据进行相应的逻辑判断,然后决定具体的输出。从框图上看,这两个流程图的体系结构完全一致,有所区别的就是参数,即处理的数据不同,这里可以通过图形函数的形式来完成模型的创建。第35页/共68页第36页/共68页状态面板(StatusPane)控制面板(Control Pane)选项面板(Contr
17、ol Pane)显示面板(Display Pane)第37页/共68页第38页/共68页第四章第四章 有限状态系统有限状态系统层次化建模层次化建模状态动作层次化建模历史节点内部转移子状态图stateflow的查询工具第39页/共68页第40页/共68页 on event 事件相当于 during 事件的子集,即当 STEP_UP 事件发生时,首先执行 during 动作,然后再来执行 on STEP_UP 动作。这样,在发生 STEP_UP 事件时,track数据对象每次累加了两次。数据对象 data 与状态 A 进行了绑定,这样在其他的地方就只能读取 data,而不能修改数据对象 data。
18、第41页/共68页第42页/共68页第43页/共68页当 Stateflow 框图中的转移动作发出函数调用事件之后,系统首先执行 Simulink 模型中的函数调用子系统;当函数调用子系统全部运行完毕,并将新的计算结果提供给 Stateflow 的输入数据对象后,Stateflow 才继续激活相应的目标状态。因此,在很多 Simulink 和 Stateflow 混合的系统模型中,都充分利用了这一“函数调用”特性,利用 Stateflow 模型来控制 Simulink 子系统的运行,合理完成数据的交互任务。第44页/共68页第45页/共68页第46页/共68页case1:假设,当前 Super
19、1 状态处于活动状态同时其子状态 Sub2 也处于活动状态,当事件 E发生时case2:如果 Super2 状态处于活动状态,同时其子状态 Sub4 处于活动状态,当事件 E发生时第47页/共68页历史节点是一种特殊的 Stateflow 图形对象,它只能够用于具有层次的状态内部在层次化的框图子状态之间如果存在超转移,则历史节点也无法发挥作用历史节点能够影响默认转移的工作,使默认转移仅在首次激活系统时发挥作用,其余的时间就依赖于历史节点记录的状态来恢复子状态的活动情况第48页/共68页内部转移能够适当地减小模型复杂度,提高模型的执行效率第49页/共68页(1)当前状态 A 处于活动状态,事件
20、E 发生,但是条件 C1 不满足(2)事件 E 再次发生了,而且此时条件 C1 满足(3)事件 E 第三次发生,此时条件 C2 不满足(1)当前父状态 A 处于活动状态,同时子状态A1 处于活动状态,当事件 R 发生时(2)如果当前父状态 A 处于活动状态,同时子状态 A2 处于活动状态,当事件 R 发生第50页/共68页第51页/共68页假设此时父状态 A 处于活动状态并且子状态 A1处于活动状态,当触发发生时,根据前面介绍的层次化状态图转移检测优先权和转移冲突检测优先权,求系统处理的次序状态动作与状态执行的次序状态动作与状态执行的次序(1)当 Super 父状态被首次激活时(2)当父状态处
21、于活动状态而此时 发生了某个事件触发时示例:讨论示例:讨论转移检测转移检测第52页/共68页第53页/共68页第五章第五章 有限状态系统有限状态系统并行机制并行机制并行机制本地事件广播隐含事件时间逻辑第54页/共68页状态 Slot 和状态 Player 的边框是虚线,因此这两个状态就是处于并行状态的 Stateflow 状态其内部包含的子状态 NoDisk 和HasDisk 以及 Stop 和 Play 状态边框是实线,因此子状态之间是互斥的状态,子状态在相应的层次同一时刻只能有一个处于活动状态。第55页/共68页当第一个事件发生时,求系统首先激活整个状态图,依次激活相应的状态并执行动作当再
22、次发生事件 E 时,求系统依次执行相应的转移并执行相应的动作第56页/共68页第57页/共68页第58页/共68页第59页/共68页事件广播的执行次序事件广播的执行次序事件广播很类似函数的调用,可以将广播事件看做在动作执行的过程中调用了一个函数事件广播很类似函数的调用,可以将广播事件看做在动作执行的过程中调用了一个函数,在函数执行完毕退出之后在函数执行完毕退出之后,系统才继续后面的工作。也就是说,当事件被广播后,系统将系统才继续后面的工作。也就是说,当事件被广播后,系统将与事件广播相关的所有动作都执行完毕之后,与事件广播相关的所有动作都执行完毕之后,才会继续执行广播事件动作之后需要执行才会继续
23、执行广播事件动作之后需要执行的其他动作。的其他动作。第60页/共68页假设当前处于活动的子状态为 A1a 和 A2a,当事件 E1 发生时如果此时活动的子状态同样为 A1a 和 A2a,那么当事件 E1 发生时第61页/共68页假设当前处于活动的子状态为 A1a 和 A2a,当事件 E1 发生时受限事件广播的执行受限事件广播的执行假设当前处于活动的子状态为 A1a 和 A2a,当事件 E1 发生时第62页/共68页Stateflow 在处理状态机工作时实际上是一种单线程的工作方式,事件广播会打断当前的工作流程,而且只有在广播事件相关的工作全部结束之后,才继续处理原来的后续工作。在这种处理方式下
24、,事件广播对原有的工作流程有时可能会造成一些影响,并且产生一些冲突现象。针对不同的动作类型,Stateflow 解决的原则略有不同,这里总结如下:Entry 动作:如果与事件广播相关的所有动作都执行完毕之后,状态已经不再处于活动状态,则所有剩余的 entry 动作以及进入状态之后的相应处理就不运行了。Exit 动作:如果与事件广播相关的所有动作都执行完毕之后,状态已经不再处于活动状态,则所有剩余的 exit 动作以及退出源状态进入目 标状态之间的转移就不运行了。During 动作:如果与事件广播相关的所有动作都执行完毕之后,状态已经不再处于活动状态,则所有剩余的 during 动作就不运行了。
25、条件动作:如果与事件广播相关的动作都执行完毕之后,转移流程的源状态或者流程图的父层次状态不再处于活动状态,则所有剩余的未执行或未检测流程就不再被检测执行了。转移动作:如果与事件广播相关的动作都执行完毕之后,转移通路的父层次状态不再处于活动状态,或者父层次状态中另外一个子状态被激活了,则所有剩余的未执行的转移动作就不再执行了。当前活动的状态为 A,在事件 E 发 生时第63页/共68页第64页/共68页第65页/共68页第66页/共68页时间逻辑是不能用于默认转移或者流程图中的转移的。如果将时间逻辑用于控制转移,则转移的源状态就是时间逻辑的相关状态(AssociateState);如果将时间逻辑用于状态动作,则包含状态动作的状态就是时间逻辑的相关状态(Associate State)。第67页/共68页
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。