【问题标题】:How do state machines deal with events that contain value(like floor number)?状态机如何处理包含值的事件(如楼层号)?
【发布时间】:2016-04-04 18:12:47
【问题描述】:

我正在玩http://boost-experimental.github.io/msm-lite/tutorial/index.html(标签用于 boost-msm,因为没有用于 msm-lite 的标签,但类似的问题适用)我有一个问题,即设计具有许多可能输入的状态机。

假设您正在为电梯建模。除了像移动、停止、door_open、door_close 这样的明显状态之外,我想知道如何模拟按钮按下(这是一个从 -2 到 39 的数字),因为拥有这么多事件是不可行的(每个按钮按下 42 个)。

【问题讨论】:

  • 如果您找到了问题的答案,请考虑accepting it,并对其进行投票。如果您的问题没有找到满意的答案,请发表评论。

标签: uml boost-msm


【解决方案1】:

我猜如果你设计一个包含 42 个按钮的楼层选择,你可能不会将它们分别映射到单个输入,而是制作一个矩阵(没有人会将 42 个按钮放在一起,对吗?)。当然,您不会将每一行建模为一列,而是仅建模两列,这样您就可以显示每一行列的顺序轮询。也许您今天也可以使用带有微芯片的“智能”按钮,该微芯片通过串行线路发送一些“我被按下”信息。或者你介绍一个voice recognition

在列出了这几个例子之后,我倾向于认为这个问题过于宽泛了。

【讨论】:

  • 您无法理解简单的具体问题并不意味着它太宽泛。电梯是使用状态机建模时的常见设置示例。
  • 感谢您的赞美。
【解决方案2】:

您可以在转换中使用保护条件。它们看起来像[currentFloor != requested floor]。也许更好的方法是对upper floor selectedlower floor selectedcurrent floor selected 等事件进行建模。这会将 42 个按钮整齐地折叠成三类。

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多