根据VISA协议,在操作之间等待一段时间是正常的吗?



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

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

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

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

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

实际上,这是SCPI仪器编程时的一个常见问题。实际上,SCPI提供了许多同步方法,参见IEEE-488.2.87第12节:设备/控制器同步技术。这里是一个好的SCPI编程实践的总结,虽然它是针对专有仪器,但一些技巧适用于所有SCPI设备。

所以关键问题是:电源不能处理下一个'程序消息'(详见IEEE-488.2.87)之前,上一个('电压24.000')完成。如果在没有适当延迟的情况下强制执行,则处理将被中断。

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指示仪器等待电压设置完成,然后再读取查询。

最新更新