我正在使用 PyVISA 打开与安捷伦电源的通信,但在查询仪器 ID 时不断收到超时错误。
我的代码是:
import visa
rm = visa.ResourceManager()
res = rm.list_resources()
print("Find following resources: ")
print(res)
print("Opening " + res[-1])
inst = rm.open_resource(res[-1])
inst.timeout = 100000 # timeout 100s
inst.write_termination = 'n'
inst.read_termination = 'n'
print(inst.query('*IDN?'))
我得到的输出是:
Find following resources:
(u'ASRL5::INSTR',)
Opening ASRL5::INSTR
Traceback (most recent call last):
File "<ipython-input-10-66ffef23c46a>", line 1, in <module>
runfile('C:/Users/Sabri/Anaconda2/untitled0.py', wdir='C:/Users/Sabri /Anaconda2')
File "C:UsersSabriAnaconda2libsite-packagesspyderutilssitesitecustomize.py", line 710, in runfile
execfile(filename, namespace)
File "C:UsersSabriAnaconda2libsite-packagesspyderutilssitesitecustomize.py", line 86, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)
File "C:/Users/Sabri/Anaconda2/untitled0.py", line 20, in <module>
print(inst.query('*IDN?'))
File "C:UsersSabriAnaconda2libsite-packagespyvisaresourcesmessagebased.py", line 564, in query
return self.read()
File "C:UsersSabriAnaconda2libsite-packagespyvisaresourcesmessagebased.py", line 413, in read
message = self._read_raw().decode(enco)
File "C:UsersSabriAnaconda2libsite-packagespyvisaresourcesmessagebased.py", line 386, in _read_raw
chunk, status = self.visalib.read(self.session, size)
File "C:UsersSabriAnaconda2libsite-packagespyvisactwrapperfunctions.py", line 1584, in read
ret = library.viRead(session, buffer, count, byref(return_count))
File "C:UsersSabriAnaconda2libsite-packagespyvisactwrapperhighlevel.py", line 188, in _return_handler
raise errors.VisaIOError(ret_value)
VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.
我尝试将读取和写入命令的终止字符指定为 ,指定波特率,将超时更改为"无",并将仪器声明为 inst = rm.open_resource('ASRL5::INSTR'( 而不是 inst = rm.open_resource(res[-1](。到目前为止,没有任何效果。任何建议将不胜感激!
尝试使用是德科技(正式名称为安捷伦(连接专家。
这包含在 IO 库套件中: https://www.keysight.com/main/software.jspx?cc=GB&lc=eng&ckey=2175637&nid=-33330.977662&id=2175637
安装后,您将能够添加仪器并检查电源的状态。
这是哪种电源型号?
旁注:我遇到过PC识别串行COM端口的情况,但只有在我手动更新驱动程序后才能工作。
我使用 Ruby 通过 RS232 端口控制安捷伦(是德科技(电源 e3631a。我相信我也有类似的问题。症状是查询命令(如 *IDN?(没有回复,并且设备上会显示错误代码 410。 问题是设备无法通过串行端口发送数据,因此无法清除缓冲区。修复是在DCB结构中需要设置"DTR_CONTROL_ENABLE"。在我的情况下,dcb 的线路控制部分看起来像"0x00000011"。请注意,对于没有流量控制的串行通信,通常不需要设置。 这个问题花了我两天时间,我希望它能帮助其他人。