Basler Pylon IP相机使用pypylon采图时抛出TimeoutException异常如何解决
Basler GigE相机采集超时问题排查步骤
该超时错误是PC未收到相机传输的图像帧导致的,代码在其他设备可正常运行说明代码逻辑无问题,优先排查本机环境配置:
- 首先检查以太网配置:确认相机IP与本机以太网IP在同一网段,子网掩码一致。开启网卡巨型帧,设置值为9014字节,Basler GigE相机默认适配该帧大小,可避免小包传输丢包。临时关闭本机防火墙、杀毒软件,部分安全规则会拦截相机的UDP推流数据包。
- 其次校验Pylon环境适配:打开Pylon Viewer工具直接连接相机测试采集,若Pylon Viewer也无法采集,可确定问题出在网络/硬件层,和代码无关。确认本机Pylon SDK版本、pypylon版本与相机固件版本匹配,版本不兼容会出现偶发的通信异常。
- 最后检查相机采集模式:若相机之前被设置为外部触发模式,无触发信号时就会出现超时。可在代码初始化相机后强制重置为默认连续采集模式,修改后的代码如下:
from pypylon import pylon from pypylon import genicam import sys countOfImagesToGrab = 100 exitCode = 0 try: camera = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice()) camera.Open() # 重置相机参数为默认配置,关闭触发模式,开启连续采集 camera.UserSetSelector = "Default" camera.UserSetLoad.Execute() camera.TriggerMode = "Off" camera.AcquisitionMode = "Continuous" print("Using device ", camera.GetDeviceInfo().GetModelName()) new_width = camera.Width.GetValue() - camera.Width.GetInc() if new_width >= camera.Width.GetMin(): camera.Width.SetValue(new_width) camera.MaxNumBuffer = 5 # 可根据分辨率大小适当延长超时时间 grab_timeout = 10000 camera.StartGrabbingMax(countOfImagesToGrab) while camera.IsGrabbing(): grabResult = camera.RetrieveResult(grab_timeout, pylon.TimeoutHandling_ThrowException) if grabResult.GrabSucceeded(): print("SizeX: ", grabResult.Width) print("SizeY: ", grabResult.Height) img = grabResult.Array print("Gray value of first pixel: ", img[0, 0]) else: print("Error: ", grabResult.ErrorCode, grabResult.ErrorDescription) grabResult.Release() camera.Close() except genicam.GenericException as e: print("An exception occurred.") print(e.GetDescription()) exitCode = 1 sys.exit(exitCode)
内容的提问来源于stack exchange,提问作者Ezgi
相关产品推荐
相关产品推荐

