跳至內容
測試伺服器
開發伺服器

疑難排解#

本主題有助於診斷和解決使用 pypylon 與工業相機時常見的問題。

重點在於實用的偵錯策略與常見的失敗情境。

常見症狀與原因#

症狀 可能原因
未偵測到相機 缺少驅動程式、連接線問題、未安裝 SDK
發生逾時於 RetrieveResult() 觸發設定錯誤、無訊號、逾時時間設定錯誤
掉幀 頻寬限制、處理速度緩慢
擷取錯誤 網路不穩定、封包遺失
應用程式凍結 封鎖呼叫、死結、佇列溢位

相機偵測問題#

若要解決相機偵測問題,您有兩種選擇:

  • 檢查硬體:

    • 確認連接線連接。
    • 確認相機電源。
    • 嘗試使用不同的 USB 連接埠或乙太網路連接線。
  • 檢查軟體:

    • 確保已安裝 pylon SDK。
    • 確認已載入驅動程式。
    • 使用 pylon Viewer 進行測試。

逾時問題#

典型原因#
  • 已啟用 Trigger Mode 但無觸發訊號
  • Exposure Time 過長
  • 逾時值過低
除錯策略#
camera.TriggerMode
camera.TriggerSource

停用觸發以進行測試:

camera.TriggerMode.Value = "Off"

擷取錯誤#

指標#
if not grab_result.GrabSucceeded():
    print(grab_result.ErrorDescription)
典型原因#
  • 網路壅塞 (GigE)
  • 頻寬不足
  • 連線不穩定

影像損壞與掉幀#

典型原因#
  • 封包遺失 (GigE 攝影機)
  • CPU 過載
  • 緩衝區不足
減緩策略#
  • 啟用巨型封包 (Jumbo Frames)。
  • 增加 MaxNumBuffer.
  • 減少 ROI 或幀率。

效能問題#

指標#
  • 延遲增加
  • 佇列大小增加
  • 掉幀
除錯策略#
  • 測量幀率。
  • 監控 CPU 使用率。
  • 檢查佇列大小。

執行緒問題#

指標#
  • 由於封鎖造成的死結 queue.get()
  • 執行緒在關閉時未停止
修正方式#
  • 使用逾時:

    q.get(timeout=0.1)
    
  • 使用停止訊號:

    stop_event = threading.Event()
    

OpenCV GUI 問題#

指標#
QObject::killTimer error
典型原因#
  • 在背景工作執行緒中執行 GUI 函式
修正#
  • 執行 cv2.imshow() 僅在主執行緒中。

網路問題 (GigE)#

指標#
  • 封包遺失
  • 掉幀
減緩策略#
  • 使用專用網路介面卡 (NIC)
  • 啟用巨型封包 (Jumbo Frames)。
  • 調整封包延遲。

偵錯檢查清單#

第一步是識別是哪個層級造成此問題。

Hardware → Transport → Driver → Application

尋找以下問題指標:

  • 是否已偵測到相機?
  • pylon Viewer 是否正常運作?
  • 您是否已正確設定 TriggerMode ?
  • 頻寬是否充足?
  • CPU 是否過載?
  • 佇列是否正在封鎖?

記錄建議#

使用結構化記錄而非 print:

import logging
logging.exception("Camera error")

重點摘要#

  • 大多數問題都與組態或時序有關。
  • 務必將硬體問題與軟體問題隔離開來。
  • 持續監控系統資源。
  • 採用系統化的除錯方法。