【发布时间】:2020-09-24 11:59:22
【问题描述】:
我正在研究接触电阻,为此我将使用 Keithley 2400 源表和 Keithley 2182a 纳伏表。两台仪器都通过 USB 和 Keithley KUSB-488b 适配器连接到 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 行的结果应该给我一个我的仪器地址的列表。但是,这些都不正确,因此当我尝试第 4 行提供的四个地址时,我得到一个超时错误 (VI_ERROR_TMO)。这个简单代码块的第 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 和正确的地址。
【问题讨论】:
-
我之前没有使用过KUSB-488b,但是根据您的描述,这似乎是KUSB-488b驱动程序的问题,或者VISA可能不是正确的版本或存在安装问题。您可以使用 NIMAX 工具查看仪器并进行通信吗?即使您可以使用 KI-488 诊断工具看到它们,如果 NImax 无法看到它们,那么 pyvisa 也将无法看到它们。
-
嗨 Zircatron,感谢您的重播!我也相信这是 NI-VISA 的问题,但不确定是什么原因造成的。我更新了 KUSB 驱动程序和 NI-VISA。我能够使用 NIMAX 工具检测到这两种仪器,以及它们对应的 GPIB 地址。这就是我的困惑,NIMAX 正确地选择了它们,但我无法通过签证 dll 看到它们。我安装了 pyvisa-py 并在调用 ResourceManager() 时传递了“@py”,现在我可以在 python 中看到并与这两个工具进行通信。但是我仍然无法解释为什么 NI-VISA 不起作用。
-
尝试卸载 NI-VISA 并安装 Keysight Connection Expert。