Skip to content

problem opening Basler cam #108

@ltmsyvag

Description

@ltmsyvag

Love pylablib!Used it to program my Hamamatsu cam successfully, but encountered BaslerLibError with my Basler cam while establishing connection.

my system

I use pylablib 1.4.3 + python 3.12, windows 10, and pylon 8. However the same Exception can be produced with pylon 7, pylon 25, and with different computers. So this seems like a general problem.

things that work

Before posting this issue, I have followed the pylablib basler doc to make the pylon-emulated camera work correctly. But I cannot use the same steps to get my real camera working. I could grab frames using this basler cam with pypylon, the official basler python tool.

minimal reproduciple example

To produce the exception, I use the following minimal code:

import pylablib as pll
pll.par["devices/dlls/basler_pylon"] = r"D:\basler camera\Runtime\x64\PylonC_v9.dll" # my PylonC path
from pylablib.devices import Basler
caminfo,  = Basler.list_cameras()
print(caminfo) # this works
with Basler.BaslerPylonCamera() as cam: # this produces BalserLibError, so does `cam = Basler.BaslerPylonCamera()`
    print('hello world')

The print(caminfo) tells me my cam model (acA4024-29um, a usb cam) as shown below. This should mean that I loaded the PythonC runtime correctly:

TCameraInfo(name='\\\\?\\usb#vid_2676&pid_ba02&mi_00#7&a46b7ce&0&0000#{79bfeeca-947f-11e1-bc58-001b2163ef96}', model='acA4024-29um', serial='25039266', devclass='BaslerUsb', devversion='109274-02', vendor='Basler', friendly_name='Basler acA4024-29um (25039266)', user_name='', props={'DeviceFactory': 'USB/BaslerUsb 9.1.1.279', 'DeviceGUID': '2676017E11A2', 'DeviceIdx': '0x0', 'InterfaceID': 'DefaultInterface', 'ManufacturerInfo': 'none', 'ProductId': '0xba02', 'SpeedSupportBitmask': '8', 'TLType': 'U3V', 'TransferModeKey': 'btx', 'UsbDriverTypeName': 'BaslerUSB', 'UsbPortVersionBcd': '0x320', 'VendorId': '0x2676'})

But the next line, the with block (or equivalently cam = Basler.BaslerPylonCamera()), gives me a BaslerLibError. I put below the complete error message:

