USB 驱动程序似乎已安装,至少 Windows10 让我相信这一点。
可以从 PeakTech 主页下载的软件 (DS_Wave V2.2.2) 似乎无法使用。当尝试通过该软件远程连接设备时,会导致示波器“崩溃”/重启。
无论如何,我不想使用他们的软件,但我想通过 pyUSB 来处理示波器。
这个小型 Python 程序在第一台电脑上运行良好,但在第二台电脑上却无法运行。
### communicate with a Peaktech 1337 Oscilloscope (OWON) import usb.core import usb.util from usb.backend import libusb1 def send(dev,cmd): # address taken from results of print(dev): ENDPOINT 0x3: Bulk OUT dev.write(3,cmd+'\r') # address taken from results of print(dev): ENDPOINT 0x81: Bulk IN result = (dev.read(0x81,10000,1000)).tobytes().decode('utf-8')[:-4] return result back = libusb1.get_backend() print(type(back)) dev = usb.core.find(idVendor=0x5345, idProduct=0x1234, backend=back) print(dev) dev.set_configuration() print(send(dev,"*IDN?")) ### end of script
PC1上的结果:(Python 3.7.4)
<class 'NoneType'> DEVICE ID 5345:1234 on Bus 000 Address 001 ================= bLength : 0x12 (18 bytes) bDescriptorType : 0x1 Device bcdUSB : 0x200 USB 2.0 bDeviceClass : 0x0 Specified at interface bDeviceSubClass : 0x0 bDeviceProtocol : 0x0 bMaxPacketSize0 : 0x40 (64 bytes) idVendor : 0x5345 idProduct : 0x1234 bcdDevice : 0x294 Device 2.94 iManufacturer : 0x1 System CPU iProduct : 0x2 Oscilloscope iSerialNumber : 0x3 SERIAL bNumConfigurations : 0x1 CONFIGURATION 1: 500 mA ================================== bLength : 0x9 (9 bytes) bDescriptorType : 0x2 Configuration wTotalLength : 0x20 (32 bytes) bNumInterfaces : 0x1 bConfigurationValue : 0x1 iConfiguration : 0x5 Bulk Data Configuration bmAttributes : 0xc0 Self Powered bMaxPower : 0xfa (500 mA) INTERFACE 0: Physical ================================== bLength : 0x9 (9 bytes) bDescriptorType : 0x4 Interface bInterfaceNumber : 0x0 bAlternateSetting : 0x0 bNumEndpoints : 0x2 bInterfaceClass : 0x5 Physical bInterfaceSubClass : 0x6 bInterfaceProtocol : 0x50 iInterface : 0x4 Bulk Data Interface ENDPOINT 0x81: Bulk IN =============================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x81 IN bmAttributes : 0x2 Bulk wMaxPacketSize : 0x200 (512 bytes) bInterval : 0x0 ENDPOINT 0x3: Bulk OUT =============================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x3 OUT bmAttributes : 0x2 Bulk wMaxPacketSize : 0x200 (512 bytes) bInterval : 0x0 ,P1337,1842237,V2.4. # <--- that's the response I'm expecting after sending `*IDN?`
PC2上的结果:(Python 3.10.7)
<class 'usb.backend.libusb1._LibUSB'> DEVICE ID 5345:1234 on Bus 001 Address 049 ================= bLength : 0x12 (18 bytes) bDescriptorType : 0x1 Device bcdUSB : 0x200 USB 2.0 bDeviceClass : 0x0 Specified at interface bDeviceSubClass : 0x0 bDeviceProtocol : 0x0 bMaxPacketSize0 : 0x40 (64 bytes) idVendor : 0x5345 idProduct : 0x1234 bcdDevice : 0x294 Device 2.94 iManufacturer : 0x1 Error Accessing String iProduct : 0x2 Error Accessing String iSerialNumber : 0x3 Error Accessing String bNumConfigurations : 0x1 CONFIGURATION 1: 500 mA ================================== bLength : 0x9 (9 bytes) bDescriptorType : 0x2 Configuration wTotalLength : 0x20 (32 bytes) bNumInterfaces : 0x1 bConfigurationValue : 0x1 iConfiguration : 0x5 Error Accessing String bmAttributes : 0xc0 Self Powered bMaxPower : 0xfa (500 mA) INTERFACE 0: Physical ================================== bLength : 0x9 (9 bytes) bDescriptorType : 0x4 Interface bInterfaceNumber : 0x0 bAlternateSetting : 0x0 bNumEndpoints : 0x2 bInterfaceClass : 0x5 Physical bInterfaceSubClass : 0x6 bInterfaceProtocol : 0x50 iInterface : 0x4 Error Accessing String ENDPOINT 0x81: Bulk IN =============================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x81 IN bmAttributes : 0x2 Bulk wMaxPacketSize : 0x200 (512 bytes) bInterval : 0x0 ENDPOINT 0x3: Bulk OUT =============================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x3 OUT bmAttributes : 0x2 Bulk wMaxPacketSize : 0x200 (512 bytes) bInterval : 0x0 Traceback (most recent call last): File "C:\Users\Lab\Programs\Test\Test_PeakTech.py", line 18, in <module> dev.set_configuration() File "C:\Users\Lab\AppData\Local\Programs\Python\Python310\lib\site-packages\usb\core.py", line 915, in set_configuration self._ctx.managed_set_configuration(self, configuration) File "C:\Users\Lab\AppData\Local\Programs\Python\Python310\lib\site-packages\usb\core.py", line 113, in wrapper return f(self, *args, **kwargs) File "C:\Users\Lab\AppData\Local\Programs\Python\Python310\lib\site-packages\usb\core.py", line 158, in managed_set_configuration self.managed_open() File "C:\Users\Lab\AppData\Local\Programs\Python\Python310\lib\site-packages\usb\core.py", line 113, in wrapper return f(self, *args, **kwargs) File "C:\Users\Lab\AppData\Local\Programs\Python\Python310\lib\site-packages\usb\core.py", line 131, in managed_open self.handle = self.backend.open_device(self.dev) File "C:\Users\Lab\AppData\Local\Programs\Python\Python310\lib\site-packages\usb\backend\libusb1.py", line 804, in open_device return _DeviceHandle(dev) File "C:\Users\Lab\AppData\Local\Programs\Python\Python310\lib\site-packages\usb\backend\libusb1.py", line 652, in __init__ _check(_lib.libusb_open(self.devid, byref(self.handle))) File "C:\Users\Lab\AppData\Local\Programs\Python\Python310\lib\site-packages\usb\backend\libusb1.py", line 604, in _check raise USBError(_strerror(ret), ret, _libusb_errno[ret]) usb.core.USBError: [Errno 13] Access denied (insufficient permissions)
这是怎么回事?我没主意了,浪费时间
这个问题的根源似乎是权限问题。在第二台电脑上,错误提示 usb.core.USBError: [Errno 13] Access denied (insufficient permissions) 表示程序尝试访问 USB 设备时权限不足。以下是一些可能的原因和解决方法:
usb.core.USBError: [Errno 13] Access denied (insufficient permissions)
Windows 10 上的 USB 设备访问权限有时会受到限制,特别是在没有管理员权限时。可以尝试以下解决方法:
libusb
驱动程序的安装可能存在问题,尤其是在不同的操作系统或硬件上,可能会影响设备的正常工作。你可以尝试以下步骤:
不同的 Python 版本可能会影响 pyusb 库的行为。虽然 Python 3.7 和 3.10 应该可以正常运行 pyusb,但它们之间的差异可能导致不同的结果。可以尝试以下方法:
pyusb
检查 pyusb 和 libusb1 的版本:
libusb1
bash pip show pyusb pip show libusb1
在 Python 3.7 下测试:你可以在第二台电脑上安装 Python 3.7 并测试该脚本,查看是否能解决问题。
有时,即使设备连接正确,pyusb 可能也会因为权限问题无法打开设备。你可以尝试以下方法:
usb.core.find()
python dev.set_configuration() dev.write(3, cmd+'\r', timeout=1000) # Use appropriate timeout
dev.set_configuration()
如果你继续遇到问题,请提供更多的细节,比如设备管理器中的设备状态,或者其他错误日志,这样能更容易找到问题的根源。