Python 使用visa与GPIB接口总是让我感觉到错误

Python 使用visa与GPIB接口总是让我感觉到错误,python,gpib,visa,Python,Gpib,Visa,我正在尝试用Python导入visa,并与GPIB接口以控制设备。 我使用的设备名称是“GPIB0::9::INSTR”,我认为这应该没有问题 我在2.7.3 Python Shell中运行了以下代码 >>> from visa import * >>> a = instrument("GPIB0::9", timeout = 20) >>> a.write("*IDN?") >>> print a.read() Trac

我正在尝试用Python导入
visa
,并与
GPIB
接口以控制设备。 我使用的设备名称是“GPIB0::9::INSTR”,我认为这应该没有问题

我在2.7.3 Python Shell中运行了以下代码

>>> from visa import *
>>> a = instrument("GPIB0::9", timeout = 20)
>>> a.write("*IDN?")
>>> print a.read()

Traceback (most recent call last):
  File "<pyshell#53>", line 1, in <module>
    print a.read()
  File "C:\Python27\lib\site-packages\pyvisa\visa.py", line 433, in read
    return self._strip_term_chars(self.read_raw())
  File "C:\Python27\lib\site-packages\pyvisa\visa.py", line 407, in read_raw
    chunk = vpp43.read(self.vi, self.chunk_size)
  File "C:\Python27\lib\site-packages\pyvisa\vpp43.py", line 840, in read
    visa_library().viRead(vi, buffer, count, byref(return_count))
  File "C:\Python27\lib\site-packages\pyvisa\vpp43.py", line 398, in check_status
    raise visa_exceptions.VisaIOError, status
VisaIOError: VI_ERROR_TMO: Timeout expired before operation completed.
来自visa导入的
>>*
>>>a=仪器(“GPIB0::9”,超时=20)
>>>写(“*IDN?”)
>>>打印a.read()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
打印a.read()
文件“C:\Python27\lib\site packages\pyvisa\visa.py”,第433行,已读
返回self.\u strip\u term\u chars(self.read\u raw())
文件“C:\Python27\lib\site packages\pyvisa\visa.py”,第407行,以只读形式
chunk=vpp43.read(self.vi,self.chunk\u大小)
文件“C:\Python27\lib\site packages\pyvisa\vpp43.py”,第840行,已读
visa_library().viRead(vi,缓冲区,计数,byref(返回_计数))
文件“C:\Python27\lib\site packages\pyvisa\vpp43.py”,第398行,处于检查状态
提出visa_例外情况。签证错误,状态
VisaIOError:VI_错误\u TMO:操作完成前超时。
以上是系统给我的错误。 实际上,在开始时,我将
超时设置为3,它显示了这个错误。但在我将值更改为20(如上所示)后,它仍然不起作用


有人能帮我吗?

对于每个特定的仪器,它都有自己的命令来控制它们。请参阅设备的用户手册。

对于每个特定的仪器,它都有自己的命令来控制它们。请参阅设备的用户手册。

存在可能导致超时的不同问题。 首先,您应该检查您的设备是否支持
*IDN?
查询。这是一个IEEE-488.2标准命令,所以很有可能支持它(如果不支持,请查看手册中的命令)

然后,您应该检查您的通信设置,特别是终止字符和EOI

如果您使用了错误的终止字符,visa将继续读取并最终超时

注意:如果您使用的是可查询命令(它是一个写和读的组合),则可以使用pyvisa的ask函数


存在可能导致超时的不同问题。 首先,您应该检查您的设备是否支持
*IDN?
查询。这是一个IEEE-488.2标准命令,所以很有可能支持它(如果不支持,请查看手册中的命令)

然后,您应该检查您的通信设置,特别是终止字符和EOI

如果您使用了错误的终止字符,visa将继续读取并最终超时

注意:如果您使用的是可查询命令(它是一个写和读的组合),则可以使用pyvisa的ask函数

这利用了PYVisa的模块及其与USB/GPIB设备之间的连接/写入/读取功能


这利用了PYVisa的模块及其与USB/GPIB设备之间的连接/写入/读取功能。

您是否尝试忽略
超时
或设置
超时=无
?根据@jadkik94的说法,在我将
超时
更改为
后,正如您所说,系统似乎在无限循环中运行。
超时
实际上是指每条指令允许的最长时间吗?我猜。这是医生在超时部分所说的。我不知道,这就是为什么它只是一个组件而不是一个答案。@jadkik94好的,谢谢你的评论。你是否尝试忽略
timeout
或设置
timeout=None
?根据@jadkik94的说法,在我将
超时
更改为
后,正如您所说,系统似乎在无限循环中运行。
超时
实际上是指每条指令允许的最长时间吗?我猜。这是医生在超时部分所说的。我不知道,这就是为什么它只是一个组件而不是一个答案。@jadkik94好的,谢谢你的评论。
import visa

# If you've got just one gpib card installed, you can ommit the 0.
# ASsuming the EOI line should be asserted and a termination character
# of '\n'
instrument = visa.instrument('GPIB::9', term_chars='\n', send_end=True)
# use ask to write the command and read back the response
print instrument.ask('*IDN?')
import visa

rm = visa.ResourceManager()
devices = rm.list_resources()
comm_channel = rm.open_resource(devices[0])     #assuming you only have 1 address to worry about

print(comm_channel.query("*IDN?"))