把問題拆成小問題
問題太大時,不要直接尋找完整答案。先把它拆成數個可以觀察、可以回答的小問題。
把一句問題拆成多個確認點
例如「按下啟動按鈕後,手臂沒有動作」仍然包含很多可能性, 無法直接判斷是按鈕、I/O、程式條件、執行狀態,還是手臂動作本身的問題。
可以先拆成以下問題:
- 按下按鈕時,對應的 DI 是否有變化?
- 程式中的啟動條件是否成立?
- 程式是否開始執行,目前停在哪一行?
- 是否停在 WAIT、異常處理或其他等待條件?
- 模式、伺服與自動運轉條件是否成立?
- 程式執行到動作指令後,手臂是否仍然沒有動作?
這些問題的答案會指向不同範圍。只要其中幾項已確認正常, 就不需要再把整套系統全部當成可能原因。
可以從不同角度拆分
拆分問題沒有唯一順序,可以依照系統結構與目前掌握的資訊選擇方式。
依系統區塊
分成感測器、I/O、程式、通訊、Robot 與外部設備。
依訊號流程
沿著輸入、判斷、輸出與實際動作,找出訊號在哪一段中斷。
依發生條件
比較正常與異常時的模式、程式、點位、設定與操作順序。
找出第一個不符合預期的位置
拆分後不需要同時處理所有小問題,而是依序確認,找出第一個不符合預期的位置。
按鈕輸入正常 → 啟動條件成立 → 程式已進入主流程 → 程式停在 WAIT
DI[5]=ON → 接下來只需要確認 DI[5] 的來源與條件
重點:
「手臂沒有動」只是結果。把問題拆開後,真正需要處理的可能只是某一個輸入沒有成立、
某一行程式正在等待,或某一組設定與預期不同。