使用 GPIB 上仪器的 PyVISA 没有响应

No response using PyVISA from instrument on GPIB

我正在尝试使用 PyVISA 在 GPIB 上控制仪器(非常古老的霍尔测量设备)。我知道它可以与 labview 一起使用,我在其中找到了哪些地址可以做什么以及使用示踪剂执行的一些基本命令,但没有任何乐趣。我被要求在 python 3.

中编写 DAQ 和分析代码

到目前为止我已经能够识别地址:

import visa
rm = visa.ResourceManager()
print(rm.list_resources())
>>>('ASRL1::INSTR', 'GPIB0::3::0::INSTR', 'GPIB0::3::1::INSTR', 'GPIB0::3::3::INSTR', 'GPIB0::3::4::INSTR', 'GPIB0::3::5::INSTR', 'GPIB0::3::6::INSTR', 'GPIB0::3::7::INSTR', 'GPIB0::3::8::INSTR', 'GPIB0::3::9::INSTR', 'GPIB0::3::10::INSTR')

然而,当我尝试使用任何 "wave" 或测量命令字符串(找到跟踪 labview I/O)进行查询时,我总是会遇到超时错误。

instr3_8 = rm.open_resource('GPIB0::3::8::INSTR')
instr3_8.query("*IDN?")
>>>VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.

这是我尝试从仪器读取的所有内容的结果。

(PyVISA 和 GPIB 使用 Keithley 源表 IDN 查询,所以我知道后端正在工作。该仪器是 bio-rad HL 5200,如果对任何人都有用,我发现没有手册,几乎没有在线参考。)

这是读取磁铁位置的 labview block diagram 图像。我已经能够通过使用 pyvisa 编写来更改位置,但读取仍然会超时,github 上的类似问题让我相信终止字符是错误的,但我还没有修复。

问题归结为 PyVISA 和 NI MAX 在从仪器读取时都无法识别终止符。在用 .read_termination 尝试了所有可能的终止符后,我发现一个有效的终止符终于可以从我的霍尔探测器中读取了。

非常古老的 GPIB 仪器通常具有不完整或非标准的 GPIB 实现。例如,它们可能缺乏对 *IDN? 的支持,或者只有一个硬编码的命令终止字符。

其中一些旧仪器还使用地址 +1 作为 'printer' 地址。因此仪器会保留它设置的地址,但也会保留下一个地址。这可能会导致严重混淆,特别是如果同一网络上有更多(旧)仪器,因此最好不要使用后续地址,而是使用 1、3、5、7。

此外,即使只是过于频繁地轮询状态字节也会使真正的旧仪器的处理能力过载,更不用说读取答案缓冲区了。