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

2024-04-29 13:47:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是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:\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.

我试过(没有用): -将插座更换为仪表 -使用timout长得多(inst.timeout=10000) -正在添加结束项(已尝试\n和\r):inst.read\u termination='\n'

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

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

提前谢谢你

PS:我知道如何捕捉错误(使用try-except),但我宁愿得到一个Ok的答案,而不是KO的答案


Tags: inpyreadlocallineprusersappdata
1条回答
网友
1楼 · 发布于 2024-04-29 13:47:17

尝试按获取资源列表

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->;正方形

因此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

相关问题 更多 >