状态机的关键概念State状态图初始化关于开始运行时的初始化问题,首先和状态图的设置有关系,是否需要在初始化时进入第一个状态。蓝色表示状态,黑色目前无特殊意义(仅保证整体拖动)。图表的活动开始时,图表处于非活动状态。(某一个状态处于活动状态)。图表只有在进行状态迁移的时候才会发生激活,迁移完毕,处于睡眠状态之中。图表中的某一个状态处于活动中。连接节点的迁移,具有相同的级别时(具有的事件和条件类似),其优先级取决于他们的位置。进入和退出时的过程执行Exit,将该状态标记为非活动状态。将事件标记为活动状态,执行En动作。迁移和动作执行完毕,图表又处于睡眠状态。同一事件的源状态至目标状态的迁移这里的关键在于,图表处于非活动状态时,哪一个状态处于活动。则开始由哪一个进行迁移。首先进行的动作:迁移检测当事件发生,且条件成立时,确认可以执行迁移。然后执行ex,en等过程。循环结构:优先级的应用条件和条件动作设计For循环。此处的问题:条件循环何时执行?同样,先进行迁移检测的判断:执行循环结构,确认迁移可以执行后,才进行en和ex动作。自循环流程图的注意事项:不保留任何信息。状态的层次子状态和父状态(超状态)状态机是集合。状态图是图表对象。历史节点关于子状态的注意事项,一个父状体有子状态时,若父状态为激活状态,则状态机必定处于其中一个子状态。如果父状态中还含有,历史节点,则父状态中,子状态的默认迁移不再起作用。即:在一个程序运行循环内(含义同驾驶循环)默认迁移永久性的只运行一次,若无历史节点,则在迁移过程中每次激活父状态时,都会激活默认迁移。历史状态的优先级高于默认迁移迁移的层次性迁移在两个父状态的子状态之间进行迁移时。核心问题:父状态Du,en,ex的执行顺序,子状态的执行顺序。当迁移的条件检测成功时,首先执行所属父状态得到du动作,并执行该子状态的ex动作,将子状态标记为非活动。然后执行父状态的ex动作。由此可见,父状态的du动作差不多有一次(一个循环步长)的执行机会。接着,执行下一个子状态所属父状态的en,但是不执行du,就进入了子状态的en,然后睡眠。显式的表明退出A1,进入B1,阴式的表明其父状态的退出和进入。内部迁移(内部和外部自循环)内部自迁移:事件成立,但是条件不成立时,先执行该状态的du,然后进行内部迁移的执行,该状态仍然活动,故ex和en都不会执行。另一个关键:只有在执行du后(即第二个仿真步长内未发生迁移,且已经执行过了en),才会进行内部迁移的检测和子状态的du或者ex动作。先执行迁移后状态的en,然后就睡眠了,外部自循环并没有执行。进入该状态后,只有事件再次发生,且有迁出该状态的意图时,外部自循环才会有执行的机会。此时会顺次执行该外部自循环状态的ex,en。从初始话开始的执行顺序搭建模型如下所示:内部状态如下所示:将调试时间改为IINF后,输出结果为1,由此可见:初始化后,仅仅输出en值。此时命令行窗口输出值为:将事件UlckA触发,如下:则状态迁移如下:同时输出值为0,即,执行了解锁事件的进入动作。观察命令行窗口,发现在迁移过程中还执行了迁出状态的ex动作,但是du动作自始至终都未执行。当锁定事件发生时,也只会执行解锁事件的ex动作和锁定事件的en动作,du动作自始至终也未执行。连接至节点的执行事件的内部迁移迁移的检测顺序:先进行父状态外部的迁移检测,无迁移,则执行du,然后检测自己内部的有效迁移。仍然是其中一个子状态处于活动。先进行父状态的检测。A的du事件在A仍为活动的时候执行。——问题的关键!过程:退出子状态,至父状态,然后再迁移。至历史节点的迁移层次化图表中,父状态的du执行时刻为,处于子状态时而且有事件发生时。并行机制广播广播用于触发并行状态。广播状态动作检测的时候先检测父状态,检测不到则执行du:实质上du的执行顺序应当如下:这和状态图的刷新频率有关系,有事件触发的时候,无论是否有条件等数据定义,一律按照事件触发的频率进行刷新,因为事件刷新的频率并不是很快,所以会出现du不执行的情况。在没有事件的定义下,仅有数据时,状态图的刷新速度比较高,检测不到迁移,又到了刷新时刻,就必须执行du(因为在这个状态图内)。On事件发生时,图表的执行顺序,仅在该层次中执行一次而已。每一次事件发生时,都首先从包含该子事件的父事件开始执行。当因为on执行的事件执行完毕后,再接着执行原来事件引发的执行顺序。广播迁移动作同样,开始的时候,状态必然处于某一子状态内部,事件触发时,先从父状态开始检测,一直到子状态,在父状态内开始检测并执行迁移。执行完A1的du后才执行迁移。广播条件动作所谓的广播条件动作,指事件在条件中出现,和前面的叫法类似。直接事件广播隐含事件时间逻辑时间逻辑事件可以根据事件发生的次数决定事件的转换逻辑。时间操作符(at,every,after,before)分别完成相应的布尔运算,处理Stateflow事件的发生次数。Stateflow中的真值表真值表Stateflow中定义真值表首先进行命名。下图为已命名和未命名的真值表的外观:内部编辑和外部真值表一样。在stateflow中调用真值表,需要定义输入输出对象。如下图:图形盒图形函数建模注意事项模型中:在信号流,GOTO和FROM中支持下划线,却不支持横杠。模型中的开关量的优先级:越靠后,优先级越高。故障的情况在后,将会优先触发。建模过程中,考虑子系统的原子化,便于代码生成。尺寸和数据类型继承的意义在于确保信号的兼容性。属性设置状态行为状态激活与否的表达图表的触发事件只可有一路输入,所以将事件合成为矢量进行输入仿真调试信源:信号源,产生信号的模块。信宿:信号的输出,信号终至的模块。仿真参数的设置激活图表设置断点仿真图形调试