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

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

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

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