并行状态的广播事件

平行状态的广播事件
此示例显示了并行状态下事件广播操作的行为。
在这里插入图片描述
最初,图表处于休眠状态。并行子状态A.A1.A1a和A.A2.A2a处于活动状态。事件E_one发生并唤醒图表,图表从根向下通过层次结构处理事件:

1 图表根会检查根级别是否存在E_one导致的有效转换。不存在有效的转换。
2 状态A during actions (durA()) 执行并完成。
3 状态A的子状态是平行(AND)状态。因为隐式排序适用,所以状态是从左到右、从上到下进行评估和执行的。首先评估状态A.A1。状态A.A1 during actions (durA1()) 执行并完成. 状态A.A1执行并完成E_one上的动作,并广播事件E_two。during和on event_name操作根据其在状态标签中的出现顺序进行处理:
a 事件E_two的广播再次唤醒图表。图表根检查E_two是否有有效的转换。不存在有效的转换。
b 状态A during actions (durA())执行并完成。
c 状态A检查其子对象的有效转换。不存在有效的转换。
d A状态的子对象从A.A1状态开始接受评估。状态A.A1 during actions (durA1()) 执行并完成。评估状态A.A1的有效转换。在状态A1内,E_two没有有效的转换。
e 状态A1a的 during actions (durA1a()) 执行.。
f 对状态A.A2进行评估。状态A.A2 during actions (durA2()) 执行并完成。状态A.A2检查有效转换。状态A.A2具有从状态A.A2.A2a到状态A.A2-A2b的E_two的有效转换。
g. 状态A.A2.A2a退出操作(exitA2a())执行并完成。
h 状态A.A2.A2a标记为未激活。
i 状态A.A2.A2b标记为激活。
j 状态A.A2.A2b entry操作(entA2b())执行并完成。

4 一旦处理了E_two的事件广播,E_one的处理就会继续。状态A.A1检查事件E_one导致的任何有效转换。从状态A.A1.A1a到状态A.A1-A1b存在有效的转换。
5 状态A.A1.A1a 执行并完成exit actions (exitA1a).
6 状态A.A1.A1a 被标记为未激活。
7 状态A.A1.A1b 被标记为激活。
8 状态A.A1.A1b entry 操作(entA1b())执行并完成。
9 并行状态A.A2 被评估为next. 状态A.A2 during actions (durA2()) 执行并完成。 E_one的结果是没有有效的转换。
10 状态A.A2.A2b during actions (durA2b()) 执行并完成。
11 图表再次进入睡眠状态。

此序列完成了与事件E_one关联的Stateflow®图表的执行,并将事件广播到事件E_two的并行状态。最后一个图表活动是并行子状态A.A1.A1b和A.A2.A2b处于活动状态。

嵌套事件广播的过渡动作中的广播事件

此示例显示了事件广播转换操作的行为,该操作包括并行状态下的嵌套事件广播。
在这里插入图片描述

事件E_one处理的开始

最初,图表处于休眠状态。并行子状态A.A1.A1a和A.A2.A2a处于活动状态。事件E_one发生并唤醒图表,图表从根向下通过层次结构处理事件:
1 图表根会检查E_one是否有有效的转换。没有有效的转换。
2 状态A during actions (durA()) 执行并完成.
3 状态A的 子对象是并行态.因为隐式排序适用,所以状态是从左到右、从上到下进行评估和执行的。首先评估状态A.A1。状态A.A1during actions (durA1()) 执行并完成.
4 状态A.A1检查事件E_one导致的任何有效转换。从状态a.A1-A1a到状态a.A1.A1b存在有效的转换。
5 状态A.A1.A1a执行并完成退出操作(exitA1a)。
6 状态A.A1.A1a被标记为非活动状态。

事件E_two抢占E_one