---------------------------------------------------------------------------
BaslerLibError                            Traceback (most recent call last)
File c:\Users\Tweezer Lab\OneDrive\Desktop\mask_frame_cycle\pylablib_test.py:7
      [5](file:///C:/Users/Tweezer%20Lab/OneDrive/Desktop/mask_frame_cycle/pylablib_test.py:5) caminfo,  = Basler.list_cameras()
      [6](file:///C:/Users/Tweezer%20Lab/OneDrive/Desktop/mask_frame_cycle/pylablib_test.py:6) print(caminfo)
----> [7](file:///C:/Users/Tweezer%20Lab/OneDrive/Desktop/mask_frame_cycle/pylablib_test.py:7) with Basler.BaslerPylonCamera() as cam:
      [8](file:///C:/Users/Tweezer%20Lab/OneDrive/Desktop/mask_frame_cycle/pylablib_test.py:8)     print('hello world')

File d:\miniconda3\envs\tweezeroptim\Lib\site-packages\pylablib\devices\Basler\pylon.py:299, in BaslerPylonCamera.__init__(self, idx, name)
    [297](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:297) self._buffer_mgr=None
    [298](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:298) self._looper=self.ScheduleLooper()
--> [299](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:299) self.open()
    [300](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:300) self._raw_readout_format=False
    [301](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:301) self._add_info_variable("device_info",self.get_device_info)

File d:\miniconda3\envs\tweezeroptim\Lib\site-packages\pylablib\devices\Basler\pylon.py:329, in BaslerPylonCamera.open(self)
    [327](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:327) self.strm=lib.PylonDeviceGetStreamGrabber(self.hdev,0)
    [328](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:328) self._opid=libctl.open().opid
--> [329](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:329) self._update_attributes()
    [330](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:330) self.post_open()

File d:\miniconda3\envs\tweezeroptim\Lib\site-packages\pylablib\devices\interface\camera.py:1026, in IAttributeCamera._update_attributes(self, replace)
   [1024](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/interface/camera.py:1024) def _update_attributes(self, replace=False):
   [1025](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/interface/camera.py:1025)     """Update ``attributes`` dictionary; if ``replace==True``, replace it entirely, otherwise, simply update it"""
-> [1026](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/interface/camera.py:1026)     attrs=self._list_attributes()
   [1027](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/interface/camera.py:1027)     attrs_dict=dictionary.Dictionary(attrs if isinstance(attrs,dict) else {self._normalize_attribute_name(p.name):p for p in attrs})
   [1028](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/interface/camera.py:1028)     if replace:

File d:\miniconda3\envs\tweezeroptim\Lib\site-packages\pylablib\devices\Basler\pylon.py:356, in BaslerPylonCamera._list_attributes(self)
    [354](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:354) nodes=lib.collect_nodes(root,add_branch=False)
    [355](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:355) nodes={(n[5:] if n.startswith("Root/") else n):v for n,v in nodes.items()}
--> [356](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:356) attrs=[BaslerPylonAttribute(node,full_name=n) for n,node in nodes.items()]
    [357](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:357) for n in self._builtin_attrs:
    [358](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:358)     node=lib.GenApiNodeMapGetNode(nmap,n)

File d:\miniconda3\envs\tweezeroptim\Lib\site-packages\pylablib\devices\Basler\pylon.py:174, in BaslerPylonAttribute.__init__(self, node, full_name)
    [172](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:172) self.labels={}
    [173](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:173) self.ilabels={}
--> [174](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:174) self._fill_info()

File d:\miniconda3\envs\tweezeroptim\Lib\site-packages\pylablib\devices\Basler\pylon.py:185, in BaslerPylonAttribute._fill_info(self)
    [183](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:183)     nenum=lib.GenApiEnumerationGetNumEntries(self.node)
    [184](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:184)     self._value_nodes=[lib.GenApiEnumerationGetEntryByIndex(self.node,i) for i in range(nenum)]
--> [185](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:185) self.update_limits()

File d:\miniconda3\envs\tweezeroptim\Lib\site-packages\pylablib\devices\Basler\pylon.py:189, in BaslerPylonAttribute.update_limits(self)
    [187](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:187) """Update minimal and maximal attribute limits and return tuple ``(min, max, inc)``"""
    [188](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:188) if self.kind=="int":
--> [189](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:189)     self.min=lib.GenApiIntegerGetMin(self.node)
    [190](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:190)     self.max=lib.GenApiIntegerGetMax(self.node)
    [191](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylon.py:191)     self.inc=lib.GenApiIntegerGetInc(self.node)

File <string>:1, in <lambda>(hNode)

File d:\miniconda3\envs\tweezeroptim\Lib\site-packages\pylablib\core\utils\ctypes_wrap.py:276, in CFunctionWrapper.wrap_annotated.<locals>.wrapped_func(*vargs, **kwargs)
    [274](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/core/utils/ctypes_wrap.py:274)         return a
    [275](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/core/utils/ctypes_wrap.py:275) call_args=[_to_call_arg(n,t,a) for (n,t,a) in zip(argnames,prep_argtypes,func_args)]
--> [276](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/core/utils/ctypes_wrap.py:276) retval=func(*call_args)
    [277](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/core/utils/ctypes_wrap.py:277) res=self._convert_results(rvals or [None],dict(zip(argnames,func_args)),retval,kwargs,rconv)
    [278](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/core/utils/ctypes_wrap.py:278) if (not self.tuple_single_retval) and len(res)==0:

File d:\miniconda3\envs\tweezeroptim\Lib\site-packages\pylablib\devices\Basler\pylonC_lib.py:47, in errcheck.<locals>.errchecker(result, func, arguments)
     [45](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylonC_lib.py:45) def errchecker(result, func, arguments):  # pylint: disable=unused-argument
     [46](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylonC_lib.py:46)     if result not in passing:
---> [47](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylonC_lib.py:47)         raise BaslerLibError(func.__name__,result,lib=lib)
     [48](file:///D:/miniconda3/envs/tweezeroptim/Lib/site-packages/pylablib/devices/Basler/pylonC_lib.py:48)     return result

BaslerLibError: function 'GenApiIntegerGetMin' raised error 0xC2000001(GENAPI_E_FAIL): PylonC error #c2000001 'Failed to get minimum integer value from node.'

Would appreciate any insights about what this exception is about.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions