2015-10-13 92 views
0

我正在使用PyVisa/GPIB控制测试系统。该系统由两个独立的测试人员(A和B)和一台笔记本电脑组成。该笔记本电脑的被动侦听来自测试仪一GPIB消息,当收到笔记本触发测试B.收听GPIB事件

我使用下面的代码,以被动侦听来自测试仪事件:

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控制这个系统?

回答

2

您所描述的方法可行,但正如您所遇到的,如果您不确定仪器什么时候响应,这并不理想。解决方案在于使用GPIB的服务请求(SRQ)功能。

简而言之,GPIB连接还提供了各种状态寄存器,使您能够快速检查,例如仪器是否打开,是否发生错误等(pretty picture)。该寄存器中的某些位可以设置为在特定事件后打开或关闭,例如操作完成时。这意味着您告诉仪器执行您怀疑需要一段时间的一系列命令,然后在状态寄存器中翻转一下以指示它已完成。

在软件中,你可以做很多事情来利用这一点:

  • 请通过while循环中循环,直到状态位指示操作完成 - 这是非常粗糙的,我不会推荐它。
  • VISA具有viWaitOnEvent功能,允许您等待状态位指示操作完成 - 如果需要执行所有操作才能停止,直到仪器进行测量,那么这是一个很好的解决方案。
  • VISA还允许您创建状态位翻转时发生的事件 - 这是一个非常好的解决方案,因为它允许您编写事件处理程序来处理事件。