2014-04-29 76 views
1

作爲一個新手,我試圖開發一個使用Visio作爲刻錄機的狀態機。下面是設備操作/交易和附件,是迄今爲止我所做的工作的一個圖表,我不確定它的準確表示。cd刻錄機的狀態機

Device operation 
  • 負載按鈕 - 使抽屜打開,如果打開關閉(裝入空CDR)

  • 刻錄按鈕 - 開始於CDR記錄文件,綠燈的亮起燃燒過程
    並在完成時熄滅。一旦cdr被燒燬作家停止。

  • 確認按鈕 - 驗證以前記錄在CDR文件,綠燈在 過程中亮起並在完成後熄滅,則設備停止記錄隨時或驗證

    期間

  • 取消按鈕 - 停止過程

  • 取消按鈕 - 沒有效果,如果CD刻錄機是空的或不旺驗證或記錄接通電源後向上CD刻錄機將確保抽屜關閉

  • 刻錄按鈕 - 有沒有效果時,CD w^riter在記錄或驗證過程中爲空。

  • 驗證只能在CD刻錄機不忙時進行記錄。

    enter image description here

回答

1

從視覺上看,你的圖看起來像一臺狀態機,各州的名稱都很好 - 這是一個好的開始。 :)

我看到的第一個問題是轉換規範。這是definitelly不正確的。在UML狀態轉換指定如下因素格式:

活動[後衛] /操作

其中:

  • 事件(或觸發)是內部的外部「信號「,開始轉換。它可以是用戶激活的按鈕,計時器,檢測到的錯誤等,甚至可以省略。
  • 後衛是爲了開始轉換應該滿足的邏輯條件。它通常是一個返回布爾值tru或false的表達式。它也可以省略。
  • 動作是一種副作用,是在轉換被觸發時執行的。 IC也可以省略。

再回到你的圖我要說的是......

  1. 最對您的轉換標籤不應carrry「/」,因爲它表示動作。主要有手動觸發,如「加載」(按下按鈕打開抽屜),「取消」,「按鈕」等。
  2. 考慮一些內部觸發的事件,如「刻錄完成」或「CD加載「
  3. 您可以在可能的情況下添加一些警戒條件
  4. 我會刪除所有沒有效果的觸發器(如取消沒有CD)。它使圖更簡單,不會丟失信息
  5. 在您的情況中LOADED和IDLE狀態有點奇怪,虛弱。目前尚不清楚是什麼使他們不同(見下面的例子)

這裏是我找到更多acurate的一個位圖(見補充意見說明):

enter image description here

+0

非常感謝回覆和圖表。但是,在空閒狀態進入空(關閉)狀態的圖中,我認爲它應該進入空(打開)狀態。我的理由是,當設備處於空閒狀態(加載)並需要進入空(未加載)狀態時,抽屜需要打開,將其置於空(打開)狀態。 。謝謝 – lee

+0

你說得對,對不起,錯了!它應該定義爲從IDLE - > OPEN,並且沒有指定警戒(因爲它會在這裏加載)。在此之後,下一個「加載」觸發器將導致它進入CLOSED或IDLE,具體取決於警衛。 – Aleks

+0

請查看修改的狀態機圖。 – lee

1

你需要指定明確的事件爲轉換的觸發因素。

在當前的狀態機,每個過渡(除了一個離去初始頂點)具有效果,但不是一個觸發。更準確地說,它們由默認的完成事件觸發,因此是自動的。而且,由於所有轉換都對相同的事件作出反應,所以狀態機是非確定性的。例如,在狀態loaded中,轉換到記錄,清空和加載都會對完成事件做出反應。當完成事件被髮送時,這些轉換被認爲是衝突的,並且其中一個被非確定性地選擇。我相信這不是你想要的。

閱讀UML規範,併爲您的轉換定義觸發器。

1
  • 在狀態機圖中不需要繪製任何動作或狀態轉換時,不需要描繪從「空」到「空」的轉換。 (State Transition tables通常用於這種情況下的任何丟失的轉變的檢查。)
  • 「負載」和「空閒」可以在一個被表示爲相同的狀態
  • 爲了表示「綠色光」,我會寫「打開綠燈」作爲錄製中的輸入動作並關閉「綠燈」作爲退出

下面是我畫的圖。托盤的狀態(無論是打開還是關閉)應在實際模型中考慮,但不在下面的示例圖中。

enter image description here