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

疑難排解#

本主題旨在協助診斷並解決在使用 pypylon 及工業攝影機時常見的問題。

重點在於實用的除錯策略與典型的失敗情境。

常見症狀與成因#

症狀 可能的原因
未偵測到相機 驅動程式遺失、纜線問題、未安裝 SDK
倒數計時還剩 RetrieveResult() 觸發器設定錯誤、無訊號、超時設定錯誤
掉幀 頻寬限制、處理速度緩慢
抓取錯誤 網路不穩定、封包遺失
應用程式當機 阻塞呼叫、死鎖、佇列溢出

相機偵測問題#

要解決相機偵測問題,您可以選擇以下兩種方式:

  • 檢查硬體:

    • 請檢查纜線連接狀況。
    • 請確認攝影機的電源。
    • 請嘗試使用另一個 USB 連接埠或乙太網路線。
  • 檢查軟體:

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

超時問題#

常見原因#
  • 觸發模式已啟用,但無觸發訊號
  • 曝光時間過長
  • 超時值過低
除錯策略#
camera.TriggerMode
camera.TriggerSource

為進行測試而停用觸發功能:

camera.TriggerMode.Value = "Off"

抓取錯誤#

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

影像損壞與畫面遺失#

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

效能問題#

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

執行緒相關問題#

指標#
  • 因阻塞而導致的死鎖 queue.get()
  • 關機時執行緒未停止
修正項目#
  • 使用超時機制:

    q.get(timeout=0.1)
    
  • 使用停車信號:

    stop_event = threading.Event()
    

OpenCV 圖形使用者介面問題#

指標#
QObject::killTimer error
常見原因#
  • 在工作執行緒中執行的 GUI 函式
修正#
  • 執行 cv2.imshow() 僅限於主執行緒。

網路問題(GigE)#

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

除錯檢查清單#

第一步是找出是哪一層導致了這個問題。

Hardware → Transport → Driver → Application

請留意以下問題徵兆:

  • 是否已偵測到相機?
  • pylon Viewer 真的有效嗎?
  • 您是否已設定 TriggerMode 正確嗎?
  • 頻寬是否足夠?
  • CPU 是否過載了?
  • 隊列是否造成阻塞?

記錄建議#

請使用結構化記錄,而非 `print`:

import logging
logging.exception("Camera error")

重點摘要#

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