Stateflow学习笔记之状态图转移实例

 

从一个状态退出,进入另一个状态  

考虑以下状态图。

 

假设当前的活动状态为A.A1。

假设变量的值为:x = 5, y = 2, z = 0.

接下来的执行步骤为:

  • 判断状态A是否有向外的转移。有,且满足[x>4]的条件。转移有效。
  • 将状态A 标记为“退出状态”,执行状态A的退出动作:z = z + 1。现在z = 1。
  • 将状态B标记为“进入状态”,执行状态B的进入动作:x = x - 1。现在x = 4。
  • 状态B包含子状态,没有历史状态结点,执行默认转移。
  • 状态B.B1标记为“进入状态”,执行B.B1的进入动作:x = x - 1。现在x = 3。
  • 当前活动状态为B.B1,状态图进入休眠。

 

超转移

考虑以下状态图:

假设当前活动状态为A.A2。

假设当前变量的值为:x = 5, y = 5, z = 0.

接下来的执行步骤为:

  • 测试状态A是否存在有效的输出转移。不满足条件:[x>10]。
  • 测试状态A.A2是否存在有效的输出转移。满足条件:[x>4],为有效的转移。
  • 退出状态A.A2,无退出动作。
  • 退出状态A。执行退出动作:z = z + 1。
  • 进入状态B。执行进入动作:x = x - 1。
  • 进入状态B1。执行进入动作:x = x - 1。
  • 当前活动状态为B.B1,状态图进入休眠。

 

不存在有效转移时,执行during动作

考虑以下状态图:

初始化完成后,执行默认转移动作,A.A1为活动状态。此时,x = 3, y = 0, z = 0.

下一个时刻,状态图的执行步骤为:

  • 测试状态A的输出转移,不满足条件:[x>4]。
  • 测试状态A1的输出转移,不满足条件:[y>3]。
  • 执行状态A的during动作:y = y + 1。此时y = 1。
  • 执行状态A1的during动作:x = x + 1。此时x = 4。
  • 当前活动状态还是A.A1,状态图进入休眠。

 

 


 

 

参考资料

进入图或状态
Enter a Chart or State

https://ww2.mathworks.cn/help/stateflow/ug/chart-initialization-and-entry-actions.html

 

状态图的执行
Execution of a Stateflow Chart

https://ww2.mathworks.cn/help/stateflow/ug/chart-during-actions.html

 

退出状态
Exit a State

https://ww2.mathworks.cn/help/stateflow/ug/chart-exit-actions.html
 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页