PyVISA SerialInstrument需要硬重置才能在失败后连接

时间:2017-06-08 14:30:09

标签: python pyvisa

我正在使用Keysight波形发生器和pyVisa,我注意到如果我的代码没有成功完成并结束,我需要执行设备的硬重置以再次尝试我的代码。

我尝试在__del__方法下重置设备,以便设备处于已知状态,但似乎不起作用。我也尝试过使用pyvisa.resources.SerialInstrument.clear()。有没有其他人有这样的问题,你是如何解决的?

主机运行Windows 7. PyVISA版本为1.8。程序失败后,我取消python脚本,我会尝试发送一个简单的* IDN? SCPI命令到设备,我收到错误:

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

如果我尝试在设备上调用pyvisa.resources.SerialInstrument.clear(),我会收到错误 pyvisa.errors.VisaIOError: VI_ERROR_INV_SETUP (-1073807302): Unable to start operation because setup is invalid (usually due to attributes being set to an inconsistent state)

1 个答案:

答案 0 :(得分:2)

问题是该设备仍然被另一个实例连接。原因是因为运行visa.ResourceManager()。list_resources()列出了设备两次,一次作为USB设备,也作为ASRL。

解决方案是致电visa.ResourceManager().list_resources(query='USB?*')以确保该仪器仅在我的结果中列出一次。 (或者,我可以在设备设置中禁用USB或GPIB。)然后在打开资源后立即调用device.clear()以确保缓冲区为空,因为在错误处可能存在未读数据。这解决了这个问题。