Stateflow工作窗口介绍:
创建框图之后,可以将其锁定,具体做法是:
1. 选择Edit菜单下的Chart Properties选项打开Chart属性对话框 2. 在Editor域里面选择Locked选项。
在matlab窗口中输入sfnew,则出现了带chart的simulink工作界面 Inf代表无穷大
两个chart的并行状态的设置:在Stateflow的空白处,右击鼠标,选择Decomposition-parallel(AND)此时两个状态的边框将变成虚线,并出现边框 状态(state):双击它就可以在其中写一些命令,格式如下(%后面的是我自加的,方便解释): name/ %此状态的名称
entry:entry action %刚转换到此状态时执行entry action during:during action %在此状态之中时执行during action exit:exit action %退出此状态时执行exit action(可以是事件触发)
注意 StateFlow 同层次的图执行顺序是从上到下,从左到右的优先级原则,during和on事件的执行顺序由他们在状态图中的位置决定,先写的先执行
on event_name:on event_name action %当某事件发生时执行on event_name action
历史节点(History Junction):一旦一个状态框中有这个历史节点,在退出这个状态时会将这个状态的一些信息保存下来,当下次再进入此状态时,此状态的初始状态就会是前面保存过的那些信息。
默认转换(default transition):把他拖到一个状态的旁边,它就会指向一个状态,表示系统启动后将首先进入这个状态。
节点(Junction):它是方便画状态图的,当各个状态之间的转换很复杂时,可以设立中间节点,将一些相同的转换指向它,然后再由它指向各个状态(或另一个中间节点)
转换线(transition):将鼠标放在一个状态的旁边,当它变成+形状的时候,按下左键不动,就会拉出一条线来,当拉到另一个状态旁边时松开左键,这样就画出了一条由一个状态指向另一个状态的转换线,选中这条线,将鼠标停留在上面,鼠标会变成一个I的样子,这时按下鼠标,就可以在上面写语句,例:switch(switch事件使状态转换)或[output>maxtime](当此条件满足时进行状态的转变)。 交汇连接点:主要用于处理状态迁移过程中的迁移信号的分离和汇合,合理的使用可以实现if_else的功能
图形函数工具; 格式:返回形参 = 函数名(形参)
状态流的图形函数是使用交汇连接工具和状态转移工具绘制状态流图形,在调用函数时,函数必须执行完全,所以图形函数中不能含有状态。一个最小的图形函数至少要包含一个缺省的迁移和一个终止的交汇连接工具
可以在状态流的状态动作好状态迁移中反复调用它,调用的格式与函数的格式完全相同,知识需要将形参换成实际使用的参数变量。
历史交汇工具的使用:Stateflow图进入上层状态时,缺省状态迁移线连接的子系统首先被激活,单在某些情况下,希望在进入上层状态时首先激活以前的最后的状态,这样就要求在上层状态中引入历史交汇工具完成。
嵌入式MATLAB函数:格式:函数名(形参) 内嵌函数的调用类似于图形函数的调用方法,用户可以在状态的动作和迁移过程中对内嵌函数进行反复的调用。
函数的格式:
function MaxMin(x) len=length(x); XMax=max(x); XMin=min(x); XMean=avg(x,len);
function mean=avg(array,size) mean=sum(array)/size;
真值表的决策和使用:Stateflow使用函数在处理Stateflow图中反复处理的动作和判断。在真值表中,用户可以使用条件、决策和动作来做逻辑判断,并执行相应的动作,对于纯粹的逻辑来讲,真值表还可以告诉用户是否对于指定的条件做出足够的或过多的决策。
Stateflow使用真值表函数实现逻辑决策及相应动作的执行。Stateflow真值表含有条件、决策和动作。Stateflow还允许真值表函数添加初始和终止动作。初始动作指仁和决策判断前的动作。终止动作指顶真值表函数即将退出最后执行的动作。在动作编辑表中使用INIT和FINAL来为真值表函数指定初始和终止动作 为什么初始动作和结束动作不能用 决策列隐含着各个条件的“与”操作。最后一个决策称为缺省策略。可以很好的实现if_else的功能。缺省策略怎么实现
Box工具整理状态流图: 状态图右击Type—Box,也可以直接创建Box,在里边创建其他的对象,创建好之后可以打包 MakeContent—Group,Box中的对象就变成了子图。对Box添加数据,可以是Box中的所有原始共享该数据。多数情况下Boxes不改变Stateflow图的逻辑判断功能,但是存在并行状态时,她却影响着StateFlow图中的激活顺序。在一个Box中,顺序是从上到下,Box之间是左到右
以上的共同点:创建的时候参数需要在model中创建输入参数和输出的参数。 Stateflow中的动作: 触发时间[迁移条件关系式]{条件动作}/迁移动作。
任何Stateflow事件都(包括 enter事件、exit事件、或change事件等隐含事件)都可以作为瞬时动作的基事件。可以使用simulink的输入。也可以使用隐含时间wakeup或(tick)来唤醒Stateflow图(不能用在缺省的途中。 常用的逻辑操作:
After(10,CLK)&&[temp==COLD]与CLK[after(10,CLK)&&temp==COLD]意义相同
下边是一个定时器的转换图:
说明:格式 触发事件[条件关系式]{条件动作}/迁移动作
触发事件表示只要迁移关系式是真,该触发事件可以引发状态的迁移,缺省触发事件时,任何事件均可以在条件关系式为真的情况下引发状态的迁移,在图12.7中,只有条件[off_count = = 0]为真,事件off_switch可以引发状态On致状态Off的迁移。
条件关系式一般为布尔关系式,写在方括号中,使得对于特定的信号有效,本例中,
只有off_count = = 0为真时,发生事件off_switch才可以引发状态的迁移。 条件动作是指当条件关系式一旦成立(即为真时),就执行的动作,通常发生在迁移终点被确认有效之前。如果没有规定条件关系式,则认为条件关系式为真,即刻执行条件动作。条件动作必须写在花括号中。在图12.7中,只要条件[off_count = = 0]为真,即刻执行条件动作off_count++。
迁移动作是指当迁移终点已经确定有效才执行的动作,如果迁移包含很多阶段,迁移动作只有在整个迁移通道到终点确认为有效厚方可执行。迁移动作写在斜线‖/‖之后,在图12.7中的实例中,当条件[off_count = = 0]为真,发生了off_switch事件,迁移终点状态Off确认为有效,此时执行迁移动作LED_off。
教会连接if_else的实现和for循环功能
在simulink中,自己可以手动的调整开关,canstant中的数据可以修改,调试仿真。
???自己生成的那个错误是什么原因 在buhao.Mdl 运行中怎么有红圈和篮圈,分别带表什么? 能不能调用子状态 :的作用是什么???
>> fin = [[0:1/2000:1-1/2000] [1:-1/500:1/500]]; >> t = 0:4999;
>> value = [fin fin]; jaws = [t' value']; Data: jaws Sample time: 1
Form output after final data value by: SettingToZero.
相关推荐: