2016-04-04 86 views
1

我在玩http://boost-experimental.github.io/msm-lite/tutorial/index.html(標籤是針對boost-msm的,因爲沒有msm-lite的標籤,但類似的問題適用),我有一個關於設計具有許多可能輸入的狀態機的問題。狀態機如何處理包含值的事件(如樓層號)?

想象一下,您正在模擬電梯。除了明顯的狀態,如移動,停止,door_open,door_closed,我不知道如何模型按鈕按下(這是一個從-2到39的數字),因爲有很多事件是不可行的(每個按鈕只有42個按鈕)。

+0

如果您發現 問題的答案,請考慮[接受 it](http://meta.stackexchange.com/q/5234/179419),並對其進行投票表決。如果您沒有找到滿意的答案,請發送郵件至 發表評論。 –

回答

0

您可以在轉換時使用警戒條件。他們看起來像[currentFloor != requested floor]。也許更好的方法是模擬像upper floor selected,lower floor selected,current floor selected這樣的事件。這將42個按鈕整齊地分解爲三個類別。

0

我想如果你設計一個42個按鈕的地板選擇,你可能不會把它們映射到一個輸入,而是建立一個矩陣(沒有人會把42個按鈕放在另一個上面,是不是?)。那麼當然,你不會爲每一行建立一個列的模型,而只需要兩個,這樣你就可以顯示每一行列的順序輪詢。也許你今天也可以使用「智能」按鈕,這些按鈕有一個微芯片,它可以通過串行線路發送一些「我被按下」的信息。或者你引入一個voice recognition

列舉了這幾個例子之後,我傾向於將這個問題簡單地解釋得過於寬泛。

+0

你無法理解簡單的具體問題並不意味着它太寬泛。當用狀態機建模時,電梯是常見設置的一個例子。 – NoSenseEtAl

+0

感謝您的讚美。 –