PyVISA RS232 超时错误(安捷伦电源)

Posted

技术标签:

【中文标题】PyVISA RS232 超时错误(安捷伦电源)【英文标题】:PyVISA RS232 Timeout Error (Agilent Power Supply) 【发布时间】:2018-05-07 15:41:55 【问题描述】:

我正在使用 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:\Users\Sabri\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 710, in runfile
    execfile(filename, namespace)

File "C:\Users\Sabri\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.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:\Users\Sabri\Anaconda2\lib\site-packages\pyvisa\resources\messagebased.py", line 564, in query
    return self.read()

File "C:\Users\Sabri\Anaconda2\lib\site-packages\pyvisa\resources\messagebased.py", line 413, in read
    message = self._read_raw().decode(enco)

File "C:\Users\Sabri\Anaconda2\lib\site-packages\pyvisa\resources\messagebased.py", line 386, in _read_raw
    chunk, status = self.visalib.read(self.session, size)

File "C:\Users\Sabri\Anaconda2\lib\site-packages\pyvisa\ctwrapper\functions.py", line 1584, in read
    ret = library.viRead(session, buffer, count, byref(return_count))

File "C:\Users\Sabri\Anaconda2\lib\site-packages\pyvisa\ctwrapper\highlevel.py", line 188, in _return_handler
    raise errors.VisaIOError(ret_value)

VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.

我尝试将读写命令的终止字符指定为 \n,指定波特率,将超时更改为“无”,并将仪器声明为 inst = rm.open_resource('ASRL5::INSTR ') 而不是 inst = rm.open_resource(res[-1])。到目前为止没有任何效果。任何建议将不胜感激!

【问题讨论】:

【参考方案1】:

尝试使用 Keysight(原安捷伦)连接专家。

这包含在 IO 库套件中: https://www.keysight.com/main/software.jspx?cc=GB&lc=eng&ckey=2175637&nid=-33330.977662&id=2175637

安装后,您将能够添加仪器并检查电源状态。

是什么电源型号?

旁注:我遇到过 PC 识别串行 COM 端口但只有在我手动更新驱动程序后才能工作的情况。

【讨论】:

【参考方案2】:

我使用 Ruby 通过 RS232 端口控制 Agilent(keysight) 电源 e3631a。我相信我有类似的问题。症状是查询命令(如 *IDN?)没有回复,并且设备上会显示错误代码 410。问题是设备无法通过串口发送数据,因此无法清除缓冲区。解决方法是在 DCB 结构中您需要设置“DTR_CONTROL_ENABLE”。在我的例子中,dcb 的线路控制部分看起来像“0x00000011”。请注意,对于没有流控制的串行通信,通常不需要设置。 这个问题花了我两天时间,我希望它可以帮助其他人。

【讨论】:

只是为了说清楚。需要对控制PC上的串口而不是e3631上的串口进行配置(这是不可能的)。

以上是关于PyVISA RS232 超时错误(安捷伦电源)的主要内容,如果未能解决你的问题,请参考以下文章

《安富莱嵌入式周报》第296期:硬件电路实现SPI转以太网,单片机3D游戏图形引擎,Linux基金会年度报告,安捷伦直流电源原理图,KEIL C51更新9.61

安捷伦E4405B

PyVISA介绍

安捷伦推出2100生物分析仪手机应用程序——BioAnalyzer Buddy(生物分析仪好伙伴)

pyserial:如何正确接收来自电源的 rs232 答案

如何修复 rs232 串口超时?