logo资料库

stateflow教材手把手教你-Stateflow教程.pdf

第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
资料共33页,剩余部分请下载后查看
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 action during:during action exit:exit action %退出此状态时执行 exit action(可以是事件触发) Stateflow 中的动作: 触发时间[迁移条件关系式]{条件动作}/迁移动作。 注意 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]意义相同 下边是一个定时器的转换图:
说明:格式 触发事件[条件关系式]{条件动作}/迁移动作 Stateflow 中的动作: 触发时间[迁移条件关系式]{条件动作}/迁移动作。 触发事件表示只要迁移关系式是真,该触发事件可以引发状态的迁移,缺省触发事件 时,任何事件均可以在条件关系式为真的情况下引发状态的迁移,在图 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. >> t=0:0.1:10; % 表示输入信号的时间范围 >> u=sin(t); % 产生输入正弦信号 >> sim_input=[t',u']; % 传递至 Simulink 系统模型的变量接下来,采用默认的系统仿真参数并 运行系统仿真。sim_input 是在 ConfigueationParameters 里的 data import/export 里设置的输 入。最后使用 MATLAB 命令绘制出原始输入信号与系统运算结果, >> plot(t,u,tout,yout,‘--’) %绘制系统输入信号与仿真结果,使用 sim 命令进行动态系统仿 真 什么是有限元状态机? 有限元状态机是具有有限个状态的系统的理论表述。它以某些缺省的状态为起点,根据 所定义的事件和转移进行操作。转移表示状态机如何对事件进行响应(控制流程)。它有明确
的输入和输出的个数,可以明确地配置所有的模式或状态。它也定义了导致系统从一个状态 转换到另一个状态的逻辑或事件。 状态(States) 在有限状态机里,状态描述的是系统的一种模式。状态具有布尔行为,也就是说在任何 给定的时刻它或者是活动的或者是非活动的。 状态在系统中被看作为记忆元件。它保持系统的当前模式,一旦被激活,状态就保持活 动的模式,直到系统改变模式,状态才变为非活动的。 在层次的同一级里,所有的状态要么是互斥(OR)的要么是并行(AND)的。如果状态之间 是互斥的,那么在任何给定的时刻只有一个状态是活动的,如果状态之间是并行的,在同一 时刻所有的状态都是活动的。在同一级里面不可能有既是互斥的又是并行的状态存在。它们 必须是或者互斥或者并行。 转移(Transitions) 转移描述的是有限状态系统内的逻辑流。转移管理了当系统从当前状态改变时,这个系 统可能发生的模式改变。当转移发生时,源状态变为非活动的,目标状态变为活动的。 事件(Events) Stateflow 中的动作: 触发事件[迁移条件关系式]{条件动作}/迁移动作。 事件控制有限状态系统的执行。只有某个事件发生后系统才能从一个状态改变到另一个 状态。事件是非图形对象——每个事件都被定义成一个独立的名字。如果一个转移用一个事 件名做为标签,仅当那个事件发生时,转移才有效。如果转移没用事件名作为标签,只要有 事件发生转移就有效。 条件(Conditions) 条件是有限状态系统中的有效流,条件必须定义在[]括号中。当一个事件发生时,只有当[] 括号中的语句为真或非零时,带有条件标签的转移才有效。转移可以同时拥有事件和条件; 条件要放在事件名之后。当转移标签既有事件又有条件时,只有当指定的事件发生并且条件 为真时转移才有效 动作(Actions) 转移动作是当一个转移发生时要执行的命令。转移动作定义在―/‖之后,动作能影响系 统本身,并且(或者)影响到与有限状态系统相关的一些外部元素。动作能够处理数据,调 用函数,发生触发事件。 如果把动作和转移相关联,动作语句要放在事件标签和条件语句的后面。 数据对象(Data Objects) 数据对象存储了关于条件和动作的一些必要的信息。数据对象是非图形对象– 每一个数 据对象都被指定成一个独立的名字。 连接节点(Connective Junction)
连接节点作为转移通路的判决点或汇合点。它不是记忆元件。因此,转移的执行不能停 留在节点上,必须到达某个状态时,转移才能停止。 连接节点可以作为一个决策点。由于连接节点不是记忆元件,转移必须到达某个状态时, 执行才能结束。因此,可以利用这个特点来简化模型。 缺省转移(Default Transitions) 缺省转移确定当有限状态机或者父状态处于活动状态的时候,在所有的子状态中第一个 被激活的状态。图中当有限状态机变为活动的时候,它首先尝试激活带有缺省转移的子状态, 同时可以在缺省转移的标签上加上事件和条件来进行限制,也可以将动作和缺省转移相关 联。 注意: 缺省转移并不意味着停止状态在最初就是活动的,它仅仅标志着当DVD播放机 系统变为活动的时候这个状态是活动的 状态转移 Stateflow状态图被称为―状态转移图‖,这些状态图中包含了所谓的状态、状态转移管理 和维护当前内存中活动的状态 一旦包含了状态转移的状态图处于活动的状态,则状态图将一直处于这种活动状态,直 到整个模型仿真计算结束。 当在某一个制定的时间步长内完成了必要的工作后,状态图简单地进入到一种暂时挂起 的状态,而不是非活动状态。也就是说,在连续两次触发事件之间,状态图是一直处于活动 状态的。 具有状态转移的Stateflow状态图相当于一种包含了离散系统模块的触发子系统。这种子 系统在内存中保持自己的状态,在有触发时更新自己的输出,而在两个连续的触发之间保持 自己的状态。 当一个状态转移图处于活动状态时,这个状态转移图首先尝试激活相应的状态,以及邻 近的状态。如果,状态机处于第一层,则执行的第一个元素是系统的默认转移。由于状态机 在模型运行结束之前一直处于活动状态,默认转移仅仅有效一次,即在状态机被激活的首次 有效,这一点必须注意。如果状态的第一层仅有一个状态,则可以不使用默认的转移。一旦 进入一个状态,这个状态就一直处于活动状态,直到退出为止。与状态机类似,状态也在连 续两次触发之间挂起而不会成为不活动状态。 注意 StateFlow 同层次的图执行顺序是从上到下,从左到右的优先级原则,during 和 on 事件的执行顺序由他们在状态图中的位置决定,先写的先执行 事件驱动 所谓事件是指触发的发生。一个触发可以是隐含存在的,按照预先的配置自动的发生。 同样,触发也可以显性的定义,在一个具有过零特性的信号发生,或者被函数调用时,触发 发生,也就是发出了事件。由于这种触发而引起的相应的动作执行,被称之为事件驱动! 在Stateflow中,所有的状态图的运行都是依靠事件驱动。换句话说,状态图是依赖于事 件而活动的。事件同样驱动状态的变化。 每次触发一次,状态图就重新进行判断一次。
分享到:
收藏