Problem Solving · 02

把問題拆成小問題

問題太大時,不要直接尋找完整答案。先把它拆成數個可以觀察、可以回答的小問題。

把一句問題拆成多個確認點

例如「按下啟動按鈕後,手臂沒有動作」仍然包含很多可能性, 無法直接判斷是按鈕、I/O、程式條件、執行狀態,還是手臂動作本身的問題。

可以先拆成以下問題:

  • 按下按鈕時,對應的 DI 是否有變化?
  • 程式中的啟動條件是否成立?
  • 程式是否開始執行,目前停在哪一行?
  • 是否停在 WAIT、異常處理或其他等待條件?
  • 模式、伺服與自動運轉條件是否成立?
  • 程式執行到動作指令後,手臂是否仍然沒有動作?

這些問題的答案會指向不同範圍。只要其中幾項已確認正常, 就不需要再把整套系統全部當成可能原因。

可以從不同角度拆分

拆分問題沒有唯一順序,可以依照系統結構與目前掌握的資訊選擇方式。

依系統區塊

分成感測器、I/O、程式、通訊、Robot 與外部設備。

依訊號流程

沿著輸入、判斷、輸出與實際動作,找出訊號在哪一段中斷。

依發生條件

比較正常與異常時的模式、程式、點位、設定與操作順序。

找出第一個不符合預期的位置

拆分後不需要同時處理所有小問題,而是依序確認,找出第一個不符合預期的位置。

按鈕輸入正常 → 啟動條件成立 → 程式已進入主流程 → 程式停在 WAIT DI[5]=ON → 接下來只需要確認 DI[5] 的來源與條件
重點: 「手臂沒有動」只是結果。把問題拆開後,真正需要處理的可能只是某一個輸入沒有成立、 某一行程式正在等待,或某一組設定與預期不同。