scxml过渡目标如何工作

时间:2018-06-27 15:53:13

标签: scxml

我试图了解scxml转换目标状态集。这是我的一些示例代码:

<parallel id="p">
    <state id="A" initial="A1">
        <state id="A1">
            <transition event="test" target="B2" />
        </state>
        <state id="A2" />
    </state>
    <state id="B" initial="B1">
        <state id="B1" />
        <state id="B2" />
    </state>
    <state id="C" initial="C1">
        <state id="C1" />
        <state id="C2" />
    </state>
</parallel>

如果P,A,A1,B,B1,C和C2当前处于活动状态。现在事件“ test”即将到来,因此将转换到目标状态“ b2” 1)基于状态图XML(SCXML)的3.13节:控制抽象的状态机符号,祖先状态A和P将受到影响。 Al状态将退出,然后重新输入P,还是仅A1和A退出? 2)如果所有状态都已退出并在P处重新进入,则设置P,A,A1,B,B2,C和C1处于活动状态,或者设置P,A,A1,B,B2,C和C2处于活动状态? (因为c2在转换“测试”发生之前是活动的)

1 个答案:

答案 0 :(得分:0)

出口集包含所有活动状态,这些活动状态是源状态和目标状态的LCCA的正确后代。这意味着所有状态(包括P)都将退出,因为LCCA必须为,而不是

入口集包含过渡的完整目标集的所有成员,一旦退出了出口集的状态,这些成员将不活动。

由于退出后没有活动状态,因此条目集为B2(在转换目标中指定)以及两个默认状态A1和C1。退出前没有活动状态的“内存”。

所以“ P,A,A1,B,B2,C和C1”是正确的答案