1

我想使用 Boost MSM 创建以下状态机:

正交区域中具有错误状态的简化 FSM

如果正交状态为“B”,我希望能够阻止Error事件触发转换。AllOk + Error == InError例如,为所有正交状态指定转换会很好。就像是:

{AllOk, B} + Error == {AllOk, A}

但是,我找不到使用 Boost MSM 的方法,也找不到常规的 UML 命名法,这让我觉得我走错了路。

是否有经典的“UML 惯用语”来处理这种行为?

我看到两种可能的解决方案:

  • 设置一个警卫AllOk + Error == InError,检查其他状态是否是B就像这个响应
  • 发送一个更具体的错误(在我的例子中,CouldNotComputePath,因为我正在编写一个机器人),Error如果它没有被处理,则以某种方式将其转换。我不确定该怎么做。
4

1 回答 1

0

好的,我找到了解决方案:

Error事件可以在 MainStateMachine 中“捕获。如果不是,则在MainStateMachine上触发内部转换,它将发送EnterError事件以使另一个正交状态切换到InError

在此处输入图像描述

于 2020-05-19T09:47:32.730 回答