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

圖1 測試軟件實現方法示意圖[/align]
2.1在VC++環(huán)境中使用VP7 API編寫動態(tài)鏈接庫
測試軟件使用VP7提供的UniSDK_NT中的接口函數編寫和動態(tài)鏈接庫的鏈接。DLL文件的生成過程如下:
1) 在菜單中選擇File\New\Project新建一個工程,工程名設為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語句列出導出函數列表;第三句是注釋語句;第四句是DLL中可被調用的函數名。
8) 編譯程序,就成功生成了DAQdll.dll動態(tài)鏈接庫文件以供調用。
2.2 LabVIEW調用動態(tài)鏈接庫
LabVIEW提供了4種調用外部程序代碼的途徑,其中動態(tài)鏈接庫機制是LabVIEW調用標準共享庫和用戶自定義庫函數的通用方法。具體實現時,是使用LabVIEW功能模板中“Advanced”子模板里的“調用庫函數節(jié)點(Call Library Function Node)”。本設計中中對此節(jié)點的配置如圖2所示。
[align=center]

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

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