【问题标题】:How to prevent orthogonal region transition for error handling如何防止正交区域转换以进行错误处理
【发布时间】:2020-05-04 13:29:14
【问题描述】:

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

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

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

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

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

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

  • AllOk + Error == InError 上设置一个守卫,检查其他状态是否为Blike this response
  • 发送一个更具体的错误(在我的例子中,CouldNotComputePath,因为我正在为机器人编程),如果没有处理,则以某种方式将其转换为Error。我不确定该怎么做。

【问题讨论】:

    标签: c++ uml boost-msm state-diagram


    【解决方案1】:

    好的,我找到了解决办法:

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

    【讨论】:

      猜你喜欢
      • 2019-07-15
      • 2020-05-13
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      相关资源
      最近更新 更多