摘 要:該文利用虛擬儀器技術(shù)開(kāi)發(fā)了一套基于VME總線(xiàn)的測(cè)試軟件,已成功地應(yīng)用于北京正負(fù)電子對(duì)撞機(jī)的大型探測(cè)器北京譜儀III主漂移室電子學(xué)測(cè)試中。該軟件采用LabVIEW提供的動(dòng)態(tài)鏈接庫(kù)調(diào)用機(jī)制,通過(guò)調(diào)用在VC++中編譯生成的動(dòng)態(tài)鏈接庫(kù),完成了對(duì)底層VME總線(xiàn)上各功能板卡的訪(fǎng)問(wèn),從而實(shí)現(xiàn)了LabVIEW與非NI板卡之間的通信,為北京譜儀III主漂移室電子學(xué)測(cè)試系統(tǒng)提供了一套行之有效的測(cè)試軟件。
關(guān)鍵詞:虛擬儀器;VME總線(xiàn); LabVIEW;動(dòng)態(tài)鏈接庫(kù)
Abstract: This paper presents the design of Virtual Instrument technique based VMEbus, Which has been applied in BESIII Main Drift Chamber Electronics successfully. This design, developed in LabVIEW and VC++ 6.0, has realized the communication between LabVIEW and data acquisition card non-NI. LabVIEW and its DLL calling mechanism are introduced briefly. Testing functions of the software, as well as its user interfaces, are described in detail.
Key words: Virtual Instruments; VMEbus;, LabVIEW; Dynamic Link Library
1 引言
美國(guó)NI公司提出的虛擬儀器概念,是對(duì)傳統(tǒng)儀器概念的重大突破。所謂虛擬儀器,是將傳統(tǒng)儀器硬件和計(jì)算機(jī)軟件技術(shù)充分結(jié)合起來(lái),以實(shí)現(xiàn)并擴(kuò)展傳統(tǒng)儀器的功能[1]。與傳統(tǒng)儀器相比,虛擬儀器在智能化程度、處理能力、性能價(jià)格比、可操作性等方面均有明顯的技術(shù)優(yōu)勢(shì)。同時(shí)VME總線(xiàn)是目前性能最好、應(yīng)用最廣的國(guó)際總線(xiàn)標(biāo)準(zhǔn)之一,因此,它與虛擬儀器的結(jié)合為自動(dòng)測(cè)試系統(tǒng)提供了一個(gè)更為廣闊的發(fā)展空間。
2 測(cè)試軟件在VME總線(xiàn)上的實(shí)現(xiàn)
本文在VME總線(xiàn)上使用虛擬儀器技術(shù),設(shè)計(jì)了一套行之有效的測(cè)試軟件,實(shí)現(xiàn)了對(duì)BESIII主漂移室電子學(xué)測(cè)試系統(tǒng)的硬件調(diào)試和性能檢測(cè)。
測(cè)試系統(tǒng)使用的SBS公司生產(chǎn)的VP7型嵌入式單板計(jì)算機(jī)是基于VME總線(xiàn)的6U主控制器。VP7集成了CPU、內(nèi)存、硬盤(pán)、顯示卡、USB接口、串口、并口、10/100M以太網(wǎng)卡接口,可以運(yùn)行Windows 2000/NT/98,VxWorks,Linux,MS-DOS等操作系統(tǒng),并且向Windows操作系統(tǒng)提供了一套UniSDK_NT工具包。UniSDK_NT工具包的核心部分是UniAPI接口函數(shù),采用標(biāo)準(zhǔn)C語(yǔ)言編寫(xiě)。UniAPI實(shí)現(xiàn)了對(duì)VME總線(xiàn)的訪(fǎng)問(wèn)和控制,本設(shè)計(jì)用到的接口函數(shù)主要有:
API_RESULT VmeMasterOpen(VME_MASTER_CHANNEL *pMasterChannel);
API_RESULT VmeMasterClose(VME_MASTER_CHANNEL *pMasterChannel);
API_RESULT VmeWrite32(VME_MASTER_CHANNEL MasterChannel, U32 VmeAddress, U32 Data);
U32 VmeRead32(VME_MASTER_CHANNEL MasterChannel, U32 VmeAddress, API_RESULT* pResult)
等等。
測(cè)試軟件采用Visual C++ 6.0作為調(diào)用VP7 API的開(kāi)發(fā)工具,對(duì)VME總線(xiàn)執(zhí)行讀、寫(xiě)操作以及響應(yīng)中斷,并生成動(dòng)態(tài)鏈接庫(kù)(Dynamic Link Library,DLL),供上層用戶(hù)程序調(diào)用。
由于需要實(shí)現(xiàn)參數(shù)設(shè)置、數(shù)據(jù)顯示等功能,希望在測(cè)試過(guò)程中像對(duì)真實(shí)儀器一樣對(duì)面板操作,測(cè)試軟件使用虛擬儀器軟件開(kāi)發(fā)平臺(tái)LabVIEW編寫(xiě)上層用戶(hù)程序。LabVIEW作為一種圖形化編程語(yǔ)言,它的一個(gè)極為方便之處就是提供了大量的和實(shí)際儀器控制面板類(lèi)似的圖形組件, 這使得界面編程極其簡(jiǎn)單, 并且在計(jì)算機(jī)上操作這些圖形界面和在現(xiàn)實(shí)中操作實(shí)際儀器幾乎完全一樣。但是LabVIEW在訪(fǎng)問(wèn)底層硬件,尤其是用戶(hù)自行設(shè)計(jì)的硬件方面,卻不如C語(yǔ)言功能強(qiáng)大。為此LabVIEW通過(guò)DLL、共享庫(kù)等途徑實(shí)現(xiàn)了與外部程序代碼相連接,將其自身無(wú)法或不易實(shí)現(xiàn)的任務(wù)通過(guò)能夠或更適于完成此類(lèi)任務(wù)的外部代碼來(lái)實(shí)現(xiàn)[2]。該軟件采用LabVIEW提供的動(dòng)態(tài)鏈接庫(kù)機(jī)制,通過(guò)調(diào)用VC++編譯生成的DLL,實(shí)現(xiàn)對(duì)底層各功能插件的訪(fǎng)問(wèn)。調(diào)用動(dòng)態(tài)鏈接庫(kù)機(jī)制是該測(cè)試軟件使用的關(guān)鍵技術(shù),具體用LabVIEW功能模板中的“調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)(Call Library Function Node,CLF)”實(shí)現(xiàn)。
實(shí)現(xiàn)方法如圖1所示。
[align=center]

