VI_ERROR_TMO当计算机对函数生成器进行查询时



我使用的是peaktech 4046:160MHz函数/任意波形发生器。我在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:UsersLabo précliniqueDesktopProjetPythonimportation de librairiesForum.py", line 7, in <module>
inst.query("source1:function squ ")
File "C:UsersLabo précliniqueAppDataLocalProgramsPythonPython39libsite-packagespyvisaresourcesmessagebased.py", line 644, in query
return self.read()
File "C:UsersLabo précliniqueAppDataLocalProgramsPythonPython39libsite-packagespyvisaresourcesmessagebased.py", line 486, in read
message = self._read_raw().decode(enco)
File "C:UsersLabo précliniqueAppDataLocalProgramsPythonPython39libsite-packagespyvisaresourcesmessagebased.py", line 442, in _read_raw
chunk, status = self.visalib.read(self.session, size)
File "C:UsersLabo précliniqueAppDataLocalProgramsPythonPython39libsite-packagespyvisactwrapperfunctions.py", line 2337, in read
ret = library.viRead(session, buffer, count, byref(return_count))
File "C:UsersLabo précliniqueAppDataLocalProgramsPythonPython39libsite-packagespyvisactwrapperhighlevel.py", line 222, in _return_handler
return self.handle_return_value(session, ret_value)  # type: ignore
File "C:UsersLabo précliniqueAppDataLocalProgramsPythonPython39libsite-packagespyvisahighlevel.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-使用timout longeur(inst.timeout=10000(-添加结束项(已尝试和\r(,其中:inst.read_termination='n'

所以我不知道该怎么办了。。。我需要给出多个命令,所以程序不能停得太快。我怀疑我的函数生成器没有发送任何信息,但我不知道如何确保情况确实如此。

我想知道的是:如果连接建立良好并且请求在设备上执行,为什么会出现超时错误?如何以适当的方式完成请求

提前感谢!!

附言:我知道如何抓住错误(除了尝试(,但我宁愿有一个Ok的答案,而不是KO的答案。

尝试通过获取资源列表

rm.list_resources()

并检查其中的资源TCPIP0::130.79.192.123::5025::SOCKET

然后检查教程中对资源的标准请求:

inst.query("*IDN?")

query是写操作的缩写,用于发送消息,然后是读操作。因此,您可以通过两个操作来指定错误(读取或写入错误?(:

inst.write('"source1:function squ"')
print(inst.read())

请检查查询source1:function squ的名称,因为我在文档中没有看到它。也许您应该使用"source1:am:interanal:function square(文档的第57页(或更改squ->广场

相应的文档,您可以尝试通过为您的请求设置无限超时

del inst.timeout

此外,您可以添加read_termination/write_termination选项来指定何时完成读写

inst = rm.open_resource('TCPIP0::130.79.192.123::5025::SOCKET', read_termination='r')

最后一个机会是更改query_delay和send_end选项。

最新更新