提升MSM如何定义两个子状态之间的转换?

时间:2018-04-04 04:49:22

标签: uml state-machine boost-msm

我正在使用Boost 1.64.0 MSM库来生成分层状态机。为了测试转换机制,我实现了像这样的状态机

+------------------------------------------------+
|                       S                        |
|   +-------------+          +-------------+     |
|   |      S1     |          |      S2     |     |
|   |  +-------+  |          |  +-------+  |     |
|   |  |  S11  |  |          |  |  S21  |  |     |
|   |  +-------+  |          |  +-------+  |     |
|   +-------------+          +-------------+     |
|                                                |
+------------------------------------------------+

那么如何定义从S11到S21的转换,根据the same situation described in wiki,转换执行序列应该是'退出S11' - > '退出S1' - > '输入S2' - > '进入S21'。

1 个答案:

答案 0 :(得分:0)

根据文件https://www.boost.org/doc/libs/1_66_0/libs/msm/doc/HTML/ch03s02.html#d0e875

  • 只能明确输入目标的子状态 但不是亚子状态。
  • 无法明确退出。必须使用退出点。

所以你不能明确退出S11。

您可以使用退出点伪状态而不是显式退出。我建议使用入口点伪状态而不是显式条目。

以下是入口点伪状态的示例代码

http://redboltz.wikidot.com/entry-point-pseudo-state

和退出点伪状态。

http://redboltz.wikidot.com/exit-point-pseudo-state