圖1 測(cè)試軟件實(shí)現(xiàn)方法示意圖[/align]
2.1在VC++環(huán)境中使用VP7 API編寫(xiě)動(dòng)態(tài)鏈接庫(kù)
測(cè)試軟件使用VP7提供的UniSDK_NT中的接口函數(shù)編寫(xiě)和動(dòng)態(tài)鏈接庫(kù)的鏈接。DLL文件的生成過(guò)程如下:
1) 在菜單中選擇File\New\Project新建一個(gè)工程,工程名設(shè)為DAQdll;
2) 在工程列表中選擇Win32 Dynamic-Link Library;
3) 選擇存放目錄,這樣就創(chuàng)建了DAQdll.dll工程;
4) 在DAQdll工程中,選擇Add\Add New File,新建一個(gè)文件DAQdll.cpp;
5) 編輯DAQdll.cpp文件:
#include
……
void GetWaveform(VME_MASTER_CHANNEL channel, int nModuleNum,
int nChannel, unsigned long waveform[])
{
API_RESULT Api_Result;
……
for(int i=0; i<63; i++)
?。?
waveform[i] = VmeRead32(channel, chnAddr, &Api_Result) ;
?。?
return 0;
}
……
6) 在DAQdll工程中,選擇Add\Add New File,新建一個(gè)文件為DAQdll.def;
7) 編輯DAQdll.def文件:
LIBRARY DAQdll
EXPORTS
;Explicit exports can go here
GetWaveForm @1
這些代碼描述了DLL的屬性。第一句給出DLL的名稱(chēng);第二句用EXPORTS語(yǔ)句列出導(dǎo)出函數(shù)列表;第三句是注釋語(yǔ)句;第四句是DLL中可被調(diào)用的函數(shù)名。
8) 編譯程序,就成功生成了DAQdll.dll動(dòng)態(tài)鏈接庫(kù)文件以供調(diào)用。
2.2 LabVIEW調(diào)用動(dòng)態(tài)鏈接庫(kù)
LabVIEW提供了4種調(diào)用外部程序代碼的途徑,其中動(dòng)態(tài)鏈接庫(kù)機(jī)制是LabVIEW調(diào)用標(biāo)準(zhǔn)共享庫(kù)和用戶(hù)自定義庫(kù)函數(shù)的通用方法。具體實(shí)現(xiàn)時(shí),是使用LabVIEW功能模板中“Advanced”子模板里的“調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)(Call Library Function Node)”。本設(shè)計(jì)中中對(duì)此節(jié)點(diǎn)的配置如圖2所示。
[align=center]

