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