You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:23:10