我正在使用PyVisa/GPIB控制一个测试系统。该系统由两个独立的测试人员(A和B)和一台膝上型计算机组成。笔记本电脑被动地监听来自测试器A的GPIB消息,当接收到膝上型计算机触发测试器B时。
我使用以下代码被动地侦听测试器A中的事件:
rm = visa.ResourceManager()
con = "GPIB0::3"
tester_A = rm.get_instrument(con, timeout=5000)
while True:
event = None
try:
event = tester_A.read_raw()
except VisaIOError:
logger.warning("Timeout expired.")
if event != None:
# Do something有没有更好的方法来倾听和回应测试者A的事件?是否有更好的方法通过GPIB控制这个系统?
发布于 2016-01-07 13:24:20
你描述的方法会起作用,但正如你所经历的,如果你不太确定仪器什么时候会做出反应,那就不太理想了。解决方案在于使用GPIB的服务请求(SRQ)功能。
简而言之,GPIB连接还提供了各种状态寄存器,这些寄存器允许您快速检查仪器是否打开、是否发生错误等(美丽的画面)。可以设置此寄存器中的某些位,以便它们在特定事件之后打开或关闭,例如,当操作完成时。这意味着,您告诉仪器执行一系列您怀疑将需要一段时间的命令,然后在状态寄存器中翻转一点以指示它已经完成。
在您的软件中,您可以做许多事情来利用这一点:
viWaitOnEvent函数,它允许您等到状态位指示操作完成--如果需要所有执行才停止执行,直到仪器进行测量时,这是一个很好的解决方案。https://stackoverflow.com/questions/33099913
复制相似问题