2015-10-13 93 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還允許您創建狀態位翻轉時發生的事件 - 這是一個非常好的解決方案,因爲它允許您編寫事件處理程序來處理事件。