VI_ERROR_TMO 当计算机对函数发生器进行查询时
VI_ERROR_TMO when a computer does a query to a function generator
我正在使用 peaktech 4046:160MHz Function/arbitrary 波形发生器。我在 pyton 上开发,我正在使用 pyvisa 库。
连接建立良好,生成器应用查询。但是它会生成以下错误并停止程序(错误后它不会执行任何操作)。
这是代码:
import pyvisa
rm = pyvisa.ResourceManager()
inst = rm.open_resource('TCPIP0::130.79.192.123::5025::SOCKET')
print(inst.session)
print(inst.io_protocol)
inst.query("source1:function squ")
这是我终端中的内容:
2
IOProtocol.normal
Traceback (most recent call last):
File "c:\Users\Labo préclinique\Desktop\ProjetPython\importation de librairies\Forum.py", line 7, in <module>
inst.query("source1:function squ ")
File "C:\Users\Labo préclinique\AppData\Local\Programs\Python\Python39\lib\site-packages\pyvisa\resources\messagebased.py", line 644, in query
return self.read()
File "C:\Users\Labo préclinique\AppData\Local\Programs\Python\Python39\lib\site-packages\pyvisa\resources\messagebased.py", line 486, in read
message = self._read_raw().decode(enco)
File "C:\Users\Labo préclinique\AppData\Local\Programs\Python\Python39\lib\site-packages\pyvisa\resources\messagebased.py", line 442, in _read_raw
chunk, status = self.visalib.read(self.session, size)
File "C:\Users\Labo préclinique\AppData\Local\Programs\Python\Python39\lib\site-packages\pyvisa\ctwrapper\functions.py", line 2337, in read
ret = library.viRead(session, buffer, count, byref(return_count))
File "C:\Users\Labo préclinique\AppData\Local\Programs\Python\Python39\lib\site-packages\pyvisa\ctwrapper\highlevel.py", line 222, in _return_handler
return self.handle_return_value(session, ret_value) # type: ignore
File "C:\Users\Labo préclinique\AppData\Local\Programs\Python\Python39\lib\site-packages\pyvisa\highlevel.py", line 251, in handle_return_value
raise errors.VisaIOError(rv)
pyvisa.errors.VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.
我试过了(没用):
- 将 SOCKET 更改为 INSTR
-使用超时时间更长(inst.timeout = 10000)
- 添加结束词(尝试过 \n 和 \r):inst.read_termination = '\n'
所以我不知道该怎么办了...我需要给出不止一个命令,所以程序不能停得那么快。我怀疑我的函数发生器没有发回任何东西,但我不知道如何确保是这种情况。
我想知道的是:为什么在连接正常并且在设备上执行请求时会出现超时错误?如何以正确的方式进行请求?
提前致谢!!
PS : 我知道如何捕获错误(使用 try except),但我宁愿得到一个 Ok 的答案,也不愿得到一个 KO 的答案。
尝试通过
获取资源列表
rm.list_resources()
并检查您的资源 TCPIP0::130.79.192.123::5025::SOCKET
在其中。
然后检查对资源的标准请求来自tutorial:
inst.query("*IDN?")
query
是写操作的缩写形式,先发送一条消息,然后再读。所以你可以通过两个动作来指定错误(读取或写入错误?):
inst.write('"source1:function squ"')
print(inst.read())
请检查查询 source1:function squ
的名称,因为我在 documentation 中没有看到它。也许您应该使用 "source1:am:interanal:function square
(文档第 57 页)或更改 squ -> square?
因此 documentation,您可以尝试通过
为您的请求设置无限超时
del inst.timeout
Also,您可以添加 read_termination
/write_termination
选项来指定您将在
之前完成 reading/writing 的时间
inst = rm.open_resource('TCPIP0::130.79.192.123::5025::SOCKET', read_termination='\r')
最后的机会是更改选项 query_delay and send_end。
我正在使用 peaktech 4046:160MHz Function/arbitrary 波形发生器。我在 pyton 上开发,我正在使用 pyvisa 库。 连接建立良好,生成器应用查询。但是它会生成以下错误并停止程序(错误后它不会执行任何操作)。
这是代码:
import pyvisa
rm = pyvisa.ResourceManager()
inst = rm.open_resource('TCPIP0::130.79.192.123::5025::SOCKET')
print(inst.session)
print(inst.io_protocol)
inst.query("source1:function squ")
这是我终端中的内容:
2
IOProtocol.normal
Traceback (most recent call last):
File "c:\Users\Labo préclinique\Desktop\ProjetPython\importation de librairies\Forum.py", line 7, in <module>
inst.query("source1:function squ ")
File "C:\Users\Labo préclinique\AppData\Local\Programs\Python\Python39\lib\site-packages\pyvisa\resources\messagebased.py", line 644, in query
return self.read()
File "C:\Users\Labo préclinique\AppData\Local\Programs\Python\Python39\lib\site-packages\pyvisa\resources\messagebased.py", line 486, in read
message = self._read_raw().decode(enco)
File "C:\Users\Labo préclinique\AppData\Local\Programs\Python\Python39\lib\site-packages\pyvisa\resources\messagebased.py", line 442, in _read_raw
chunk, status = self.visalib.read(self.session, size)
File "C:\Users\Labo préclinique\AppData\Local\Programs\Python\Python39\lib\site-packages\pyvisa\ctwrapper\functions.py", line 2337, in read
ret = library.viRead(session, buffer, count, byref(return_count))
File "C:\Users\Labo préclinique\AppData\Local\Programs\Python\Python39\lib\site-packages\pyvisa\ctwrapper\highlevel.py", line 222, in _return_handler
return self.handle_return_value(session, ret_value) # type: ignore
File "C:\Users\Labo préclinique\AppData\Local\Programs\Python\Python39\lib\site-packages\pyvisa\highlevel.py", line 251, in handle_return_value
raise errors.VisaIOError(rv)
pyvisa.errors.VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.
我试过了(没用): - 将 SOCKET 更改为 INSTR -使用超时时间更长(inst.timeout = 10000) - 添加结束词(尝试过 \n 和 \r):inst.read_termination = '\n'
所以我不知道该怎么办了...我需要给出不止一个命令,所以程序不能停得那么快。我怀疑我的函数发生器没有发回任何东西,但我不知道如何确保是这种情况。
我想知道的是:为什么在连接正常并且在设备上执行请求时会出现超时错误?如何以正确的方式进行请求?
提前致谢!!
PS : 我知道如何捕获错误(使用 try except),但我宁愿得到一个 Ok 的答案,也不愿得到一个 KO 的答案。
尝试通过
获取资源列表rm.list_resources()
并检查您的资源 TCPIP0::130.79.192.123::5025::SOCKET
在其中。
然后检查对资源的标准请求来自tutorial:
inst.query("*IDN?")
query
是写操作的缩写形式,先发送一条消息,然后再读。所以你可以通过两个动作来指定错误(读取或写入错误?):
inst.write('"source1:function squ"')
print(inst.read())
请检查查询 source1:function squ
的名称,因为我在 documentation 中没有看到它。也许您应该使用 "source1:am:interanal:function square
(文档第 57 页)或更改 squ -> square?
因此 documentation,您可以尝试通过
为您的请求设置无限超时del inst.timeout
Also,您可以添加 read_termination
/write_termination
选项来指定您将在
inst = rm.open_resource('TCPIP0::130.79.192.123::5025::SOCKET', read_termination='\r')
最后的机会是更改选项 query_delay and send_end。