PLC 狀態轉移圖的畫法 — 把裝置的狀態畫在一張圖上,沒畫到的組合用表補齊
最後更新: 2026-09-24 / 分類: PLC 程式設計、控制邏輯設計
狀態轉移圖是把整台裝置現在在哪個狀態、按哪個按鈕或發生哪個異常會移到哪裡,畫在一張圖上的圖。本文寫給不想讓規格裡沒有的組合由寫階梯圖的人決定的 PLC 控制設計者。
自動運轉中再按一次啟動,第一個工程的旗標又立了一次。這是流程圖的正常流程裡沒有的組合,所以寫階梯圖的人當場自己決定了。圖上畫得出來的只有想到的箭頭。沒畫到的組合,用狀態 × 事件的表一格一格填。
1. 狀態轉移圖只畫整台裝置的狀態,工程放到流程圖
狀態轉移圖畫的是整台裝置的狀態。範例的圖有 7 個,運轉中進行的「等待工件 → 搬送 → 夾緊 → 取出」沒有畫。工程畫在PLC 控制流程圖的畫法,以工程編號(10、20、30…)與進到下一步的條件表示。因為連工程都放進來,像異常、暫停這種任何地方都會發生的事件的箭頭,就會隨工程數量增加。
兩張圖以工程編號連結。從暫停中啟動,就從停止的工程繼續;原點復歸之後,從第一個工程開始。可從中斷處續行的異常重置之後,從停止的工程開頭開始。
PLC 控制流程圖的畫法中稱為「步驟(狀態)」的,相當於本文的工程。狀態多到像這個範例時,等待啟動、異常停止中就移到這張圖。流程圖的異常出口只要寫「到異常停止中」就夠了。若是作業員每次放工件再啟動的裝置,就拿掉週期停止標記的條件,在每個工程的段落都回到等待啟動。
2. 狀態用「持續中的事」、箭頭用「發生的事」來畫
- 狀態以「持續中的事」、箭頭以「發生的事」命名 狀態的名稱用會持續一陣子的「〜中」「等待〜」。箭頭的名稱是一瞬間發生的「啟動(按下了)」「異常(逾時了)」。做一個叫「啟動」的狀態,就分不清是按下的瞬間,還是運轉的期間。
- 把正在處理的狀態與等待中的狀態分開 灰色的原點復歸中,處理完成就自行移到等待啟動。白色的等待啟動,會一直等到有人按啟動。原點復歸中的結束,是步驟走到最後一段(原點復歸流程圖(範例)的話是把 bHomeDone 設 ON 的那一段)。
- 「任何狀態皆可」的箭頭,從框只畫一支 異常可從 5 個狀態的任何一個發生。不畫 5 支,而是從圍住異常停止中、緊急停止中以外 5 個狀態的框畫一支到異常停止中。把箭頭全部畫出來的圖,少了一支也沒人會發現。
- 用箭頭畫出電源投入後從哪裡開始 範例的圖從電源投入的黑點畫到原點未完成。因為停電之後工件留在中途,軸在哪裡也不確定。若把保存狀態的變數放在停電後仍保留值的範圍,運轉中停電的裝置會在沒人按啟動的情況下動起來。
- 同一事件出兩支箭頭時,條件要寫成不重疊 異常停止中的重置有兩個去處。可從中斷處續行(控制規格書的寫法的 E01、E02)時到等待啟動,其他情況到原點未完成。若兩個條件可能同時成立,移到哪裡就由程式的書寫順序默默決定。
- 模式放在另一個軸,切換時的去處依狀態逐一決定 範例的圖是自動模式的狀態。切換到手動時,原點未完成與異常停止中可直接手動操作,從等待啟動則移到原點未完成。因為不知道換線時動了裝置的哪裡,回到自動之前要用一次原點復歸重新確認。
3. 用狀態 × 事件的表補齊沒畫到的組合
圖的箭頭除了電源投入之外有 14 支。做成表是 7 個狀態 × 10 個事件共 70 格,把圖的箭頭抄過來也只填了 25 格。剩下的 45 格圖上沒有。原點未完成時按了啟動、運轉中再按一次啟動,要一格一格決定。
格子裡寫的是下列 5 種,「不接受」與「不可能發生」不同。不接受的格子,在驗收時按按鈕確認什麼都不會發生。不可能發生的格子無法按來測試。萬一發生,就當作程式錯誤異常停止。
- → 狀態名稱 — 移到該狀態。依條件分歧時,並列寫「條件 → 去處」
- 只有文字 — 不改變狀態,只做寫的處理(立標記、加進履歷、顯示訊息)
- / — 不接受。什麼都不做
- × — 不可能發生
- 空白 — 還沒決定。出貨前不能留下
| 事件 \ 狀態 | 原點未完成 | 原點復歸中 | 等待啟動 | 運轉中 | 暫停中 | 異常停止中 | 緊急停止中 |
|---|---|---|---|---|---|---|---|
| 原點復歸(按鈕) | → 原點復歸中 | / | → 原點復歸中 | / | / | / | / |
| 原點復歸完成 | × | → 等待啟動 | × | × | × | × | × |
| 啟動 | 顯示「原點復歸尚未完成」 | / | 在可再開的位置 → 運轉中 不在位置 → 顯示「不在可再開的位置」 | / | → 運轉中(從停止的工程繼續) | / | / |
| 暫停 | / | → 原點未完成(放棄復歸) | / | → 暫停中 | / | / | / |
| 週期停止 | / | / | / | 立標記 | 立標記 | / | / |
| 工程的段落 | × | × | × | 有標記 → 等待啟動 無標記 → 直接等下一個工件 | × | × | × |
| 異常 | → 異常停止中 | → 異常停止中 | → 異常停止中 | → 異常停止中 | → 異常停止中 | 新出現別的編號的異常就加進履歷(不再能從中斷處續行) | 把新出現的異常加進履歷 |
| 重置 | / | / | / | / | / | 原因仍存在 → / 可從中斷處續行 → 等待啟動 其他情況 → 原點未完成 | 解除之前 → / 放開後動力已接通 → 原點未完成 放開後 3 秒未接通 → 顯示「動力無法接通」 |
| 緊急停止 | → 緊急停止中 | → 緊急停止中 | → 緊急停止中 | → 緊急停止中 | → 緊急停止中 | → 緊急停止中 | / |
| 切換到手動 | 可手動操作 | → 異常停止中 | → 原點未完成 | → 異常停止中 | → 異常停止中 | 可手動操作 | 只切換模式 |
「工程的段落」是在第一個工程(等待工件)等待下一個工件期間成立的、只有運轉中才有的條件。從等待啟動的啟動,若是第一個工程則要在原位,若是續行則要停止的工程開頭的條件都成立,才接受。週期停止的標記在進入等待啟動、異常停止中、緊急停止中時清除。異常的列是異常清單的 E01〜E04,緊急停止(E05)是緊急停止的列。
填格子時會猶豫的,是下面這些地方。
- 運轉中的啟動是 / — 狀態以一個變數保存,只在等待啟動或暫停中才接受。用 SET / RST 串接各工程旗標的階梯圖,運轉中啟動也會通過,發生開頭那種雙重啟動。照表決定的話,這個條件只放在啟動迴路的一個地方
- 原點未完成時的啟動,不接受但顯示訊息 — 什麼都不發生的話,操作者會一直按啟動,然後叫保養。異常停止中的啟動維持 /。因為異常已經顯示,不動的理由從畫面就看得出來
- 原因仍存在時的重置是 / — 異常訊號在原因持續期間會再次進來。不接受、讓它繼續顯示,畫面上才留得住該修什麼
- 原點復歸中的暫停,回到原點未完成 — 決定「中途停止就從頭重來」,就不用記任何東西。因為要從復歸途中繼續,就得記住哪個軸回到了哪裡
表用 Excel 做,加上版次編號放進規格書。資料驗證的清單放「/,×」,並設定不顯示錯誤訊息,就也能輸入「→ 等待啟動」。空白格用設定格式化的條件的公式 =ISBLANK(B2)塗成紅色。加了一個事件就要加一列並把 7 格全部填滿,否則圖、表、階梯圖會不一致。
4. 收集狀態與事件,先畫正常的箭頭,再用表補齊
- 列出狀態 從想顯示在操作盤的燈與畫面上的運轉狀態收集。要當成狀態的,是由操作者的按鈕、異常、原點復歸完成這類其他處理進出的東西。依感測器條件一步步前進的搬送、夾緊是工程,就算畫面顯示「搬送中」也放到流程圖。
- 收集事件 從操作盤的按鈕與開關、處理完成、只在運轉中看的條件、異常收集。異常清單的異常合併成一列,只有緊急停止是另一列。像蜂鳴器停止這種在任何狀態都做同樣事的操作,不放進表。
- 畫正常的箭頭,任何地方都會發生的用框表示 先畫從電源投入到運轉中,以及停止後回來的路。異常與緊急停止從框各畫一支。
- 做成表,填空白 先抄圖的箭頭,再把剩下的格子用 /、×、文字填滿的階段。自己決定不了的格子留白,在旁邊寫下問誰能決定(客戶、機械設計、安全負責人)。
5. 在 PLC 中狀態以一個變數保存,一次掃描只轉移一次
- 狀態以編號存在一個變數裡 把狀態編號放進一個整數變數。每個狀態各有旗標的話,在結構上就無法防止兩個同時成立。停電後不保留值的範圍的變數在開機時為 0,所以原點未完成設為 0 號。
- 轉移以掃描開頭的狀態判斷,一次掃描只轉移一次 判斷用掃描開頭複製的狀態進行。若從上到下排成「等待啟動且啟動則運轉中」,下面的行會看到剛改寫的運轉中而繼續往前。下一個狀態在最後一起寫入,ST 的 CASE 敘述一次掃描只執行一個分支。
- 「任何地方皆可」的轉移,寫在各狀態的轉移之後 依各狀態的轉移 → 異常 → 緊急停止的順序寫。後寫的指派會留下,所以同一掃描中啟動與緊急停止重疊時,緊急停止勝出。圖上框的箭頭,在程式裡也各只有一處。
- 進入時只做一次的處理,與持續送出的輸出分開 進入時的處理只在編號改變的那次掃描執行。「進入異常停止中就把編號存進履歷」若每次掃描都做,履歷會隨掃描次數增加。像燈與顯示這種只由狀態決定的輸出,以「紅燈 = 異常停止中或緊急停止中」這樣一個輸出一個式子來寫。
- 走到不可能的編號就異常停止 在 ELSE 移到異常停止中並把編號顯示在畫面上。ELSE 什麼都不寫或回到等待啟動,會藏住其他迴路的寫入或打錯字。表上 × 的格子發生時也一樣。
- 按鈕以按下的瞬間為事件,緊急停止與異常在成立期間持續看 按鈕只看上升緣的那一次掃描。若做成 ON 期間都接受,按著啟動放工件的瞬間就會動起來。緊急停止與異常則相反,在成立期間每次掃描都看,讓按著按鈕開機也能移到緊急停止中。
6. 容易出錯的是週期停止的顯示、等待工件的算法、緊急停止的角色
- 按了週期停止,畫面沒有任何反應 — 標記成立期間,畫面顯示「已接受週期停止」。只立標記、維持運轉中一直動到段落,操作者分不清是正在停止還是沒按到
- 沒決定等待工件的時間算不算稼動 — 算進稼動的狀態,在驗收前與客戶以書面決定。因為用狀態時間計算稼動率的工廠,等不到工件的時間算在哪一邊,數字就不同。範例放在運轉中,但 PackML 分成 Held(裝置本身的原因)與 Suspended(前後工程的原因)
- 以為緊急停止中是由 PLC 來停的狀態 — 切斷動力的是安全迴路,PLC 只是接收這個事實。想靠 PLC 的狀態轉移來停,PLC 本身停了就停不了。PLC 的工作是切斷動作輸出與自保持,並讓復歸依順序進行(緊急停止復歸流程圖(範例))
7. 表上不是 × 的 58 格,直接成為驗收的測試項目
表上不是 × 的 58 格,直接就是測試項目。→ 的格子確認移到的狀態與進入時的處理,/ 的格子按按鈕確認什麼都不發生。異常與緊急停止不只在運轉中,要從框內所有狀態都觸發一次。原點復歸中的逾時、暫停中的緊急停止,是容易從測試漏掉的組合。
一格一格確認之後,也要試連續兩個操作的組合。按週期停止後暫停,再啟動,標記是否還在、是否在工程的段落停到等待啟動。運轉中關掉電源再開,是否從原點未完成開始、什麼都不動(安全繼電器是手動重置的話則是緊急停止中)。只一格一格確認表,找不到這種順序的錯誤。
繪製工程流程圖的編輯器
- Flowchart Editor — 把運轉中進行的工程(等待工件、搬送、夾緊、取出)畫成工程編號與進到下一步的條件。沒有繪製狀態轉移圖本身的功能。
不用安裝也不用註冊,只要瀏覽器就能使用。
相關文章
yk.builds