首页 > 解决方案 > 在 Python 中使用 PyVISA 通过 GPIB 连接到仪器

问题描述

我正在研究接触电阻,为此我将使用 Keithley 2400 源表和 Keithley 2182a 纳伏表。两台仪器都通过带有 Keithley KUSB-488b 适配器的 USB 连接到 Windows 计算机。

我正在使用 Python、Pyvisa 模块和 National Instruments 后端 (NI VISA) 创建一个脚本,让我能够进行所需的测量。但是,我在与仪器通信时遇到了麻烦。根据 Pyvisa 开发人员提供的官方文档,我已经运行了几个简单的脚本,但是我无法连接任何一种仪器。以下简单的代码块可能有助于我的解释:

>>> import pyvisa
>>> rm = pyvisa.ResourceManager()
>>> rm.list_resources()
('ASRL3::INSTR', 'ASRL4::INSTR', 'ASRL8::INSTR', 'ASRL14::INSTR')
>>> inst = rm.open_resource(' # Instrument address here # ')
>>> print(inst.query("*IDN?")

第 4 行的结果应该给我一个我的仪器地址的列表。但是,这些都不正确,因此VI_ERROR_TMO当我尝试第 4 行提供的四个地址时,我得到一个超时错误 ()。这个简单代码块的第 4 行的预期输出将是两个仪器的 GPIB 地址,根据文档。我尝试使用 KI-488 诊断工具与两个设备进行通信。这两个我都成功地沟通了。SMU 的地址是 GPIB::24,纳伏表是 GPIB::7。

我还尝试在更复杂的脚本(当前扫描)中传递从诊断工具获得的 GPIB 地址。然而这导致

pyvisa.errors.VisaIOError: VI_ERROR_LIBRARY_NFOUND (-1073807202)

我在网上搜索了类似的错误,其中大多数是缺少 dll 或位数不正确的结果。然而这不是我的情况,因为一个简单的python -m visa info证明实现的后端是正确的。我也尝试过通过resourcemanager( path ),但这也没有成功。

另外,我尝试安装 Keithley I/O Layer,但还是没有成功。此外,在 Keithley 通信器中,这两个设备实际上都带有相应的 GPIB 地址。问题在于使用 Python 和正确的地址。

标签: pythongpibpyvisa

解决方案


通过使用是德科技网站上的“Keysight IO Libraries Suite”而不是 NI-VISA,我能够使用相同的 KUSB-488B 适配器解决类似的问题。

在运行 Windows 10(19.09,64 位)的 PC 上,我执行了以下操作:

  • 从设备管理器中卸载 KUSB-488B 驱动程序。
  • 卸载NI-VISA,重启。
  • 在 Windows 设置应用程序的已安装程序列表中删除所有提及“VISA”、“NI”、“GPIB”或“488”的剩余项目。重启。
  • 安装最新的 KUSB-488B 驱动程序。安装过程中,选择“Keithley command compatible”选项(NI还有一个,但是忘记叫什么了)。重启。
  • 安装“Keysight IO Libraries Suite”,版本“2020 Update 1”。重启。

现在,我可以在“Keysight Connection Expert”中看到该设备,这是 Keysight 的“NI-MAX”模拟。
安装 Anaconda Python(64 位)并运行pip install pyvisa后,我可以毫无错误地控制仪器。


推荐阅读