对于Stateflow图表,每一次转移表示一次状态的转换,可以一次只有一个或多个处于激活状态,转移可以由事件或条件触发,激活的状态才能执行相应的程序。
转移为状态间的变换提供了路径,从状态A到状态B发生转移,即状态A变成非激活状态(假设A为激活状态),状态B会被激活。转移是有方向的,在Stateflow图表中用箭头表示,而且是单向的。在两种状态间的转移有两个,有效转移是指一种状态到另一种状态的转移,它们到连接节点的迁移不是完整的转移。互斥状态(OR)不能同时被激活,需在两种互斥的状态间添加一定的条件转移;并行状态(AND)可以同时被激活,在并行状态间无需转移。
1.转移的概念
转移是Stateflow框图中最常见的图形元素之一,无论是包含状态的状态图还是没有状态的流程图中,几乎都存在转移。转移描述的是有限状态系统内的逻辑流。转移管理了当系统从当前状态改变时,这个系统可能发生的模式改变。当转移发送时,源状态变为非活动状态,目标状态变为活动的状态。
从图形上看,转移是带有箭头的线,这就使得整个状态图或者流程图成为了“有向图”,状态或者流程之间的转换,将直接受到转移方向的约束。例如,在家用的DVD/VCD*放播**系统中,一般系统都具有有限个状态(*放播**,停止、快进、快退和暂停),因此,*放播**机根据某一事件的发生来确定哪一个转移是有效的,从而改变模式到其他可能的状态。另外,也有几种不同的路径可以返回到*放播**状态(例如可以从停止状态或者从快退状态返回*放播**状态)。因此,描述这一系统的状态图就包含了状态之间的转移。
2.创建转移的方法
创建转移的方法同创建状态的方法不一样,因为图形对象面板中没有转移图标。创建转移的具体步骤是:
(1)当鼠标光标接近状态的边缘时,鼠标光标将变成十字形状。
(2)按下鼠标左键并保持,将引出的转移拖放到目标状态的边缘即可,如图所示。


利用同样的方法,还可以创建起点和终点在连接节点上转移,如图所示。

在默认的情况下,转移具有精确绘图行为,也就是说,创建完毕的转移的两端可以在它要连接的对象边缘滑动,这样当重新整理框图时转移能保持它的形状和唯一性。

3.转移属性
转移同样具有属性设置对话框。在转移上单击右键,执行快捷菜单中的Properties命令,就可以通过转移的属性对话框设置转移的属性。


转移的属性对话框中的内容主要包括:
Source属性:状态转移的出发源状态的名称。例如图中,ON状态成为该转移的出发
源状态。单击蓝色字体文本,可以在Stateflow图形编辑器中直接查看该状态。
Destination属性:状态转移的目标状态的名称。例如图中,OFF状态是该转移的目标
状态。单击蓝色字体文本,可以在Stateflow图形编辑器中直接查看该状态。
Parent属性:状态转移的父层次对象,类似状态的Parent属性。
Label属性:设置转移上面定义的文本。转移标签的内容可以包含非常丰富的内容,
例如事件、条件和动作等。
Description属性:Stateflow允许用户为定义的图形或者非图形对象增加必要
的描述文本,就好比编写c语言程序时,为程序增加必要的一些注释一样。可以在
这里增加需要的文本说明,在代码生成时,Description属性的文本内容可以显示
在代码相应的位置。
Document Link属性:允许用户为相应的图形或者非图形对象增加必要的超链接。该
属性的内容即可以是MATLAB的表达式,也可以使本机的超文本链接,还可以是因特网
的网址。当用户查看相应的对象额属性时,只要单击Document Link,就可以在相应
的编辑器或者浏览器中查看到具体的超链接信息。如果该属性的内容为空,则单击
Document Link时,Stateflow将给出该属性的填写示例。
4.转移标签
转移同样可以添加标签,给转移添加标签的方法是:
(1)左键单击选择相应的转移,此时转移将显示问号;
(2)左键单击出现的问号,则进入文本编辑状态;
(3)在光标处插入文本;
(4)单击Sateflow编辑器中任意一处,结束标签的插入。

一个完整的转移标签由四个部分组成,分别为事件、条件、条件动作和转移动作,也可以包含相应的注释,转移标签的完整表达如下:
Event[Condition]{Condition Actions}/{Transition Actions}
其中:
事件是Stateflow非图形对象的一种。在有限状态机中,只有在事件发生时,才可能去执行相应的转移,因此Stateflow的模型又叫做事件驱动系统。
位于方括号“[]”中的内容是条件,条件是用于转移决策的逻辑判断。只有在相应的事件发生且条件也满足时,相应的转移才可能执行。一般地,条件是由逻辑运算或者关系运算组成的,也就是说,运算结果为布尔类型变量的函数、表达式都可以作为条件表达式。不过在Stateflow的条件中,条件表达式不能调用图形函数等Stateflow的图形对象,更不能用于触发状态的改变。如果在转移上没有定义事件和条件,则意味着该转移在任何事件发送时都会执行。
紧接在条件后面花括号“{}”中的内容就是条件动作,条件动作是在条件满足时就立即执行的某些表达式,例如赋值运算等。
转移动作是整个转移标签的最后一个部分,位于“/”后面的内容都是转移动作。转移动作只有在整个转移通路都有效时才能够执行。
注意:组成转移标签的四个部分不一定完整地出现,但是无论出现那几个部分,标签的内容必须按照上面指定的顺序书写。
注意条件动作与转移动作两者之间的区别:条件动作在条件满足的情况下就能够执行,而转移动作需要在整个转移通路都有效的情况下,在执行转移的时候才能执行。

这里面的转移是由两个部分组成,假设当前C1条件为真而C2条件为假,则整个转移通路是无效的,但是条件动作A1会执行,因为该条件所处的转移通路局部是有效的,但是由于C2为假,因此所有转移动作(A2和A4)都不会执行。C2条件为假,则条件动作A3也不会执行。
在Stateflow中主要使用以下三类语法元素作为动作:
(1)数*运学**算表达式或者逻辑运算表达式。
(2)调用函数。
(3)事件广播。
调用函数可以调用M语言函数、C Math Library 函数以及用户自定义的C函数等。
5.参考文献
[1] 刘杰.基于模型的设计及其嵌入式实现[M].北京:北京航空航天大学出版社,2010.
[2] 张威.Stateflow逻辑系统建模[M].西安:西安电子科技大写出版社,2007.
本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。
作 者 | 郭志龙编 辑 | 郭志龙校 对 | 郭志龙