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

Is it normal to wait for some time between operations under the VISA protocol?

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

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

一切正常,但是如果我没有在'write'和'query'之间等待,那么就会出现超时错误,就像这样:

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

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

事实上,这是编程时的常见问题 SCPI instrument. Actually, SCPI provides many methods for synchronization, see IEEE-488.2.87 section 12: Device/Controller Synchronization Techniques. And here 是对良好 SCPI 编程实践的总结,虽然它是针对专有仪器的,但一些技巧适用于所有 SCPI 设备。

所以关键问题是:电源无法在上一个('VOLTage 24.000')完成之前处理下一个'Program Message'(详见IEEE-488.2.87)。如果没有适当延迟就强制执行,处理将被中断。

SCPI 提供了一个同步命令,“*OPC?”在它完成之前等待所有命令。当每个命令完成时,它将在输出缓冲区中放入 1。所以我们可以只附加'*OPC?'到之前的Program Message,然后等待read完成,之后我们查询,像这样:

power = get_power()
power.write('VOLTage 24.000;*OPC?')
power.read()
power.query(u'VOLTage?')
disconnect_power(power)

就是这样。

可以使用*WAI 命令代替*OPC 吗?查询。

power = get_power()

voltage_read = power.query('VOLTage 24.000;*WAI;u'VOLTage?')

disconnect_power(power)

*WAI 指示仪器等待设置电压完成,然后再回读查询。