【關鍵詞】VISA標準,儀器通信,驅動程序,命令參數,屬性
【摘要】本文以LabVIEW的VISA程序模塊為例,介紹基于VISA標準的儀器驅動器設計方法。包括VISA編程語法、子VI模塊、基于消息的通信編程、VISA屬性和事件等內容。
1 VISA標準
儀器驅動器(Instrument Driver)是指使用標準化的I/O函數與一臺(或幾臺)儀器設備進行通信的一套(一組)程序,主要用于對儀器進行程控操作,如設置參數與工作方式、讀/寫測量數據、觸發及讀回儀器工作狀態等。在LabVIEW編程語言中,儀器驅動器采用VISA標準編程,從而可避開許多復雜而低級的儀器程控命令。
VISA是虛擬儀器體系結構(Virtual Instrument Software Architecture)的簡稱 。1993年9月,泰克公司、惠普公司、美國國家儀器公司等35家最大的儀器儀表公司成立了VXIplug&lay系統聯盟,其目的是研制出一種新的標準,確保不同廠商、不同接口標準的儀器能相互兼容、可通訊和數據交換,并且提供給用戶方便易用的驅動程序。為此,聯盟1996年2月推出了VISA標準,它的特點有:1)面向對象編程;2)VISA是當前所有儀器接口類型功能函數的超集,且十分簡潔。GPIB有60多個函數,VXI有130多個函數,惠普的SICL有100多個函數。而VISA具有上述所有接口函數的功能 ,但只有90多個函數操作;3)VISA作為標準函數,與儀器的I/O接口類型無關;4)VISA程序與操作系統與編程語言無關,只需要很小的修改,就可以從一個平臺移植到另一個平臺。
在VISA標準下的儀器驅動器的內部模型,如同一個金字塔結構,如圖1—1所示。在金字塔的最底層,是VISA資源管理器,它負責管理與控制不同種類的儀器,進行標準化處理;在金字塔的上面,VISA定義了3個級別的儀器驅動資源:I/O級、儀器級和用戶級。每上一個級別的程序可以調用其下面級別所有程序的功能;在金字塔的最頂端,是人機接口應用程序。它利用VISA標準的開放性、兼容性和可移植性,將不同的儀器組合集成起來,構成分布式集成控制系統。
VISA標準的推出,統一了儀器工業的軟件接口標準,使得儀器驅動程序兼容性強 ,并且可適應未來軟硬件的發展需要。目前,VISA正在進行IEEE1226.5的標準化工作 。
LabVIEW的VISA函數位于Instrument I/O>VISA模板中,如圖1—2所示。VISA編程時使用VISA session參數,VISA session是每次程序操作過程的唯一邏輯標識符,它標識了與之通訊的設備名稱以及進行I/O操作所必需的配置信息。VISA session的缺省類值是Instr。如果需要,可以選擇如下值:GPIB Instr、Seri al Instr以及VXI、GPIB-VXIInstr。另一個重要的參數是Resorce Name,包含I/O接口類型以及設備地址等信息。其編程語法如表1—1所示。關鍵詞GPIB用于同GPIB接口儀器建立通訊,關鍵詞VXI通過內置式或MXI總線控制器同VXI儀器建立通訊,關鍵詞GPIB-VXI用于GPIB-VXI控制器,關鍵詞SERIAL用于異步串行設備通訊。
VISA標準具有90多個與儀器物理接口類型無關的I/O操作函數,可分成下列的命令類型:Session的打開與關閉、VISA屬性、基于字符信息操作的儀器控制與觸發命令 、基于寄存器操作的儀器的程控命令、采用中斷子程序調用方法的事件處理命令和采用軟件查詢方法的事件處理命令等。下面介紹若干常用的VISA函數:
(1)VISA Open:打開一個指定設備(resource name)的session,返回可被用于調用的session標識符和設備的其它操作。
(2)VISA Close:關閉一個指定設備的session或事件event。
(3)VISA Write:將數據同步或異步地寫入基于字符操作的儀器。
(4)VISA Read:從基于字符操作的儀器中同步或異步地讀出數據。
VISA程序的基本流程圖如圖1—3所示。
2 基于消息(message-based)的通信
基于消息(message-based)的通信用于向儀器讀/寫字符型數據。如圖2—1所示,VISA程序向地址設定為1的GPIB設備讀/寫數據。在寫入緩沖區中使用“*IDN?”命令參數,它返回儀器的標識符,該命令適用于大多數儀器(如TDS320/420數字存儲示波器等)。byte count為讀出字符的字節數(100個字節)。
LabVIEW的流程圖如圖2—2所示,VISA Open根據Resource name和VISA session與儀器建立通訊。本VISA Write模塊把write buffer中的字符串寫入設備,而dup VISA session向下傳送相同的session值。return count返回實際傳送的字節數,VISA Read讀取指定設備中的字符數據。(在UNIX工作平臺上,數據為同步寫入/讀出;在其他工作平臺上,數據為異步寫入/讀出。)VISA Close關閉由VISA session指定的設備的通訊過程,釋放相應資源。error out字串包含出錯信息。
該程序運行后,應在read buffer指示框中顯示儀器的標識符。如果無數據返回 ,驅動程序將接收到一個VISA出錯信息,表示你的儀器不能讀命令參數“*IDN?”。(查閱儀器使用手冊,可找到更多的儀器操作命令。)
如圖2—3所示的VI例子可對儀器進行多次讀/寫操作。將所有組態命令寫在一個字串中,然后連接至Write.vi模塊的wirte buffer輸入端。這樣就可避免每完成一次操作內容都要中斷程序的運行,然后才能進行下次的讀/寫操作。
如果在一次操作中只需要執行一項內容,可考慮設計選擇項,如使用Case結構或Select控件等,但通常使用Pick Line&Appent函數更方便。Pick Line&Append函數可與Format into String函數配合使用以建立命令串,如圖2—4所示。
Pick line&Append函數的作用是從multi-linestring(多行字串)選擇由lineindex指定的一行,并擴充到string中。Formatinto String函數的作用是將自變量(arguments)組合并轉換為另一字串形式resul ting string,其格式由formatstring確定。
3 屬性(VISA Properties)
具有VISA屬性的儀器操作將允許寄存器訪問和基于消息的通信。VISA Resource具有各種帶數值的屬性(attributes)。在程序中,這些屬性可以被讀取或進行設置 。VISA屬性節點(property node)如下:
VISA屬性節點包括VISA class和一些屬性(at-tributes)。設置VISA class時,可以將一個VISA Session連接至reference端子,也可以用鼠標點擊圖標并彈出一菜單,然后從select VISA Class子菜單中選擇Instr。當在流程圖中第一次放置屬性節點時,它只有一個屬性端子。如果需要增加屬性端子,可以使用菜單中的Add element操作。各屬性端子的屬性定義由Selet Item選擇,Selet Item中有所有可能被設置的屬性列表。
如圖3—1所示的程序使用了屬性在VISA讀(Read)操作中設置一個終止符。(一些基于消息的設備當無數據傳送時可發送一個特殊的終止符)。該VI打開GPIB儀器的一個session(地址2),然后設置VISA屬性。它有3個屬性:終止符(TermChar)、終止符允許(TermChar Enable)和超時值(Timeout Valu e)。其中,終止符為一個10進制數(99),超時值為10s。接著,該VI將命令“*IDN?”寫入儀器,并要求返回100個字符的數據。如收到終止符(TermChar)讀操作就會結束。
4 事件(Events)
事件(Events)是設備的源(Resource)與應用程序之間的VISA通信方式。也就是說 ,源以事件(Events)的方式通知設備,告知應用程序所要求活動的一些條件已經出現。
如圖4—1所示為VISA處理GPIB服務請求(SRQ)事件的一個例子。其中,命令(*ESE0x01;SRE0x30;SOUR ;FUNCSIN;*OPC)用于通知指定的波形發生器發出正弦波 ,完成之后將產生一個服務請求SRQ。(注意:每種儀器可能使用不同的命令集,用戶有必要查詢有關儀器編程參考手冊。)該程序執行流程如下:
1)Open a VISAS ession:打開一個由Resourcename指定的設備。一個VISAsession是一個特定儀器(或引導VISA創建一個指定的VISA class數據結構的事件)的一個信道 。
2)VISA Enable Event:允許VISA檢測事件。
GPIBSRQ的事件類型為x3FFF200B。
3)VISA Write:向設備發送命令和送出SRQ指令,SRQ的格式與個別儀器有關。
4)Wait for RQS.vi:等待設備的服務請求SRQ。
如果消息(events)在timeout周期內到達(串行點名),將讀取Status Byte并返回 。
5)VISA Read reads:從儀器讀出前面所要求的數據。
6)VISA Disable Event:禁止VISA從該session檢測事件。
7)VISA Close:關閉已打開的GPIB設備的session。
5 結束語
基于VISA標準的儀器驅動器設計,使用戶擺脫了繁瑣的低層接口命令函數,因此用戶只需要使用圖形化的人機界面,就可以控制各種復雜的智能儀器。儀器驅動器的VISA編程標準化無論對于儀器生產商,還是對于用戶來說都是有益的。