macos - 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?
解决方案
推荐阅读
- mysql - 将 lstart 转换为 mysql 时间戳
- python - f-string 导致 CDSW/linux 上的换行错误
- windows - 在命令行输出中搜索关键字并显示上一行的批处理文件(x5)
- reactjs - 删除 localhost 名称以部署 Next.js 时出现问题
- shadow-dom - 有没有办法使用组合来改变带有阴影 dom 的 web 组件的 CSS?
- php - 从没有 FFMPEG 的 MP4 中提取帧
- php - 如何使用 PHP 将不同数组中的数组值合并到一个数组中?
- mediawiki - MediaWiki 配置 TemplateStyles 以包含 Module:Message box/ambox.css
- python - 使用 statsmodels 在多元线性回归中添加常数
- php - orderby 'meta_value_num' 打破了我的 WP_Query