Python通过USBTMC连接是德示波器时设备未找到问题求助
问题概述
我尝试不使用Pathwave Benchvue软件,通过Python结合USBTMC协议与Keysight示波器通信,将波形保存为CSV或PNG格式到本地电脑。
实现代码
import pyvisa import os import libusb # import libusb_package # import usb.core import usb.backend.libusb1 import usbtmc from usbmonitor import USBMonitor from usbmonitor.attributes import ID_MODEL, ID_MODEL_ID, ID_VENDOR_ID monitor = USBMonitor() devices_dict = monitor.get_available_devices() for device_id, device_info in devices_dict.items(): print(f"{device_id} -- {device_info[ID_MODEL]} ({device_info[ID_MODEL_ID]} - {device_info[ID_VENDOR_ID]})") # dev = usb.core.find() # print("dev", dev) # for dev in libusb_package.find(find_all=True): # print(dev) adr = "USB::0x2A8D::0x1766::MY57251874::INSTR" p_id = 0x1766 v_id = 0x2A8D # device = usb.core.find(idVendor=v_id, idProduct=p_id) # instr = usbtmc.Instrument(v_id, p_id) instr = usbtmc.Instrument(adr) print(instr.ask("*IDN?"))
USB设备检测结果
usbmonitor输出显示示波器已正常连接:
USB\VID_2A8D&PID_1766\MY57251874 -- USB Test and Measurement Device (IVI) (1766 - 2A8D)
报错信息
运行代码时触发设备未找到错误:
instr = usbtmc.Instrument(adr) ^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\username\PycharmProjects\pythonProject\.venv\Lib\site-packages\usbtmc\usbtmc.py", line 262, in __init__ raise UsbtmcException("Device not found", 'init') usbtmc.usbtmc.UsbtmcException: Device not found [init]
解决方法
1. 改用PyVISA库(推荐)
usbtmc库对VISA格式地址支持有限,PyVISA是更稳定的仪器通信方案,修改代码如下:
import pyvisa # 初始化VISA资源管理器 rm = pyvisa.ResourceManager() # 列出所有可用设备,确认示波器地址存在 print(rm.list_resources()) # 连接示波器 instr = rm.open_resource("USB::0x2A8D::0x1766::MY57251874::INSTR") # 验证连接 print(instr.query("*IDN?"))
2. 修复usbtmc的设备初始化方式
如果坚持使用usbtmc,不要传入VISA格式地址,改用厂商ID和产品ID直接初始化:
instr = usbtmc.Instrument(v_id, p_id) # v_id=0x2A8D,p_id=0x1766 print(instr.ask("*IDN?"))
注意:运行前关闭所有占用示波器USB接口的软件(如Benchvue),确保当前用户有USB设备读写权限。
3. 驱动与后端检查
- Windows系统:确认已安装Keysight USB TMC驱动,设备管理器中示波器无黄色感叹号。
- 若使用libusb,需指定正确的后端路径:
backend = usb.backend.libusb1.get_backend(find_library=lambda x: "path/to/libusb-1.0.dll") device = usb.core.find(idVendor=v_id, idProduct=p_id, backend=backend)
内容的提问来源于stack exchange,提问作者gamer388
相关产品推荐
相关产品推荐

