我正在使用http://boost-experimental.github.io/msm-lite/tutorial/index.html (标签用于boost-msm,因为没有用于msm-lite的标签,但类似的问题也适用),我有一个问题wrt设计具有许多可能的输入的状态机。
想象一下,你正在为电梯建模。除了像moving,stopped,door_open,door_closed这样明显的状态之外,我想知道如何建模按钮按下(这是一个从-2到39的数字),因为有那么多事件是不可行的(每按下一个按钮就有42个事件)。
发布于 2016-04-05 02:31:06
您可以在转换上使用保护条件。他们看起来像[currentFloor != requested floor]。也许更好的方法是对upper floor selected、lower floor selected、current floor selected等事件进行建模。这就相当整齐地将42个按钮分成了三类。
发布于 2016-04-05 04:58:06
我猜,如果你设计一个有42个按钮的楼层选择,你可能不会把每个按钮都映射到一个单一的输入,而是形成一个矩阵(没有人会把42个按钮放在另一个按钮的上面,对吧?)当然,您不会将每一行都建模为一列,而是只建模两行,这样您就可以显示每行、每列的顺序轮询。也许你现在也可以使用带有微芯片的“智能”按钮,它可以通过串行线发送一些“我被按下了”的信息。或者你引入一个voice recognition。
在列出了这几个例子之后,我倾向于以过于宽泛的方式来结束这个问题。
https://stackoverflow.com/questions/36409876
复制相似问题