VI_ERROR_TMO (-1073807339):操作完成前超时
VI_ERROR_TMO (-1073807339): Timeout expired before operation completed
我尝试将我的 Rohde&Schwarz 功率分析仪 HMC8015 ('ASRL3::INSTR') 连接到我的计算机,并读取我的设备可以使用 python VISA 显示的任何数据。我的代码行有很多问题,允许读取我的设备数据。
我的代码是:
import visa
rm = visa.ResourceManager()
name = rm.list_resources()
#using with allows to close explicitly the resource at the end of the script
with rm.open_resource('ASRL3::INSTR') as Power_Analyser:
Power_Analyser.values_format.is_binary = True
Power_Analyser.values_format.datatype = 'B'
Power_Analyser.values_format.is_big_endian = False
Power_Analyser.values_format.container = bytearray
Power_Analyser.timeout = 25000 #2,5 seconds
Power_Analyser.write_termination = '\n'
Data = Power_Analyser.query_ascii_values('P?',datatype='s')[0]
print(Data)
#write the Data to a file on my PC
PCfilePath = 'C:\Users\ApCha\Documents\Python Scripts\a.txt'
newFile = open(PCfilePath, "wb")
newFile.write(Data)
newFile.close()
它告诉我:VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.
不管超时设置多大。我猜问题出在语法中
Power_Analyser.query_ascii_values('P?',datatype='s')[0]
但我不知道什么是正确的语法。
但似乎没有任何效果,也没有任何关于 python VISA 的明确解释,我对此没有任何经验。有谁知道如何解决这个问题?
当(新)VISA 仪器出现 trouble-shooting 连接问题时,我通常会执行以下操作:
- 确保连接正确。比如,Windows,显示在设备管理器中。在 NI-MAX 中 — 如果安装了 National Instrument 的 VISA 框架。
- 确保其 VISA 地址(或有根据的猜测)显示在 VISA 资源管理器返回的列表中:
rm.list_resources()
在您的代码中。
- 使用给定的显式 VISA 地址打开资源:如代码中的
rm.open_resource('ASRL3::INSTR')
。
- 保留默认配置的资源。
- 发送最基本的命令,如
*IDN?
,如果API是基于SCPI。
只有在失败时我才会配置特定的通信设置,例如 .write_termination
、.read_termination
和 .timeout
。 100 毫秒的 time-out 通常就可以了。稍等片刻,以确保万无一失。
在您的代码中,您从一开始就将 .values_format.is_binary
设置为 True
。但是你 .query_ascii_values
。如果 not 失败,我会感到非常惊讶。显然,每种乐器都是不同的。虽然快速浏览了手册,但我没有看到任何迹象表明您的仪器确实如此。
我的建议:从默认通信设置开始,尝试获得对 *IDN?
命令的响应,然后从那里获取。
我尝试将我的 Rohde&Schwarz 功率分析仪 HMC8015 ('ASRL3::INSTR') 连接到我的计算机,并读取我的设备可以使用 python VISA 显示的任何数据。我的代码行有很多问题,允许读取我的设备数据。
我的代码是:
import visa
rm = visa.ResourceManager()
name = rm.list_resources()
#using with allows to close explicitly the resource at the end of the script
with rm.open_resource('ASRL3::INSTR') as Power_Analyser:
Power_Analyser.values_format.is_binary = True
Power_Analyser.values_format.datatype = 'B'
Power_Analyser.values_format.is_big_endian = False
Power_Analyser.values_format.container = bytearray
Power_Analyser.timeout = 25000 #2,5 seconds
Power_Analyser.write_termination = '\n'
Data = Power_Analyser.query_ascii_values('P?',datatype='s')[0]
print(Data)
#write the Data to a file on my PC
PCfilePath = 'C:\Users\ApCha\Documents\Python Scripts\a.txt'
newFile = open(PCfilePath, "wb")
newFile.write(Data)
newFile.close()
它告诉我:VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.
不管超时设置多大。我猜问题出在语法中
Power_Analyser.query_ascii_values('P?',datatype='s')[0]
但我不知道什么是正确的语法。
但似乎没有任何效果,也没有任何关于 python VISA 的明确解释,我对此没有任何经验。有谁知道如何解决这个问题?
当(新)VISA 仪器出现 trouble-shooting 连接问题时,我通常会执行以下操作:
- 确保连接正确。比如,Windows,显示在设备管理器中。在 NI-MAX 中 — 如果安装了 National Instrument 的 VISA 框架。
- 确保其 VISA 地址(或有根据的猜测)显示在 VISA 资源管理器返回的列表中:
rm.list_resources()
在您的代码中。 - 使用给定的显式 VISA 地址打开资源:如代码中的
rm.open_resource('ASRL3::INSTR')
。 - 保留默认配置的资源。
- 发送最基本的命令,如
*IDN?
,如果API是基于SCPI。
只有在失败时我才会配置特定的通信设置,例如 .write_termination
、.read_termination
和 .timeout
。 100 毫秒的 time-out 通常就可以了。稍等片刻,以确保万无一失。
在您的代码中,您从一开始就将 .values_format.is_binary
设置为 True
。但是你 .query_ascii_values
。如果 not 失败,我会感到非常惊讶。显然,每种乐器都是不同的。虽然快速浏览了手册,但我没有看到任何迹象表明您的仪器确实如此。
我的建议:从默认通信设置开始,尝试获得对 *IDN?
命令的响应,然后从那里获取。