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

2024-05-16 07:24:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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协议下编程此类工具时,操作之间的延迟是否正常?如果没有,通常的方法是什么?或者有没有类似事件的机制?如果是,如何确定延迟时间?在


Tags: 协议gettime编程scpisleepquerywrite
1条回答
网友
1楼 · 发布于 2024-05-16 07:24:08

实际上,这是编程SCPI工具时的常见问题。实际上,SCPI提供了许多同步方法,参见IEEE-488.2.87第12节:设备/控制器同步技术。并且here是对良好的SCPI编程实践的总结,尽管它是一种专有工具,但有些技巧适用于所有SCPI设备。在

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

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

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

就这样。在

相关问题 更多 >