我正在尝试在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.
以上是系统给我的错误。
实际上在开始时,我将Timeout
设置为3,它显示了这个错误。但是,如上所示,在将值更改为20后,它仍然无效。
有人能帮助我吗?
答案 0 :(得分:0)
有不同的问题可能会导致超时。
首先,您应该检查您的设备是否支持*IDN?
查询。它是一个IEEE-488.2标准命令,因此支持的机会很高(如果没有检查您的手册中的命令)。
然后你应该检查你的通信设置,特别是终止字符和EOI。
如果您使用错误的终止字符,签证将继续阅读并最终超时。
注意:如果您使用的是可查询命令(它是一个组合的写入和读取),您可以使用pyvisa的ask函数。
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?')
答案 1 :(得分:0)
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?"))
这利用了PYVisa的模块以及它与USB / GPIB设备之间的连接/写入/读取所提供的许多功能。
答案 2 :(得分:-1)
对于每一个特定的工具,它都有自己的命令来控制它们。请参阅设备的用户手册。