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