跳转到内容
STAGING SERVER
DEVELOPMENT SERVER

故障排除#

本主题有助于诊断和解决使用 pypylon 和工业相机时遇到的常见问题。

重点在于实用的调试策略和典型的故障场景。

典型症状与原因#

症状 可能原因
未检测到相机 驱动程序缺失、线缆问题、SDK 未安装
超时发生在 RetrieveResult() 触发配置错误、无信号、超时时间设置不当
丢帧 带宽受限、处理速度慢
采集错误 网络不稳定、丢包
应用程序无响应 阻塞调用、死锁、队列溢出

相机检测问题#

要解决相机检测问题,您有两个选择:

  • 检查硬件:

    • 验证线缆连接。
    • 请检查相机电源。
    • 尝试更换 USB port 或以太网线。
  • 检查软件:

    • 确保已安装 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 过载
  • 缓冲区不足
缓解策略#
  • 启用巨型帧。
  • 增加 MaxNumBuffer.
  • 减小 ROI 或帧率。

性能问题#

指示器#
  • 延迟上升
  • 增加队列大小
  • 丢帧
排查策略#
  • 测量帧率。
  • 监控 CPU 使用率。
  • 检查队列大小。

线程问题#

指示器#
  • 由于阻塞导致的死锁 queue.get()
  • 线程在关闭时未停止
修复#
  • 使用超时设置:

    q.get(timeout=0.1)
    
  • 使用停止信号:

    stop_event = threading.Event()
    

OpenCV GUI 问题#

指示器#
QObject::killTimer error
典型原因#
  • 在工作线程中执行 GUI 函数
解决方法#
  • 运行 cv2.imshow() 仅在主线程中。

网络问题 (GigE)#

指示器#
  • 丢包
  • 丢帧
缓解策略#
  • 使用专用的网络接口卡 (NIC)
  • 启用巨型帧。
  • 调整数据包延迟。

排错检查清单#

第一步是确定问题是由哪一层引起的。

Hardware → Transport → Driver → Application

检查是否存在以下问题指标:

  • 是否检测到了相机?
  • pylon Viewer 是否正常工作?
  • 您是否已正确配置 TriggerMode ?
  • 带宽是否充足?
  • CPU 是否过载?
  • 队列是否阻塞?

日志记录建议#

使用结构化日志记录代替 print:

import logging
logging.exception("Camera error")

核心要点#

  • 大多数问题都与配置或时序有关。
  • 始终将硬件问题与软件问题隔离开来。
  • 持续监控系统资源。
  • 使用系统化的调试方法。