我正在使用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)
。
答案 0 :(得分:2)
问题是该设备仍然被另一个实例连接。原因是因为运行visa.ResourceManager()。list_resources()列出了设备两次,一次作为USB设备,也作为ASRL。
解决方案是致电visa.ResourceManager().list_resources(query='USB?*')
以确保该仪器仅在我的结果中列出一次。 (或者,我可以在设备设置中禁用USB或GPIB。)然后在打开资源后立即调用device.clear()
以确保缓冲区为空,因为在错误处可能存在未读数据。这解决了这个问题。