7 广播事件E_two的转换动作执行并完成:
a 事件E_two的广播现在抢占了事件E_one触发的从状态A1a到状态A1b的转换。
b 事件E_two的广播再次唤醒图表。图表根检查E_two是否有有效的转换。不存在有效的转换。
c 状态A during actions (durA()) 执行并完成。
d 状态A的子对象从A.A1状态开始接受评估。状态A.A1during actions (durA1())执行并完成. 。评估状态A.A1的有效转换。在状态A1内,E_two没有有效的转换。
e 对状态A.A2进行评估。State A.A2 during actions (durA2()) 执行并完成.。状态A.A2检查有效转换。状态A.A2具有从状态A.A2.A2a到状态A.A2-A2b的E_two的有效转换。
f State A.A2.A2a exit actions (exitA2a()) 执行并完成.
g State A.A2.A2a 被标记为非活动状态.
h 状态A.A2.A2b标记为激活。
i 状态A.A2.A2b entry actions (entA2b()) 执行并完成.

事件E_one恢复处理

10 状态A.A1.A1b标记为激活。
11 状态A.A1.A1b entry actions (entA1b()) 执行并完成.
12 接下来评估并行状态A.A2。状态A.A2 during actions (durA2()) 执行并完成。E_one的结果是没有有效的转换。
13 状态A.A2.A2b during actions (durA2b()) 执行并完成。由于事件广播E_two的处理,状态A.A2.A2b现在处于活动状态。
14 图表再次进入睡眠状态。

此序列完成了与事件E_one相关联的此状态流程图的执行,以及向事件E_two的并行状态的转换动作上的事件广播。最后一个图表活动是并行子状态A.A1.A1b和A.A2.A2b处于活动状态。

并行状态下的广播条件动作事件

此示例显示了并行(AND)状态下条件动作事件广播的行为。

在这里插入图片描述
最初,图表处于休眠状态。并行子状态A.A1.A1a和A.A2.A2a处于活动状态。事件E_one发生并唤醒图表,图表从根向下通过层次结构处理事件:
1.图表根会检查E_one是否有有效的转换。不存在有效的转换。
2 状态A during actions (durA()) 执行并完成.
3 状态A的孩子是平行态。因为隐式排序适用,所以状态是从上到下、从左到右进行评估和执行的。首先评估状态A.A1。状态A.A1 during actions (durA1()) 执行并完成.
4 状态A.A1检查事件E_one导致的任何有效转换。存在从状态A.A1-A1a到状态A.A1.A1b的有效转换。还存在有效的条件操作。E_two的条件动作事件广播执行并完成。状态A.A1.A1a仍处于活动状态:
a 事件E_two的广播再次唤醒状态流程图。图表根检查E_two是否有有效的转换。没有有效的转换。
b 状态A during actions (durA()) 执行并完成.
c 状态A的子对象从A.A1州开始接受评估。状态A.A1 during actions (durA1()) 执行并完成 。评估状态A.A1的有效转换。在状态A1内,E_two没有有效的转换。
d 状态A1a during actions (durA1a()) 执行.
e 对状态A.A2进行评估。状态A.A2 during actions (durA2()) 执行并完成。状态A.A2检查有效转换。状态A.A2具有从状态A.A2.A2a到状态A.A2-A2b的E_two的有效转换。
f 状态A.A2.A2a exit actions (exitA2a()) 执行并完成.
g State A.A2.A2a 被标记为未激活.
h State A.A2.A2b被标记为激活…
i 状态A.A2.A2b entry actions (entA2b()) 执行并完成.
5 状态A.A1.A1a 执行并完成exit actions (exitA1a).
6 状态A.A1.A1a被标记为未激活.
7 状态A.A1.A1b 被标记为激活.
8 State A.A1.A1b entry actions (entA1b()) 执行并完成。
9 接下来评估并行状态A.A2。状态A.A2 during actions (durA2())执行并完成。E_one的结果是没有有效的转换。
10 状态A.A2.A2b during actions (durA2b()) 执行并完成.
11 图表回到睡眠。

此序列完成了与事件E_one关联的此状态流程图的执行,并将事件广播到事件E_two的并行状态。最后一个图表活动是并行子状态A.A1.A1b和A.A2.A2b处于活动状态。

  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值