圖2 調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)配置對(duì)話(huà)框[/align]
其中,需要配置的項(xiàng)目有:
1)在“Library Name or Path”選項(xiàng)中鍵入此節(jié)點(diǎn)所要鏈接的DLL路徑名D:\DAQdll;
2)在“Function Name”選項(xiàng)中鍵入DLL文件中將要調(diào)用的函數(shù)名GetWaveForm;
3)在“Calling Conventions”選項(xiàng)中選擇“C”,即所調(diào)用的庫(kù)為使用C語(yǔ)言自己創(chuàng)建的庫(kù);
4)在“Brouse”按鈕下方的選項(xiàng)中選擇“Run in UI Thread”,即該調(diào)用過(guò)程運(yùn)行在用戶(hù)接口線(xiàn)程中;
5)參數(shù)設(shè)置和返回值設(shè)置中,有三個(gè)選項(xiàng):參數(shù)名稱(chēng)(Parameter)、參數(shù)類(lèi)型(Type)和數(shù)據(jù)類(lèi)型(Data Type)。參數(shù)類(lèi)型和數(shù)據(jù)類(lèi)型設(shè)置成與被調(diào)用函數(shù)的類(lèi)型完全一致。第一個(gè)參數(shù)是被調(diào)用函數(shù)的返回值,單擊右側(cè)的Add Parameter After可以給函數(shù)添加輸入?yún)?shù)和輸出結(jié)果,每個(gè)參數(shù)都要設(shè)置自己的參數(shù)類(lèi)型和數(shù)據(jù)類(lèi)型。設(shè)置完成后,被調(diào)用的函數(shù)原型會(huì)顯示在“Function Prototype”框中。
3 測(cè)試軟件在實(shí)際中的應(yīng)用
本設(shè)計(jì)使用上述虛擬儀器技術(shù),實(shí)現(xiàn)了BESIII主漂移室電子學(xué)測(cè)試系統(tǒng)的軟件設(shè)計(jì),對(duì)測(cè)試系統(tǒng)進(jìn)行了數(shù)據(jù)的采集與顯示,完成了測(cè)試系統(tǒng)的波形重建功能,得到如圖3所示結(jié)果。使用此軟件時(shí),可以通過(guò)改變左邊的參數(shù),對(duì)輸入波形進(jìn)行調(diào)節(jié),調(diào)節(jié)的結(jié)果均能在虛擬儀器前面板中重建的波形上及時(shí)反映出來(lái)。對(duì)同一輸入波形,示波器觀測(cè)結(jié)果和在顯示器上虛擬儀器顯示的重建結(jié)果能夠很好地吻合。
[align=center]

圖3 波形重建虛擬儀器程序[/align]
4 結(jié)束語(yǔ)
虛擬儀器技術(shù)是計(jì)算機(jī)技術(shù)、軟件技術(shù)、電子技術(shù)的完美組合,其中軟件是虛擬儀器的核心。利用LabVIEW調(diào)用由VC++編譯的動(dòng)態(tài)鏈接庫(kù)機(jī)制,在VME總線(xiàn)上建立了一套實(shí)用、可靠的測(cè)試系統(tǒng),運(yùn)用在BESIII主漂移室電子學(xué)測(cè)試系統(tǒng)上,為系統(tǒng)提供了一種有效的測(cè)試方案,得到了良好的效果。
5 本文作者創(chuàng)新點(diǎn)
1)通過(guò)調(diào)用動(dòng)態(tài)鏈接庫(kù),在LabVIEW開(kāi)發(fā)環(huán)境中使用非NI板卡實(shí)現(xiàn)VME總線(xiàn)上的數(shù)據(jù)采集,可以降低開(kāi)發(fā)測(cè)試系統(tǒng)時(shí),用于購(gòu)置數(shù)據(jù)采集硬件的成本。
2)詳細(xì)介紹了在使用CFLN過(guò)程中的步驟和注意點(diǎn),提高了開(kāi)發(fā)者的程序調(diào)試成功率。
參考文獻(xiàn):
[1]. 薛得鳳.基于圖形化編程語(yǔ)言L(fǎng)abview的一種虛擬儀器的實(shí)現(xiàn)[J]. 自動(dòng)化與儀器儀表,2003年,109(5): 24~26
[2]. 吉順祥,劉旺鎖等.LabVIEW的外部代碼接口技術(shù)應(yīng)用[J]. 微計(jì)算機(jī)信息,2006年,11-1:205~207