收藏 分销(赏)

详解stateflow建模与应用实例(79页).pdf

上传人:曲**** 文档编号:274506 上传时间:2023-06-26 格式:PDF 页数:79 大小:6.88MB
下载 相关 举报
详解stateflow建模与应用实例(79页).pdf_第1页
第1页 / 共79页
详解stateflow建模与应用实例(79页).pdf_第2页
第2页 / 共79页
详解stateflow建模与应用实例(79页).pdf_第3页
第3页 / 共79页
详解stateflow建模与应用实例(79页).pdf_第4页
第4页 / 共79页
详解stateflow建模与应用实例(79页).pdf_第5页
第5页 / 共79页
点击查看更多>>
资源描述

1、port_label(*input,1,signal);port_label(output,1,gain);port_label(output,2,saturation);port_label(output,3,sample);port_label(output,4,error);image(imread(dianji.jpg)第3章Stateflow建模与应用Stateflow是有限状态机(finite state machine)的图形工具,它通过开发有限 状态机和流程图扩展了 Simulink的功能。Stateflow使用自然、可读和易理解的形式,可使复杂的逻辑问题变得清晰与简单,并且还

2、与MATLABSimulink紧密集成,为包 含控制、优先级管理、工作模式逻辑的嵌入式系统设计提供了有效的开发手段,是 本书的核心内容之一。读者在58章将看到Stateflow应用于MCU器件的嵌入式开 发,尤其显得得心应手,一些采用传统方法难于实现的算法,如果利用Stateflow建 模却非常容易。大到导弹、航空航天器的控制,小到点亮一个发光二极管,Stateflow 都非常称职。Stateflow状态图模型,还可利用Stateflow Coder代码生成工具,直 接生成C代码。Stateflow的主要功能包括:使用层次化、可并行的、有明确执行语义的元素,来描述复杂的逻辑系统。采用流程图定义

3、图形化函数。利用真值表实现表格形式的功能。使用临时逻辑处理状态转移与事件。支持Mealy和Moore有限状态机。可集成用户自定义的C代码。可用动画的形式显示状态图的仿真运行过程,并可记录数据。调试器使用图形化断点进行单步调试,并可观察其中的数据。本章主要内容:Stateflow工作原理与基本概念 建立Stateflow状态图与流程图 Stateflow的层次结构与并行机制 Stateflow 应用3.1 Stateflow基本概念Stateflow对象可分为图形对象与非图形对象。图形对象有状态、历史节点、迁移、默认迁移、连接节点、真值表、图形函数、Embedded MATLAB函数、盒函数、S

4、imulink函数;非图形对象有事件、数据、目 标。本节首先介绍常用的对象:状态、迁移、数据、事件的概念和使用,连接节点 留待3.3节、历史节点留待3.4节,其余对象留待3.5节说明。Stateflow状态机使用一种基于容器的层次结构管理Stateflow对象,也就是说,一个Stateflow对象可以包含其他Stateflow对象。最高级的对象是Stateflow状态机,它包含了所有的Stateflow对象,因此也就 包含了 Simulink中的所有Stateflow状态图,以及数据、事件、目标对象。同样地,状态图包含了状态、盒函数、函数、数据、事件、迁移、节点与注释 事件(noteevent

5、s)。用户可以使用这一系列对象,建立一个Stateflow状态图。而 具体到一个状态,它也可以包含上述的对象。图3.1.1抽象地说明了这样的关系,而图312则具体地说明了 Stateflow状态 机的组成。图311 Stateflow层次机构(数据字典)LLout=mw2;pvpntlevent1J Ld图3.1.2 Stateflow状态机的组成3.1.1状态图编辑器在Simulink模块库浏览器,找至U Stateflow模块,如图3.1.3所示,添加入模型 窗口,如图3.1.4所示。:3|Simulink Design Verifier 由“号|Simulink Extras 上 耳j

6、Simulink Verification and Validationr g Stateflow卜 曰 System Identification Toolbox+Target Support Package由呈 Target for Microchip(TM)dsPIC由 Vtehicle Network Toolbox由号 Video and Image Processing Blockset图 3.1.3 Stateflow 模块用户也可以使用以下命令,建立带有Stateflow状态图的Simulink模型,如图 3.1.4所示,同时打开Stateflow模块库,如图3.1.5所示。s

7、f图3.1.4带有Stateflow状态图的Simulink模型Chart Truth TableExamples(Double click to open the Stateflow Examples Library)图 3.1.5 Stateflow 模块库用户还可以直接使用以下命令,快速建立带有Stateflow状态图的Simulink模 型。sfnew双击Chart模块,打开Stateflow编辑器窗口,如图3.1.6所示,左侧工具栏列 出了 Stateflow图形对象的按钮。File Edit View Simulation Tools Format Add Patterns Hel

8、p 0修。身|f 十二!画 II 霜穆畿展备的 R图固留圃画画画囱上明状态历史节点默认状态迁移连接节点真值表图形函数Embedded MATSB函数盒函数Simulink函数调用缩放1Ready图3.1.6 Stateflow编辑器窗口3.1.2状态状态可以理解为事件驱动系统中的模式,可分为激活与非激活状态,而状态是 否激活则是由状态图中的事件与条件决定的,若没有预先定义的事件或条件发生,状态将一直保持其原先的激活或非激活状态。1.状态的层次结构状态可以包含除了目标(详见第3.6.6节)以外的所有Stateflow对象,所以状 态内部可以有其他状态,如图317所示,处于外层的A称作超状态(或父

9、状态),处于内部的B称作子状态。每一个状态都有其父状态,图317中,状态A的父状态就是Stateflow状态图 本身。图3.1.7超状态与子状态2.状态的横向结构在Stateflow状态图的顶层或某一超状态下,通常并存有多个状态,它们之间的 关系可分为互斥与并行。(1)互斥状态(OR)互斥状态的矩形框边缘显示为实线,同一级的互斥状态,至多允许激活一个状 态。如图318所示的状态图,状态A与状态B是互斥的,它们只能有一个处于激 活状态;当状态A被激活时,同样其子状态A1与A2也只能有一个处于激活状态。图3.1.8互斥状态(2)并行状态(AND)并行状态的矩形框边缘显示为虚线,同一级的并行状态,可

10、在同一时刻被激活。如图3.1.9所示的状态图。状态A与状态B是并行的,它们可同时处于激活状态;子状态A1与A2也同时处于激活状态,而子状态B1与B2只能有一个处于激活状 态。B1A1A2图3.1.9并行状态状态层次结构与并行机制的详细概念与应用,见3.4与3.5节。3.状态标签状态名仅是状态标签的一部分,完整的标签格式如下,第一行是状态名,以下 若干行是各类动作,用户可以设置全部或部分的状态动作,当然也可以不设置任何 动作。name/entry:during:exit:on event,bind:entry actions during actions exit actionsname:on

11、event,events,data状态名进入该状态时的动作处于该状态时的动作退出该状态时的动作name actions 某事件发生时的动作 指定需要限制作用范围的事件与数据状态名状态名可由字母、数字、下划线组成,如果状态名后跟随的是回车符,则斜线 是可有可无的。根据Stateflow的分层结构,同级的各个子状态不允许重名,但不同 级的状态则不受限制。图3.1.10所示的Stateflow状态图是有效的,尽管看上去状态C1、C2有重名 现象,但在Stateflow分层结构中,它们的全名分别是:A.On A.OffB.On B.Of f图3.1.10状态名状态动作状态动作如表3.1.1所列。表3.

12、1.1状态动作类型动作类型缩写说明entryen进入当前状态时的动作duringdu处于当前状态,并且某事件发生时的动作 Executes when the state isactive and a specific eventoccursexitex离开当前状态时的动作bind无约束一个事件或数据,使得仅当前状态及 其子状态有权限广播该事件或修改该数据on event_name无当前状态接收1次广播事件时的动作on after(n,event_name)无当前状态完整接收n次广播事件后的动作on before(n,event_name)无当前状态完整接收n次广播事件前的动作on at(n,e

13、vent_name)无当前状态完整接收n次广播事件时的动作on every(n,event_name)无当前状态每接收n次广播事件时的动作每个动作类型,用户可指定多个具体动作,每个动作之间以回车、分号、逗号 区隔,动作类型关键词后必须跟随一个半角冒号。entry动作关键词为entry(或缩写为en)。如果用户在状态名后加入斜线,并直接跟随具 体动作,则该动作默认为进入动作。如图3.1.11所示,进入状态A时,y=3,同时 又执行y+,最终的结果y=4。仁A/y=3 y+图 3.1.11 entry 动作during动作关键词为during(或缩写为du)。如图3.1.12所示,进入状态A时,y

14、=3,同 时不断执行y+。若求解器的定点步长取0.2,仿真时长取2,则最终的结果y=13。A一en:y=3;du:y+;图 3.1.12 during 动作(3)exit 动作关键词为exit(或缩写为ex)。如图3113所示,系统处于状态A,当A的激 活时间达到5个仿真步长,退出状态A,进入状态B,最终的结果y=4,如图3114 所示。图 3.1.13 exit 动作图3.1.14输出结果(4)广播事件动作表3.1.1所列的广播事件动作,能实现各种的事件触发。以单次广播事件动作为例,关键词为0n event_name,其中event_name表示 某一广播事件名,事件名应是唯一的。如图311

15、5所示,系统处于状态A,当检测 到事件stop,立即执行c()。fAen:y=1;du:y+;on stop:c();_B图3115广播事件动作(5)bind 动作关键词为bind。如图3.1.16所示,变量y、事件start被绑定在状态A,这表示 仅有A状态及其子状态有权限修改变量y并广播事件start,其他状态B能够读取变 量y、监听到事件start,但无权修改变量y、广播事件start。fA、en:y=1;_r-.Ben:y=1;start;du:y+;bind:y;start;_z图 3.1.16 bind 动作若运行该状态图,系统提示变量y仅能由状态A及其内部的状态迁移修改,事 件s

16、tart仅能在状态A。Data*y*(#24)can be modified only in states and transitions contained in states to which 士t is bound(e.g.A=3为真时,发生迁移。条件动作当条件表达式为真时,立刻执行条件动作。若事先未指定条件,系统则假设条 件为真,并执行该条件动作。如图3.1.23所示,当条件y=3为真,条件动作y=10立刻执行。迁移动作当迁移目标有效时,执行迁移动作。若迁移标签由多个字段组成,则当整个标 签有效时,执行迁移动作。如图3123所示,当条件y=3为真,且目标状态B有效时,发生迁移,并 执行

17、迁移动作z=20o运行结果如图3.1.24所示:/一A en:y=1;du:y+;y=3y=10/z=20图3.1.23迁移条件与动作图3.1.24输出结果4.迁移有效条件对于非默认的迁移,当源对象处于激活状态的且迁移标签有效时,发生迁移;对于默认迁移,当其父状态被激活时,发生迁移。表3.1.3列出了迁移标签的有效条件,用户可以根据需要,选择性地输入迁移 标签的部分或全部字段。表3.1.3迁移标签有效条件标签内容标签有效条件仅事件该事件发生事件与条件该事件发生及条件为真仅条件任何事件发生及条件为真仅行动任何事件发生空任何事件发生3.1.4数据与事件图3.1.1所示的数据字典中,数据与事件是合并

18、在一个圆圈内的,这表明他们 有相似之处,这里合并介绍。1.数据数据是非图形的对象,它有一个很重要的特性:作用域,用户在使用数据时必 须明确定义该特性。根据作用域的不同,数据可分为:Stateflow状态图本地数据(Local);自外部Simulink模块输入的数据(I nput from Simulink);向外部Simulink模块输出的数据(Output from Simulink);临时数据 定义在MATLAB工作空间的数据;常数(Constant);向Simulink模型与Stateflow状态图外部的目标(代码)导出的数据;自Simulink模型与Stateflow状态图外部的源代码

19、导入的数据。数据的简单使用,见324小节。2.事件事件也是非图形的对象,它驱动着整个Stateflow状态图的运行。如同数据,事 件同样有它的作用域,根据作用域的不同,事件可分为:Stateflow状态图本地事件;自外部Simulink模块输入的事件;向外部Simulink模块输出的事件;事件的简单使用,见324;事件的分类,见3.5各小节。3.动作Stateflow状态图支持状态动作、条件动作、迁移动作,已在上文做了简要介绍。这里所说的动作可以是一个函数调用,广播事件,数学运算等等。例如:函数调用:ml.log10(x);.事件广播:Start;Stop;.数学运算:x=1;y=2;z=x+

20、y;3.1.5对象的命名规则以上简要介绍了常用对象的概念,用户可以使用任意的字母、数字与下划线的 组合为这些对象命名,但名称不能以数字开头,中间也不能有空格。由于Real-Time Workshop代码生成工具的限制,对象的名称不能超过一定长 度,用户可以在模型参数设置对话框的Real-Time Workshopf Symbols面板进行修 改,默认的长度是31,最大的长度是256,如图3.1.25所示。Auto-generated identifier naming rulesMaximum identifier length:31图3125设置对象名称的长度表3.1.4列出了一些关键字,它

21、们是Stateflow动作语言的组成部分,因此是不 能用来为对象命名的。表314关键字关键字在Stateflow中的用途hasChanged,hasChangedFrom,hasChangecnb变更监测complex,imag,real复数数据boolean,double,int8,int16,int32,single,uint8,uint16,uint32数据类型cast,fixdt,type数据类型操作send明确事件change,chg,tick,wakeup隐含事件false,inf,true,t标志位matlab,mlMATLAB函数与数据bind,du,during,en,ent

22、ry,ex,exit,on状态动作in状态激活after,at,before,every,sec,temporalCount时间逻辑3.2Stateflow 状态图长跑比赛时,通常要用到以圈计时的方法,它的意思是:计时器初次开启时,2 组数码管皆清零;运动员出发时,按下Start按钮开始计时,数码管1显示实时时间;第次回到起点,表示跑完圈,这时按下LAP按钮,数码管2显示当前的时间值,表示一圈所花费的时间,但比赛仍在进行,因此计时器仍然在计时;再次按下Start 按钮,2组数码管同时显示最后的时间;第三次按下Start按钮,2组数码管清零,回到初始状态。本节以此为例,说明Stateflow状态

23、图的建立过程。3.2.1状态1.添加状态新建一个空白的Stateflow模型,单击状态按钮,并在Stateflow窗口的适当位 置再次单击,加入一个状态,如图3.2.1所示。在加入之前,用户可随时按下键盘的ESC键,或再次单击按钮,取消添加。B包耳圜图3.2.1添加状态2.状态命名在状态矩形框左上角的编辑提示符后,输入状态的名称,如stop,如图3.2.2 所示。若需要修改状态名,可将鼠标移至名称附近,待光标变成编辑样式时,再单 击修改,如图3.2.3所示。图3.2.2状态命名Stool X_图3.2.3状态名修改StopI_X3.添加子状态将鼠标移至状态矩形框4个角落的任意一个,调整其大小,

24、如图3.2.4所示。图3.2.4调整状态框再按步骤、,添加状态Reset、Finished,放置在状态Stop的矩形框内,这时Stop为超状态,Reset、Finished为子状态,如图3.2.5所示。图3.2.5父状态与子状态3.2.2迁移1.添加迁移将鼠标移至源状态矩形框的边缘,当光标变成十字时,如图3.2.6所示,按下 左键并拖向目标状态的边缘,然后释放,如图3.2.7所示,即添加了一个迁移。图3.2.7迁移终点图3.2.6迁移起点2.添加默认迁移单击.直I,将鼠标移至默认状态矩形框的水平或垂直边缘,如图3.2.8所示。画l画圉制图3.2.8选择默认迁移再次单击,即添加了一个默认迁移,如

25、图329所示。图3.2.9添加默认迁移由于Stop是父状态,还需要针对其中的子状态,设置默认迁移,如图3.2.10 所示,关于Stateflow的层次结构,详见3.4节。图3210添加子状态默认迁移3.迁移变更鼠标放置在迁移的起点或终点,当光标变成圆圈时(图3211),按住鼠标左键,可将该端点移至其他状态,如图3212所示。图3212完成迁移变更图3211开始迁移变更将默认迁移的起点移至某一状态,即转换为一般迁移;将一般迁移的起点悬空,即转化为默认迁移,如图3.2.13所示,若迁移终点悬空,则该迁移无效,如图3.2.14 所示。图3213迁移起点变更图3214迁移终点变更4.迁移标签新建的迁移

26、标签不包含任何文字信息,用户单击迁移曲线一次,曲线上方显示“?”如图3215所示:将鼠标移至“?”附近,再次单击,当显示编辑光标时,可编辑迁移标签,如图 3.2.16 所示。图3216编辑迁移标签完成编辑后,将鼠标放在标签的任意位置,按住左键并拖动,调整标签的位置,如图3.2.17所示。323计时器状态图根据以圈计时的特点,整个系统可分为2个父状态:停止与运行。停止状态包 含2个子状态:计时器清零Reset、计时器停止Finished;运行状态也包含2个子 状态:计时器运行Running、以圈计时LAP。如图3218所示:图3.2.18添加4个状态再根据各状态之间的联系,添加默认迁移、迁移以及

27、迁移标签,如图3219所 示。图中的迁移标签start表示按下start按钮这个事件,而LAP则表示按下LAP 按钮。图3.2.19添加迁移及迁移标签3.2.4数据与事件以圈计时需要2组数码管显示当前以及记录的分、秒、百分秒,另有两个按钮,为此需要添加6个数据与2个事件。数据是向外输出的,而事件是自外输入的。添加数据或事件的方法有两种:使用菜单项Add或使用模型浏览器(Model Explorer)o前者的优势是添加方便,但菜单项仅提供了添加功能,无法通过菜单 删除已添加的数据或事件,因此我们推荐用户使用模型浏览器。为了照顾读者的不同需求,本文仍旧介绍两种添加方式。1.菜单项在 Statefl

28、ow 编辑器窗口,选择菜单项 Addf Dataf Output to Simulink,如图 3.2.20 所示。国查透=Fik Edit View SimuluLiuri Tvuh Fuirnul Add Pdllurik 昌 了事|1寸7尸:vent,Hdp/盘国偏料反Local.Input from Simulink.Output tn Simiilink.Cnnnt.Pdidmelei.Data Store Memory.;图3.2.20添加输出数据在Name栏填入输出变量名min,另外用户在scope栏还可以再次决定变量的 作用域,如图3.2.21所示。图3221修改数据名及作用范

29、围2.模型浏览器在Stateflow状态图的顶层(即不选中任何图形对象),选择菜单项Tools一 Explore,或直接按下Stateflow编辑器窗口的工具栏按钮我L打开模型浏览器,并 确认已选中左侧模型结构图中的Chart节点,如图3.2.22所示。图3.2.22模型浏览器在浏览器窗口的工具栏找到按钮网、多与次,添加一个数据/事件或删除对 应项。在中部窗口选中数据/事件的条目,右侧窗口即显示它的属性,如图3223所 示。与菜单项方法不同的是,使用浏览器添加的数据/事件,默认的作用域是本地(Local),用户需要手动修改为外部输入或外部输出。图3.2.23利用模型浏览器修改数据对于事件,用户

30、还需指定它的触发方式,Rising表示上升沿、Failing表示下降 沿,而Either表示上升或下降沿皆可触发,本例的两个输入事件start与LAP皆选 用Either方式触发,如图3.2.24所示。图3.2.24利用模型浏览器修改事件有多个数据或事件时,用户还可以指定它们的端口号,合理地排列这些端口,将有利于以后的Simulink模块连线。如图3225所示,是完整的数据与事件列表。Column View:Stateflow Show Details 8 of 13 objects图3.2.25数据与事件列表3.2.5动作上文提到,显示时间值可以定义为状态动作,也可以定义为迁移动作。为不失

31、一般性,本小节分别说明这两种动作的定义方法。计时器复位时,2组数码管皆应清零,因此设置子状态Reset的进入动作为:Resetentry:min=0;sec=0;percent=0;minbuf=0;secbuf=0;percentbuf=0;按下LAP按钮或再次按下start时,数码管2都必须显示当前时刻,因此设置 子状态LAP与Finished的进入动作为:Finishedentry:minbuf=min;secbuf=sec;percentbuf=percent;添加了动作的状态图如图3.2.26所示:图3.2.26动作定义在状态当然用户可以将显示时间值定义为迁移动作。为此按图3.2.2

32、7调整状态图,添 加节点与迁移动作。对照图3.2.26,用户应很容易理解图3.2.27的意义。不过目前的Stateflow状态图还缺少最关键的时钟程序,该过程详见3.3节。3.2.6自动创建对象实际建模时,随着思路的不断扩展与成熟,状态、迁移、数据、事件、动作等 等各种图形与非图形对象,总是交替着添加,很少按照上述过程逐步进行。这就难 免发生遗漏,尤其是大型、多层次的Stateflow状态图。当用户完成状态图的编辑,按下仿真按钮时,系统首先要进行语法检查,如果 发现错误,则给出提示。如果是某些数据或事件未定义,用户可使用随后出现的 Symbol Autocreation Wizard向导,自动

33、创建缺失的对象。例如,用户可以在图3226中,任意添加一个状态动作y=1,任意添加一个迁 移事件stop,如图3.2.28所示。图3.2.28添加一个状态动作按下仿真按钮,系统首先给出语法错误提示,如图3.2.29所示:图3.2.29错误提示系统进一步分析该语法错误,是由于状态图中存在无法处理的符号,因此弹出 Symbol Autocreation Wizard向导与向导使用说明,如图3.2.30所示,若用户已能 够熟练使用,可径自忽略该说明。图3.2.30向导使用说明Symbol Autocreation Wizard向导建议,应另行创建数据y与事件stop,如图 3.2.31 所示。Unr

34、esolved symbols found in:stopwatch_process(machine)Place a check by the data/events you wish to CREATE in the Model Explorer|T|Symbol|Scope|Proposed Parent|分 stop Local的 y LocalChart(chart)Chart(chart)CheckAI I UnCheckAI I图3231自动创建对象向导用户可以不断单击Scpoe与Proposed Parent的内容,修改数据/事件的作用域 与父对象,如图3.2.32所示。Unre

35、solved symbols found in:stopwatch_process(machine)Place a check by the data/events you wish to CREATE in the Model Explorer图3.2.32修改作用域与父对象用户若接受向导的建议,则单击数据/事件前的空白处,选中该条目,之后按下 Create,创建对象,如图3233所示。Unresolved symbols found in:stopwatch_process(machine)Place a check by the data/events you wish to CREAT

36、E in the Model Explorer图3.2.33创建对象3.3 Stateflow 流程图3.3.1 流程图与节点3.1 与3.2节介绍了 Stateflow状态图的基本概念与创建过程。状态图的一个特 点是,在进入下一个仿真步长前,它会记录下当前的本地数据与各状态的激活情况,供下一步长使用。而流程图只是一种使用节点与迁移来表示条件、循环、多路选择 等逻辑的图形,它不包含任何的状态。由于迁移(除了默认迁移)总是从一个状态到另一个状态,节点之间的迁移只 能是一个迁移段。因此流程图可以看作是有若干个中间支路的一个迁移,一旦开始 执行,就必须执行到终节点(没有任何输出迁移的节点),不能停留

37、在某个中间节点,也就是说必须完成一次完整的迁移。从另一个角度来看,节点可以认为是系统的一个判决点或汇合点,它将一个完 整的迁移分成了若干个迁移段。因此可以将几个相同的迁移段合并为一个,用一个 迁移表示多个可能发生的迁移,简化状态图,由此生成的代码也更加有效对于以下情况,用户应首先考虑使用节点:if-else判断结构、自循环结构、for循环结构;单源状态到多目标状态的迁移;多源状态到单目标状态的迁移;基于同一事件的迁移;注意:事件无法触发从节点到状态的迁移。建议:用户可以把流程图封装成一个图形函数(详见3.6.2节),便于在Stateflow 的任意位置调用。3.3.2建立流程图1.手动建立建立

38、流程图的过程与建立状态图的过程相似,以一段简单的代码为例,手动建 立流程图。if percent=100percent=O;sec=sec+l;else if sec=60sec=O;min=min+l;end end起始节点单击按钮,添加起始节点。如图3.3.1所示:国1固原回固图3,3.1添加节点条件节点与终节点根据代码的执行过程,节点间的迁移与迁移标签,逐一添加条件节点A1、B1、C1,终节点A2、B2,以及 如图3.3.2所示。i percent=100percent=0;sec=sec+1;-1-o A22 sec=60sec=0;min=min+1;87-xQ B22ci&图3.3

39、.2流程图流程图运行过程如下:1.系统默认迁移进入节点A1,如果条件 percent=100为真,执行 percent=0;sec=sec+1并向终节点 A2 迁移;2.如果条件 percent=100不为真,向B1节点迁移,继续判断如果条件 sec=60为真,执行sec=0;min=min+1;,并向终节点B2迁移;3.如果不满足任何条件,则向终节点C1迁移。节点与箭头大小对于某些重要的节点或迁移,用户可以调整其节点大小与迁移箭头的大小,突 出其地位。例如,选择节点C1的右键菜单项J unction Size-16,如图3.3.3所示,放大节点;选择节点A1的右键菜单项Arrowhead S

40、ize-20,放大指向该节点的 所有迁移箭头,如图3.3.4所示。percent=100percent=0;sec=sec+1;sec=60sec=0;min=min+1;-KJ 82图3.3.3节点大小j percent=100percent=0;sec=sec+1;A1 Qi-O 422V sec=60sec=0;min=min+1;B1 卜 1-O 82图3.3.4箭头大小优先级两个判断节点A1、B1,均有两条输出迁移,分别标记了数字1、2,这表示迁 移的优先级。默认情况下,Stateflow状态图使用显性优先级模式,用户可以自行修 改各个迁移优先级。例如,选择迁移曲线的右键菜单项Exe

41、cution Order,将优先级由1降低为2,如图3.3.5所示。修改了某一输出迁移的优先级,系统会自动调整同一节点另一迁 移的优先级。B1C1A1Execution OrderFont SizeArrowhead SizePatternsSmart percent=100CutCopyPasteec+1;sec=60secBackForwardGoTo ParentRequirementsHDL CoderA282图3.3.5迁移优先级为避免用户错误地设置优先级,Stateflow提供了另一种模式:隐性优先级。选 择编辑器菜单项 File f Chart Properties,取消 Use

42、r specified state/transition execution order前的复选框,启用隐性模式,如图3.3.6所示。Name:ChartMachine:(mKchine)J unctionState Machine Type:ClassicUpdate method:|I nherited|Sample Time:j Enable C-bit operations|Apply to all charts in machine nowQ User specified stete/transition execution ode Export Chart Level Graphi

43、cal Functions(Make Global)Use Strong Typing with Simuhnk I/O图3.3.6自动设置迁移优先级使用这种模式时,系统根据以下规则,自动设置迁移优先级,从高到低排列为:1.既有事件又有条件的迁移2.仅有事件的迁移3.仅有条件的迁移4.不含任何限制的迁移注意:同一个Stateflow状态图,只能选用一种优先级模式,但对于有多个状态 图的Simulink模型,则不受此限制。2.自动建立对于简单的流程图,手动建立难度不大,而对于稍复杂的逻辑,用户难免会感 到无从下手。Stateflow提供了快速建立流程图的向导,它可以生成3类基本逻辑:判断、循环、

44、多条件。本小节使用向导,重建图x的流程图。单击编辑器菜单项Patterns-Add 选择流程图的类型,如图3.3.7所示。File Edit Viww Siniuldtion Tooli.Format Add Pdltein*.|Help田口昌 T b Q 西Add DuLiiun If.Add“叩Add SwitchV Elseif.Add CustomIf-Elseif-Else.nH-Dseif-Dserf-Dse.Save Pattern图3.3.7流程图向导菜单 这里选择 Patterns-*Add Decision-*I f-Elseif-Else.,在随后打开的对 话框中输入判断

45、条件与对应的动作,如图338所示。图3.3.8新建流程图对话框生成的流程图如图339所示:42 percent=100u sec=606 彳-9sec=O;min=min+1;percent=O;sec=sec+1;O85d图3.3.9流程图3.两种方式的对比尽管用户可以手动建立流程图,但使用流程图向导的优势也是显而易见的:任何一种流程图都可归结为判断、循环、多条件,或者三者的组合,因此 皆可以使用向导自动生成;使用向导生成的流程图符合MAAB(Math Works Automotive Advisory Board)规则,这有利于后期模型检查;各种流程图的外观基本一致;将设计好的流程图,另存

46、为模板,便于重用。3.4 层次结构3.4.1 层次的概念Stateflow的对象具有层次性,一个Stateflow对象可以包含其他Stateflow对象,例如状态内若包含其他状态,则形成父状态,其内部状态称为子状态。当状态具有 第二个层次时,状态就构成了层次。状态具有了层次,迁移自然也具有了层次,Stateflow允许在不同层次状态之间 存在转移。如果迁移穿越了父状态的边界直接到达了低层次的子状态,则被称之为 超迁移。在状态图中使用层次有如下几个目的:使用层次,可以将相关的对象组合在一起,构成族群;可以将一些通用的迁移路径或者动作组合成为一个迁移动作或路径,简化 模型;适当地使用层次,可以有效

47、地缩减生成代码的大小,也能够提高程序执行 的效率和可读性。3.4.2 迁移的层次1内部迁移内部迁移是指从父状态边缘内部出发,终止于子状态外边缘的迁移,迁移始终 处于父状态的内部,不会退出源状态。在交通灯系统中,同一个父状态PowerOn存在红黄绿三个子状态,它们需要不 停地转换,但除非发生PowerOff事件,不会退出父状态,对于这样的逻辑过程,读 者可能习惯使用节点将三种状态的迁移联系起来,如图3.4.1所示。图3.4.1带有节点的迁移使用了内部迁移,可直接从父状态激活相应的子状态,不必经过节点,大大简 化状态图,如图3.4.2所示。图3.4.2内部迁移状态图2层次化迁移的优先级与状态类似,

48、迁移也具有层次性,迁移所属的层次是由其父状态、源状态和目 标状态决定的。因此,当多个迁移同时有效时,Stateflow需要有一个层次化迁移优 先级机制来判断迁移顺序。层次化迁移的优先级规则为:从高层次到低层次检测;从外部迁移到内部迁移 检测;同一层次内,超转移优先。如图343所示,图表激活时,默认迁移激活状态A,继而状态A.al被次级默 认迁移激活,这时按以下优先级检测迁移是否有效:检测高层A,B状态的外部迁移是否有效(eventl,event2);检测高层A,B状态的内部迁移是否有效(event3);检测低层al,a2,bl状态的超迁移是否有效(event4);检测父状态A内部子状态间的迁移

49、是否有效(events,event6)oevent4event3event2event6event5a2-event 1图3.4.3层次化的迁移3.4.3 历史节点在状态图的顶层或一个父状态里或放置一个历史节点,它便能能记录退出父状 态时,正处于激活状态的子状态,当再次进入父状态时,则默认激活上一次所记录 的子状态,而不是激活默认迁移的状态。历史节点的作用域仅限于它所存在的层级。如图3.4.4,父状态A2中加入了历史节点,因此当第1次激活A2状态时子状 态C1被激活,满足迁移条件时C2被激活,但此后A2状态向A1状态的迁移将优 先发生,C2状态不再向C1状态迁移。于是第1次激活A2状态时,被激

50、活的子状 态是C2,而不是C1。读者可以从图345所示的输出看出上述的迁移过程。图3.4.4历史节点4.5图3.4.5运行结果图3.4.6与图3.4.7是不包含历史节点的状态图及其运行结果,用户应详细比较 两者的区别。图3.4.6不含历史节点的状态图图3.4.7运行结果3.4.4 子状态图子状态图其实就是其内部所包含的状态图的父状态。用户可以像操作父状态一 样为子状态图定义状态动作,迁移和默认迁移。与Simulink中的子系统类似,子状 态图隐藏了模型的细节,简化了图表。以图348为例,在状态A中单击右键,在菜单中选择Make Contents-Subchartedo此时,A状态变成了灰色,隐

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 行业资料 > 其他

移动网页_全站_页脚广告1

关于我们      联系我们       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号  |  icp.png浙ICP备2021020529号-1 浙B2-2024(办理中)  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服