我正在使用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控制这个系统?
答案 0 :(得分:2)
您描述的方法可行,但正如您所经历的那样,如果您不太确定仪器何时会响应,那么这种方法并不理想。解决方案在于使用GPIB的服务请求(SRQ)功能。
简而言之,GPIB连接还提供了各种状态寄存器,可让您快速检查仪器是否打开,是否发生错误等(pretty picture)。可以设置该寄存器中的某些位,以便在特定事件之后打开或关闭它们,例如,当操作完成时。这意味着您告诉仪器执行一系列您怀疑需要一段时间的命令,然后在状态寄存器中翻转一下以指示它已完成。
在您的软件中,您可以做很多事情来使用它:
viWaitOnEvent
功能,允许您等到状态位指示操作完成 - 如果您需要所有执行停止直到仪器进行测量,这是一个很好的解决方案。