在异或状态下处理具有内部转换的事件
此示例显示在异或(OR)状态下使用内部转换处理三个事件时会发生什么。
在异或状态下处理一个事件
此示例显示内部转换的行为。该图表使用outgoing转换的隐式排序。
起初,图表处于休眠状态。状态A处于活动状态。条件[C_one]为false。事件E_one发生并唤醒图表,该图表通过层次结构从根向下处理事件:
1.图表根目录检查E_one的结果是否存在有效的转换。检测到从状态A到状态B的潜在有效转换。但是,转换无效,因为[C_one]为false。
2.状态A的durA()执行和完成。
3 状态A检查其子级是否有有效的转换,并检测有效的内部转换。
4 状态A仍然处于活动状态。内部转换动作A_ two被执行并完成。因为这是一个内部转换,所以不会执行状态A的退出和进入操作。
5 图表回到睡眠状态。
此序列完成与事件E_one关联的Stateflow®图表的执行。
在异或状态下处理第二个事件
使用前面的例子,这个例子显示了当第二个事件E_one发生时会发生什么。该图表使用outgoing转换的隐式排序。
起初,图表处于休眠状态。状态A仍然处于活动状态。条件[C_one]为true。事件E_one发生并唤醒图表,该图表通过层次结构从根向下处理事件:
图表根目录检查E_one的结果是否存在有效的转换。
从状态A到状态B的转换现在是有效的,因为[C_one]为true。
状态A退出操作(exitA())执行并完成。
状态A被标记为不活动。
转换动作A_one被执行并完成。
状态B标记为活动状态。
状态B进入操作(entB())执行并完成。
图表回到睡眠状态。
此序列完成与事件E_one关联的此状态流程图的执行。
在异或状态下处理第三个事件
使用前面的例子,这个例子显示了当第三个事件E_two发生时会发生什么。该图表使用传出转换的隐式排序)。
起初,图表处于休眠状态。状态B现在处于活动状态。条件[C_two]为false。事件E_two发生并唤醒图表,该图表通过层次结构从根向下处理事件:
1 图表根目录检查是否存在E_two的有效转换。
2 检测到从状态B到状态A的潜在有效转换。转换无效,因为[C_tool]为false。然而,活动状态B具有有效的自循环转换。
3状态B退出操作exitB()执行并完成。
4状态B被标记为不活动。
5 执行并完成自循环转换动作A_four。
6 状态B标记为活动状态。
7 状态B进入操作entB()执行并完成。
8 图表回到睡眠状态。
此序列完成与事件E_two相关联的此Stateflow图表的执行。此示例显示了内部循环转换和自循环转换之间的行为差异。
处理内部转换到连接结点的事件
此示例显示了使用连接结点的内部转换来处理重复事件的行为。
通过内部转换到连接结点来处理第一个事件
此示例显示了第一个事件的内部过渡到连接点的行为。该图表使用outgoing转换的隐式排序。
起初,图表处于休眠状态。状态A1处于活动状态。条件[C_two]为真。事件E_one发生并唤醒图表,该图表通过层次结构从根向下处理事件:
1 图表根目录检查根目录级别是否存在E_one的有效转换。没有有效的转换。
2 状态A的durA()执行和完成。
3 状态A检查自身是否有有效的转换,并检测到存在到连接结点的有效内部转换。
评估这些条件以确定其中一个转换是否有效。因为应用了隐式排序,所以在未标记的段之前,会对标记有条件的段进行求值。评估从交叉点上的12点钟位置开始,并以顺时针方式进行。因为[C_two]为真,所以到结然后到状态A.A2的内部转换是有效的。
4 状态A.A1退出操作exitA1()执行并完成。
5 状态A.A1被标记为不活动。
6 状态A.A2标记为活动。
7状态A.A2进入操作entA2()执行并完成。
8 图表回到睡眠状态。
当状态A1处于活动状态且条件[C_two]为true时,此序列完成与事件E_one相关联的此状态流程图的执行。
处理第二个事件,内部转换为连接结点
继续前面的例子,这个例子显示了当第二个事件E_one发生时,内部转换到结点的行为。该图表使用传出转换的隐式排序。
起初,图表处于休眠状态。状态A2处于活动状态。条件[C_two]为真。事件E_one发生并唤醒图表,该图表通过层次结构从根向下处理事件:
1.图表根目录检查根目录级别是否存在E_one的有效转换。没有有效的转换。
2 状态A的durA()执行和完成。
3 状态A检查自身的有效转换,并检测到连接结点的有效内部转换。
评估这些条件以确定其中一个转换是否有效。因为应用了隐式排序,所以在未标记的段之前,会对标记有条件的段进行求值。评估从交叉点上的12点钟位置开始,并以顺时针方式进行。因为[C_two]为真,所以到结然后到状态A.A2的内部转换是有效的。
4 状态A.A2退出操作(exitA2())执行并完成。
5 状态A.A2被标记为不活动。
6 状态A.A2标记为活动。
7 状态A.A2进入操作(entA2())执行并完成。
8 图表回到睡眠状态。
当状态A2处于活动状态且条件[C_two]为true时,此序列完成与事件E_one相关联的此状态流程图的执行。对于具有有效内部转换的状态,可以立即退出并重新进入活动子状态。
内部向历史交汇点的转变
此示例显示了内部转换到历史连接的行为。
起初,图表处于休眠状态。状态A.A1处于活动状态。历史信息的存在是因为超级状态A处于活动状态。事件E_one发生并唤醒图表,该图表通过层次结构从根向下处理事件:
1 图表根目录检查E_one的结果是否存在有效的转换。没有有效的转换。
2 状态A during动作执行和完成。
3 状态A检查自身是否有有效的转换,并检测到存在到历史连接的有效内部转换。基于历史信息,最后的活动状态A.A1是目标状态。
4 状态A.A1退出操作执行并完成。
5 状态A.A1被标记为不活动。
6 状态A.A1标记为活动。
7 状态A.A1进入动作执行并完成。
8 图表回到睡眠状态。
当存在到历史连接的内部转换并且状态a.A1处于活动状态时,此序列完成与事件E_one相关联的此状态流程图的执行。对于具有有效内部转换的状态,可以立即退出并重新进入活动子状态。