Python 使用GPIB上仪器的PyVISA无响应

Python 使用GPIB上仪器的PyVISA无响应,python,visa,gpib,pyvisa,Python,Visa,Gpib,Pyvisa,我正试图用PyVISA在GPIB上控制一台仪器(非常旧的霍尔测量设备)。我知道它与labview一起工作,在labview中我发现了哪些地址做什么,以及一些基本的命令,但没有乐趣。我被要求用Python3编写DAQ和分析代码 到目前为止,我已经能够确定地址: import visa rm = visa.ResourceManager() print(rm.list_resources()) >>>('ASRL1::INSTR', 'GPIB0::3::0::INSTR', 'G

我正试图用PyVISA在GPIB上控制一台仪器(非常旧的霍尔测量设备)。我知道它与labview一起工作,在labview中我发现了哪些地址做什么,以及一些基本的命令,但没有乐趣。我被要求用Python3编写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 source meter IDN查询,因此我知道后端正在工作。该仪器是bio-rad HL 5200,可能对任何人都有用,我没有找到任何手册,也几乎没有在线参考。)


这是一张显示磁铁位置的图像。此后,我可以通过使用pyvisa书写来更改位置,但读取仍然会超时,github上的类似问题使我相信终止字符是错误的,但我尚未修复。

问题归结为pyvisa和NI MAX在从仪器读取时都无法识别终止字符。在使用.read\u终端尝试了所有可能的终端字符后,我发现一个有效的字符最终可以从霍尔探头中读取。

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

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


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

您能将labview代码发布到它工作的地方吗,这样我们就可以看到差异了。据我所知,没有可访问的“代码”在LabView的方框图之外,但跟踪器拥有发送到仪器的所有内容。对于“代码”,我指的是LabView的方框图,对于我们LabView用户来说,这是实际的代码,您可以将其作为图像发布。很抱歉,我已经建立了一个链接,指向一个在LabView中工作但在python中不工作的简单接收/读取