PyVISA在Linux上未列出USB仪器

6

我正在尝试使用一条USB电缆从树莓派与LeCroy WaveRunner 640Zi示波器通信。我已经在Windows下完成了连接,但是现在在Linux下无法正常工作。

如果我运行lsusb指令,会看到如下内容:

$ lsusb
Bus 001 Device 009: ID 05ff:1023 LeCroy Corp.
...

如果我现在转向Python,我会得到这样的结果:

$ python3
Python 3.7.3 (default, Dec 20 2019, 18:57:59) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyvisa
>>> pyvisa.ResourceManager().list_resources()
('ASRL/dev/ttyAMA0::INSTR',)
>>> 

示波器不在那里(我认为ASRL/dev/ttyAMA0::INSTR是来自树莓派本身的)。我认为示波器已经正确配置,因为如果我进入选项(使用示波器本身的屏幕)并转到“远程选项”,我会看到它设置为USB,并且VISA地址为USB0::bla::bla::bla::INSTR
我尝试按照此页面中的说明进行操作,但没有成功。如果我运行python3 -m visa info,我会得到:
$ python3 -m visa info
~/.local/lib/python3.7/site-packages/visa.py:23: 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.
  FutureWarning,
Machine Details:
   Platform ID:    Linux-4.19.97-v7+-armv7l-with-debian-10.3
   Processor:      

Python:
   Implementation: CPython
   Executable:     /usr/bin/python3
   Version:        3.7.3
   Compiler:       GCC 8.3.0
   Bits:           32bit
   Build:          Dec 20 2019 18:57:59 (#default)
   Unicode:        UCS4

PyVISA Version: 1.11.3

Backends:
   ivi:
      Version: 1.11.3 (bundled with PyVISA)
      Binary library: Not found
   py:
      Version: 0.5.2
      ASRL INSTR: Available via PySerial (3.4)
      USB INSTR: Available via PyUSB (1.0.2). Backend: libusb1
      USB RAW: Available via PyUSB (1.0.2). 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'

我也尝试着通过 pyvisa.ResourceManager().open_resource('USB0::bla::bla::bla::INSTR') 不 "列出资源" 连接示波器,但我获得了以下提示:

>>> osc = pyvisa.ResourceManager().open_resource('USB0::0x05ff::0x1023::2810N60091::INSTR')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "~/.local/lib/python3.7/site-packages/pyvisa/highlevel.py", line 3304, in open_resource
    res.open(access_mode, open_timeout)
  File "~/.local/lib/python3.7/site-packages/pyvisa/resources/resource.py", line 298, in open
    self._resource_name, access_mode, open_timeout
  File "~/.local/lib/python3.7/site-packages/pyvisa/highlevel.py", line 3232, in open_bare_resource
    return self.visalib.open(self.session, resource_name, access_mode, open_timeout)
  File "~/.local/lib/python3.7/site-packages/pyvisa_py/highlevel.py", line 167, in open
    sess = cls(session, resource_name, parsed, open_timeout)
  File "~/.local/lib/python3.7/site-packages/pyvisa_py/sessions.py", line 323, in __init__
    self.after_parsing()
  File "~/.local/lib/python3.7/site-packages/pyvisa_py/usb.py", line 84, in after_parsing
    self.parsed.serial_number,
  File "~/.local/lib/python3.7/site-packages/pyvisa_py/protocols/usbtmc.py", line 287, in __init__
    super(USBTMC, self).__init__(vendor, product, serial_number, **kwargs)
  File "~/.local/lib/python3.7/site-packages/pyvisa_py/protocols/usbtmc.py", line 199, in __init__
    raise ValueError("No device found.")
ValueError: No device found.
>>> 

1个回答

10

我找到了一个解决方案,为了后代的利益分享给大家。只需要在文件/etc/udev/rules.d/99-com.rules中添加一行内容SUBSYSTEM=="usb", MODE="0666", GROUP="usbusers"(如果文件已经存在,则将此行追加),然后重新启动计算机。 总结一下:

  1. 进入sudo环境:
sudo su

现在将所需的行添加到相应的文件中:
echo 'SUBSYSTEM=="usb", MODE="0666", GROUP="usbusers"' >> /etc/udev/rules.d/99-com.rules
  1. 重新启动计算机

  2. 享受。

$ python3
Python 3.7.3 (default, Dec 20 2019, 18:57:59) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyvisa
>>> pyvisa.ResourceManager().list_resources()
('ASRL/dev/ttyAMA0::INSTR', 'USB0::bla::bla::bla::INSTR')
>>>  osc = pyvisa.ResourceManager().open_resource('USB0::bla::bla::bla::INSTR')
>>> osc.query('*IDN?')
'*IDN LECROY,WR640ZI,LCRY28blablabla,7.7.1\n'

1
https://www.tincantools.com/accessing-devices-without-sudo/ - felixpradoh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接