首页 > 解决方案 > pyvisa 与 USB 设备的连接对于 pyvisa-py 后端失败,但适用于 NI 后端

问题描述

如以下示例所示,在将 NI 后端 (ivi) 与 pyvisa 一起使用时,我能够连接到设备 (Keysight 34465A),但使用 pyvisa-py 后端时连接失败:

import pyvisa as visa

device_address = 'USB0::0x2A8D::0x0101::MY59022083::INSTR'

rm_ni = visa.ResourceManager()
dmm_ni = rm_ni.open_resource(device_address)
print(f'NI: {dmm_ni}')

rm_py = visa.ResourceManager('@py')
dmm_py = rm_py.open_resource(device_address)
print(f'py: {dmm_py}')

产生输出

NI: USBInstrument at USB0::0x2A8D::0x0101::MY59022083::0::INSTR
Traceback (most recent call last):
  File "/Users/jps/test/src/visa_ni_py.py", line 8, in <module>
    dmm_py = rm_py.open_resource('USB0::0x2A8D::0x0101::MY59022083::INSTR')
  File "/Users/jps/test/venv/lib/python3.9/site-packages/pyvisa/highlevel.py", line 3304, in open_resource
    res.open(access_mode, open_timeout)
  File "/Users/jps/test/venv/lib/python3.9/site-packages/pyvisa/resources/resource.py", line 297, in open
    self.session, status = self._resource_manager.open_bare_resource(
  File "/Users/jps/test/venv/lib/python3.9/site-packages/pyvisa/highlevel.py", line 3232, in open_bare_resource
    return self.visalib.open(self.session, resource_name, access_mode, open_timeout)
  File "/Users/jps/test/venv/lib/python3.9/site-packages/pyvisa_py/highlevel.py", line 167, in open
    sess = cls(session, resource_name, parsed, open_timeout)
  File "/Users/jps/test/venv/lib/python3.9/site-packages/pyvisa_py/sessions.py", line 323, in __init__
    self.after_parsing()
  File "/Users/jps/test/venv/lib/python3.9/site-packages/pyvisa_py/usb.py", line 81, in after_parsing
    self.interface = self._intf_cls(
  File "/Users/jps/test/venv/lib/python3.9/site-packages/pyvisa_py/protocols/usbtmc.py", line 293, in __init__
    self.usb_dev.set_configuration()
  File "/Users/jps/test/venv/lib/python3.9/site-packages/usb/core.py", line 915, in set_configuration
    self._ctx.managed_set_configuration(self, configuration)
  File "/Users/jps/test/venv/lib/python3.9/site-packages/usb/core.py", line 113, in wrapper
    return f(self, *args, **kwargs)
  File "/Users/jps/test/venv/lib/python3.9/site-packages/usb/core.py", line 159, in managed_set_configuration
    self.backend.set_configuration(self.handle, cfg.bConfigurationValue)
  File "/Users/jps/test/venv/lib/python3.9/site-packages/usb/backend/libusb1.py", line 812, in set_configuration
    _check(self.lib.libusb_set_configuration(dev_handle.handle, config_value))
  File "/Users/jps/test/venv/lib/python3.9/site-packages/usb/backend/libusb1.py", line 604, in _check
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 19] No such device (it may have been disconnected)

信息:

$ python -m visa info
/Users/jps/test/venv/lib/python3.9/site-packages/visa.py:13: FutureWarning: The visa module provided by PyVISA is being deprecated. You can replace `import visa` by `import pyvisa as visa` to achieve the same effect.

The reason for the deprecation is the possible conflict with the visa package provided by the https://github.com/visa-sdk/visa-python which can result in hard to debug situations.
  warnings.warn(
Machine Details:
   Platform ID:    macOS-10.15.7-x86_64-i386-64bit
   Processor:      i386

Python:
   Implementation: CPython
   Executable:     /Users/jps/test/venv/bin/python
   Version:        3.9.5
   Compiler:       Clang 12.0.0 (clang-1200.0.32.29)
   Bits:           64bit
   Build:          May  4 2021 03:33:11 (#default)
   Unicode:        UCS4

PyVISA Version: 1.11.3

Backends:
   ivi:
      Version: 1.11.3 (bundled with PyVISA)
      #1: /Library/Frameworks/visa.framework/visa:
         found by: auto
         bitness: 64
         Vendor: National Instruments
         Impl. Version: National Instruments
         Spec. Version: National Instruments
   py:
      Version: 0.5.2
      ASRL INSTR: Available via PySerial (3.5)
      USB INSTR: Available via PyUSB (1.2.1). Backend: libusb1
      USB RAW: Available via PyUSB (1.2.1). Backend: libusb1
      TCPIP INSTR: Available 
      TCPIP SOCKET: Available 
      GPIB INSTR:
         Please install linux-gpib (Linux) or gpib-ctypes (Windows, Linux) to use this resource type. Note that installing gpib-ctypes will give you access to a broader range of funcionality.
         No module named 'gpib'

这一切都在 MacOS Catalina 上。


在写这篇文章时,pyvisa-py 连接在某一时刻成功:

NI: USBInstrument at USB0::0x2A8D::0x0101::MY59022083::0::INSTR
py: USBInstrument at USB0::0x2A8D::0x0101::MY59022083::0::INSTR

但我不能让它再次发生。


如何调试问题并让设备使用 pyvisa-py?

标签: macoslibusbpyvisa

解决方案


推荐阅读