2

我正在使用 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)

4

1 回答 1

4

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

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

于 2017-06-08T15:35:38.883 回答