2

我正在使用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): 操作完成前超时。

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

4

2 回答 2

3

事实上,这是对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)

就是这样了。

于 2015-07-03T10:48:44.863 回答
0

*WAI 命令可以用来代替 *OPC? 询问。

power = get_power()

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

disconnect_power(power)

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

于 2021-07-20T18:39:38.533 回答