1

我正在尝试使用 PyVISA 在 GPIB 上控制仪器(非常旧的霍尔测量设备)。我知道它适用于labview,在那里我发现了哪些地址可以使用跟踪器执行什么操作以及一些基本命令,但没有任何乐趣。我被要求在 python 3 中编写数据采集和分析代码。

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

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框图的图像。从那以后,我可以通过使用 pyvisa 编写来改变位置,但阅读仍然会超时,github 上的类似问题让我相信终止字符是错误的,但我还没有修复。

4

2 回答 2

1

问题归结为 PyVISA 和 NI MAX 在从仪器读取时无法识别终止字符。在使用 .read_termination 尝试了所有可能的终止字符后,我发现一个可以工作的字符最终可以从我的大厅探头中读取。

于 2017-11-22T15:51:37.937 回答
0

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

其中一些旧仪器还使用地址 +1 作为“打印机”地址。所以仪器会保留它设置的地址,但也会保留下一个地址。如果同一网络上有更多(旧)仪器,这可能会造成严重混乱,因此最好不要使用后续地址,而是使用 1、3、5、7。

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

于 2017-12-02T23:56:02.023 回答