Stateflow系统建模(全)PPT文件格式下载.pptx
《Stateflow系统建模(全)PPT文件格式下载.pptx》由会员分享,可在线阅读,更多相关《Stateflow系统建模(全)PPT文件格式下载.pptx(63页珍藏版)》请在冰豆网上搜索。
(2)用图形的形式绘制出状态迁移的条件。
(3)使用规定的命令设计状态迁移执行的任务。
完成以上操作即构造出整个有限状态机系统。
注:
Stateflow模型一般是嵌在Simulink模型下运行的,Stateflow是由事件驱动的,这些事件可以来自某一个Stateflow图中,也可以来自Simulink。
实例:
DVD播放机8缺省转移1状态2转移3事件4条件5动作7连接节点6Counter数据对象一个状态机(可以包含多个Chart)用户可以利用Stateflow编辑界面左侧的编辑工具绘制Stateflow图形,下面介绍常用的编辑工具。
1.状态工具2.历史交汇工具3.默认转移4.连接节点5.真值表6.图形函数工具7.内嵌Matlab函数8.模型整理工具10放大缩小工具9.函数调用创建状态图插入图块Chart在MATLAB命令窗口输入sfnew直接从stateflow库中拖Chart块到模型中拖拖创建状态图几个术语每个Chart被称作一个stateflow图块,每个图块都有对应的stateflow框图,模型中所有的图块的集合叫做stateflow状态机,且一个模型中只有一个状态机。
状态机状态机图块图块框图框图双击双击图块包含的内容图块包含的内容创建状态图的几个重要图形对象状态连接节点转移转移标签默认转移添加注释状态(Chart)状态具有层次性父状态子状态状态(Chart)状态(Chart)状态(Chart)连接节点转移转移标签事件事件条件条件条件动作条件动作转移动作转移动作如果在转移上没有定义事件和条件,则意味着该转移在任何事件发生时都会执行。
如果在转移上没有定义事件和条件,则意味着该转移在任何事件发生时都会执行。
状态转移使用条件条件表达式包括:
逻辑运算或关系运算以布尔变量作为返回值的函数条件表达式不能通过调用函数而更改数据对象或影响状态赋值表达式不能作为条件表达式使用“与”操作符“&
”完成条件表达式的与操作使用“或”操作符“|”完成条件表达式的或操作转移标签事件事件条件条件条件动作条件动作转移动作转移动作转移标签状态转移动作语言动作语言的功能:
执行数学计算:
操作数据对象调用函数:
使用MATLAB或C语言的函数触发事件:
影响内部或外部的状态状态转移支持的数学运算二元操作:
*/%+-=!
=&
|&
|一元操作:
!
-+-赋值运算:
=+=-+*=/=位操作:
&
=|=状态转移调用MATLAB函数调用MATLAB函数,需要在函数的名字前使用MATLAB命名空间运算符,如y=ml.abs(x)在使用ml运算符调用MATLAB函数时需要注意以下几点:
使用ml关键字调用的MATLAB函数,仅能使用标量或者字符串作为函数的输入参量调用函数时的圆括号是必须,无论被调用的函数是否具有参量如果调用的函数具有返回参数,则返回数值的类型必须为double型如果具有多个返回变量,仅有第一个返回变量被赋值状态转移C语言数学函数调用C语言数学函数:
如y=abs(x)下表中所列的数学函数可以被调用状态转移调用函数调用MATLAB函数时需要使用ml操作符,而调用C语言函数的时候则比较简单,调用调用C语言函数语言函数调用调用MATLAB函数函数默认转移默认转移添加注释状态图基本概念事件触发状态图处于非活动状态且有事件触发时(被激活),则执行状态图处于非活动状态且有事件触发时(被激活),则执行的第一个元素是系统的默认转移,默认转移仅仅有效一次,的第一个元素是系统的默认转移,默认转移仅仅有效一次,即在状态机被激活的首次有效,即在状态机被激活的首次有效,如果状态图只有一个状态,如果状态图只有一个状态,则可以不使用默认转移。
则可以不使用默认转移。
一旦进入一个状态,这个状态就一一旦进入一个状态,这个状态就一直处于活动状态,直到退出为止。
直处于活动状态,直到退出为止。
事件触发:
事件驱动的发生。
在事件驱动的发生。
在SIMULINK中,定义的事件中,定义的事件就是某些就是某些过零信号的产生过零信号的产生,只有过零信号才能触发状态转移,只有过零信号才能触发状态转移的发生或者状态机的激活,由这种触发引起的相应的动作执的发生或者状态机的激活,由这种触发引起的相应的动作执行,被称为事件驱动。
行,被称为事件驱动。
过零触发过零信号触发事件具有三种形式:
1上升沿触发:
当过零信号由负值变为正值,或者由负值变为0,或者由0变为正2下降沿触发:
当过零信号由正值变为负值,或者由正值变为0,或者由0变为负值3双边沿触发:
上述两种触发机制的结合下降沿下降沿上升沿上升沿事件触发在在SIMULINK中能够产生过零信号的模块有:
正弦振荡中能够产生过零信号的模块有:
正弦振荡信号、方波产生器、阶跃信号、双端输入开关和静态模信号、方波产生器、阶跃信号、双端输入开关和静态模块。
块。
事件添加添加事件:
通过添加事件:
通过Add下的下的Event子菜单子菜单Name:
事件的名称,与一般事件的名称,与一般C语言变量的命名原则一致,使用字符开头,可以语言变量的命名原则一致,使用字符开头,可以用字符及下划线。
用字符及下划线。
事件添加Scope:
定义事件的作用类型,分别为:
定义事件的作用类型,分别为Local:
在状态图的内部发挥作用在状态图的内部发挥作用Inputfromsimulink:
从:
从simulink框图输入到框图输入到Stateflow中,也就是中,也就是Stateflow外部触发事件外部触发事件Outputtosimulink:
从Stateflow输出到输出到simulink中,利用中,利用Stateflow定义的事件驱动或者触发其它定义的事件驱动或者触发其它Stateflow系统动作。
系统动作。
Port属性:
当属性:
当SCOPE定义为定义为Inputfromsimulink和和outputtosimulink时才时才发挥作用。
当发挥作用。
当scope为为Inputfromsimulink时,该属性对应输入事件的索引。
时,该属性对应输入事件的索引。
当当scope为为outputtosimulink时时,该属性表示事件输出端口的序号。
主要对应该属性表示事件输出端口的序号。
主要对应定义多个事件。
定义多个事件。
Trigger属性:
分别为属性:
分别为Either、Falling、Rising、FunctionCall。
分别表示双。
分别表示双边沿触发、下降沿触发、上升沿触发、函数调用触发边沿触发、下降沿触发、上升沿触发、函数调用触发Debuggerbreakpoints:
设置断点,提供调试作用。
事件输入状态转移输入事件定义事件类型事件类型多个事件输入只有一个事件输入端口只有一个事件输入端口状态转移定义多个输入事件多个事件输入第一个事件第一个事件最后一个事件最后一个事件当多个事件同时发生,将按照定义事件的索引顺序依次处理。
当多个事件同时发生,将按照定义事件的索引顺序依次处理。
事件向量中的索引。
数据对象这里使用的是条件动作,没有增加任这里使用的是条件动作,没有增加任何事件和条件限制,该转移为无条件何事件和条件限制,该转移为无条件的转移。
的转移。
数据对象Name:
数据对象命名,与一般C语言变量命名原则一致。
Scope属性:
Local:
数据对象仅能在所属状态图内使用。
Input:
接收从SIMULINK模型提供的信号,每个输入数据对象独占一个数据输入端口,Stateflow图块上将出现数据输入端口。
Output:
将Stateflow数据输出到SIMULINK模型,每个输出数据对象独占一个数据输出端口,Stateflow图块上将出现数据输出端口。
Constant:
数据对象为常量,数值不发生变化。
Parameter:
当Stateflow框图位于某个封装子系统内部时,直接获取封装子系统设定的参数,在整个仿真过程中,其值不变。
Datastorememory:
该数据对象与SIMULINK工作空间中的数据对象绑定。
数据对象Size:
数据对象的尺寸。
属性值为5,则数据对象为5个元素的向量,属性值为23,数据对象为矩阵。
使用非标量数据对象Dataexp1.mdl状态图更新当有外部事件定义时,Stateflow模型仿真按照事件进行触发。
当没有定义任何输入事件的系统,状态图的仿真按照更新模式进行。
三种更新模式:
状态图更新Inherited:
(1)有输入事件定义。
按照事件触发更新。
当相应类型的事件发生时,进行状态的转移、动作的执行。
(2)未定义输入事件但定义了输入数据。
模型按照与其连接的SIMULINK输入信号中更新频率最高的信号更新周期来仿真。
如果输入数据是常量,按照第三种情况。
(3)既未定义输入事件又未定义输入数据。
模型继承其父层次模型的更新周期。
Discrete:
模型看做具有固定周期的离散块。
在设置该更新模式时,要设置属性“SAMPLETIME”作为更新周期,单位秒Continuous:
STATEFLOW框图好比SIMULINK模型中的一个连续系统模块,按照系统仿真步长完成更新。
状态图更新按照不同的更新模式进行更新:
Inherited:
按照单位延迟的采集周期1秒state_update_inherit.mdlDiscrete:
按照设定的Sampletimestate_update_discrete.mdlContinuous:
按照整个系统的仿真长state_update_continue.mdl状态图更新exp3.mdlInherited:
事件触发模型查看器流程图Stateflow图如果不包含任何状态就构成了一个流程图流程图主要是由转移和连接节点组成流程图一旦被触发,就会一直执行到退出为止流程图在没有合法的转移分支的连接节点处执行结束流程图所在的chart模块或状态(流程图可以嵌套在状态中)一旦被激活,流程图立即执行直至终止节点。
流程图建模转移检测优先权如果有多个有效的转移,检测规则决定执行哪个转移限制越多的转移,优先级越高:
既有事件又有条件的转移第一个被检测仅具有事件的转移则被第二个检测仅具有条件的转移第三个被检测不加任何限制的转移最后被检测流程图建模转移冲突如果在同一个优先级中,具有多个合法的转移,在这种情况会触发一个转移冲突错误的警告信息。
Stateflow通过几何的方法解决这样的问题:
对于来自于一个节点的转移,按顺时针方向检测转移对于来自于一个状态的转移,从状态的左上角开始,检测转移新版本的stateflow可以自己设置转移执行的顺序流程图建模转移冲突新版本的stateflow可以自己设置转移执行的顺序transition_conflict流程图建模-基本逻辑结构选择结构:
流程图建模-基本逻辑结构选择结构:
流程图建模-基本逻辑结构循环结构:
流程图建模创建流程图注意事项:
因为流程图