VISA协议下操作之间等待一段时间正常吗?

len*_*ehx 3 python visa

我正在使用pyvisa对符合 SCPI 协议的电源进行编程,如下所示:

power = get_power()
power.write('VOLTage 24.000')
time.sleep(1)       # **Must delay**
power.query(u'VOLTage?')
disconnect_power(power)
Run Code Online (Sandbox Code Playgroud)

一切都很好,但是如果我在“写入”和“查询”之间没有等待,就会出现超时错误,就像这样:

引发错误。VisaIOError(ret_value) pyvisa.errors.VisaIOError:VI_ERROR_TMO(-1073807339):操作完成之前超时已过期。

在VISA协议下对此类仪器进行编程时,操作之间存在延迟是否正常?如果没有,通常的方法是什么?或者有类似Event的机制吗?如果是,我如何确定延迟时间?

len*_*ehx 6

事实上,这是SCPI仪器编程时的常见问题。实际上,SCPI 提供了多种同步方法,请参见 IEEE-488.2.87 第 12 节:设备/控制器同步技术。这里良好 SCPI 编程实践的摘要,尽管它适用于专有仪器,但一些技巧适用于所有 SCPI 设备。

因此,关键问题是:在上一个“VOLTage 24.000”)完成之前,电源无法处理下一个“Program Message”(详细信息请参阅IEEE-488.2.87)。如果您在没有适当延迟的情况下强行执行此操作,则处理将被中断。

SCPI 提供同步命令“*OPC?” 等待所有命令完成之前。当每个命令完成时,它将在输出缓冲区中放入 1。所以我们可以只附加“*OPC?” 到前面的程序消息,然后等待读取完成,之后我们查询,如下所示:

power = get_power()
power.write('VOLTage 24.000;*OPC?')
power.read()
power.query(u'VOLTage?')
disconnect_power(power)
Run Code Online (Sandbox Code Playgroud)

就是这样了。