基于PXI總線的虛擬數(shù)字示波器軟件設(shè)計
測試總線在近幾十年發(fā)展非常迅速:從早期的通用接口總線GPIB到近期的VXI、外圍設(shè)備接口總線(Peripheral Component Interconnection,PCI)、PXI、IEEE1394、通用串行(Universal Serial Bus,USB)測試總線。其中PXI總線是最新一代的測試總線技術(shù),是PCI總線在測試領(lǐng)域的擴(kuò)展(PCI eXtensions for Instruments),于1997年被美國NI公司首次提出,并于次年被采用為工業(yè)標(biāo)準(zhǔn)。PXI總線可簡單地認(rèn)為是MicorosoftWindows、Compact PCI(CPCI)和VXI技術(shù)的綜合:機(jī)械規(guī)范方面采用CPCI的核心技術(shù),即歐式插卡機(jī)械機(jī)構(gòu)和氣密式針孔接頭,特別適用于惡劣的工業(yè)環(huán)境;電氣規(guī)范方面在保持了PCI/CPCI總線所有優(yōu)點的前提下增加了專門的系統(tǒng)參考時鐘、觸發(fā)總線、星形觸發(fā)總線和模塊間的局部總線,以此來滿足高精度的定時、同步與數(shù)據(jù)通信要求;軟件規(guī)范方面也與PCI/CPCI一致,核心是Microsoft公司的Windows操作系統(tǒng),所以PXI系統(tǒng)與PC兼容,方便選擇很多現(xiàn)成的應(yīng)用軟件開發(fā)工具。PXI總線系統(tǒng)將PC機(jī)性能價格的優(yōu)勢、CPCI優(yōu)越的機(jī)械性能和VXI易于系統(tǒng)集成化等優(yōu)點集合了起來,所以是當(dāng)今發(fā)展最快的總線技術(shù)。迄今為止,已經(jīng)有美國NI等數(shù)十家公司推出PXI(CPCI)模塊上千種?;诖?本文采用PXI總線,利用現(xiàn)有的PXI工控機(jī)及高速數(shù)據(jù)采集板,設(shè)計了基于PXI總線的虛擬數(shù)字存儲示波器軟件。
基于PXI總線的數(shù)字示波器硬件與軟件結(jié)構(gòu)
硬件結(jié)構(gòu)
數(shù)字示波器硬件即通常說的數(shù)據(jù)采集板,其原理框圖如圖1所示(圖中省略電源和時鐘部分):雙通道被測信號經(jīng)過模擬信號調(diào)理通道送入高速模數(shù)轉(zhuǎn)換器,所得數(shù)字?jǐn)?shù)據(jù)先送入2個先入先出(First In First Out,FIFO)緩存再送給本地總現(xiàn)最后由接口芯片PCI9030送入PXI機(jī)箱中。硬件的控制和狀態(tài)讀取需要根據(jù)用戶指令由相應(yīng)的軟件完成,送入PXI工控機(jī)的數(shù)據(jù)也要由軟件進(jìn)行處理,最后得到顯示波形和測量結(jié)果。
圖1 PXI數(shù)據(jù)采集板原理框圖
軟件構(gòu)成
Windows系統(tǒng)為了保證系統(tǒng)的安全性、穩(wěn)定性和可移植性,對系統(tǒng)底層操作采取了屏蔽的措施,利用設(shè)備驅(qū)動程序?qū)⒂布c用戶隔開。所以,軟件分為兩部分:底層設(shè)備驅(qū)動程序、高層應(yīng)用軟件。設(shè)備驅(qū)動程序從廣義上來講是指直接操作硬件的一組函數(shù),完成硬件控制和數(shù)據(jù)采集。驅(qū)動程序在裝入后成為操作系統(tǒng)內(nèi)核的一部分。高層應(yīng)用軟件可以認(rèn)為是虛擬示波器用戶態(tài)程序,將用戶界面,即面板上各種開關(guān)、按鈕等控件以及波形、測量數(shù)據(jù)結(jié)果顯示區(qū)和數(shù)據(jù)采集、數(shù)據(jù)分析聯(lián)系在一起。當(dāng)用戶在界面上發(fā)出一定的命令后,應(yīng)用程序首先調(diào)用應(yīng)用程序接口(Application Programming Interface,API)函數(shù),相關(guān)的系統(tǒng)服務(wù)將調(diào)用內(nèi)核模式的驅(qū)動程序?qū)崿F(xiàn)API,將命令信息轉(zhuǎn)換成數(shù)據(jù)采集板認(rèn)識的數(shù)據(jù)格式,按照數(shù)據(jù)采集板的物理地址送到底層硬件。同時數(shù)據(jù)采集板采集到的數(shù)據(jù)和底層硬件的各種狀態(tài)信息也通過API傳送給應(yīng)用程序做顯示和控制用。
驅(qū)動程序開發(fā)
Windows驅(qū)動程序編制可以采用Windows設(shè)備驅(qū)動程序開發(fā)包(Device Drivers Kit,DDK),但需要程序員了解復(fù)雜的操作系統(tǒng)內(nèi)核。簡捷的方法是利用KRFTech公司的設(shè)備驅(qū)動程序開發(fā)工具WinDriver。WinDriver是主要用于編寫針對ISA/PCI插卡和USB等硬件設(shè)備驅(qū)動程序的工具包。對于硬件的訪問,應(yīng)用程序從WinDriver用戶模式庫調(diào)用WinDriver的功能接口,再由這個功能調(diào)用WinDriver的內(nèi)核模塊,即WinDriver自身提供的的驅(qū)動程序WinDriver.vxd和WinDriver.sys去完成硬件的訪問。
分析數(shù)據(jù)采集板,知道驅(qū)動程序要完成的基本功能包括設(shè)備初始化、對I/O和內(nèi)存的讀寫、直接存儲器存取(Direct Memory Access,DMA)以及中斷等操作。首先利用WinDriver完成對硬件的診斷操作,獲得數(shù)據(jù)采集板硬件參數(shù),如端口地址范圍、I/O方式、存儲器地址、內(nèi)存映射方式、中斷號等。然后再根據(jù)硬件的這些參數(shù)生成一些源代碼和框架函數(shù),如:
SHBK_HANDLE SHBK_LocateAndOpenBoard(DWORD dwVendorID,DWORD dwDeviceID,BOOL
fUseInt)//定位并開啟數(shù)據(jù)采集板;
void SHBK_EnableDisableInterrupts(SHBK_HANDLE hSHBK)//定義開啟或終止中斷;
DWORD SHBK_ReadPCIReg(SHBK_HANDLE hSHBK, DWORD dwReg)//讀配置寄存器;
BYTE SHBK_ReadByte (SHBK_HANDLE hSHBK, SHBK_ADDR addrSpace, DWORD dwOffset)//讀出某內(nèi)存1字節(jié)內(nèi)容,該內(nèi)存地址為基地址加偏移量dwOffset;
void SHBK_WriteByte (SHBK_HANDLE hSHBK, SHBK_ADDR addrSpace, DWORD dwOffset, BYTE
data)//向內(nèi)存寫內(nèi)容為data的1字節(jié)數(shù)據(jù)。
限于篇幅,只是舉例給出了小部分函數(shù),所有函數(shù)都未給出具體的實現(xiàn)代碼。利用所有這些框架函數(shù)可以對硬件直接進(jìn)行操作,為方便多個功能均要引用它們,將其封裝在一個動態(tài)連接庫(Down-Line Load,DLL)中,再根據(jù)實際的硬件設(shè)計進(jìn)行調(diào)用,通過對內(nèi)存和IO進(jìn)行具體讀寫操作,編制對數(shù)據(jù)采集板硬件進(jìn)行操作的功能函數(shù),這些功能函數(shù)也被封裝在此DLL中,供給高層應(yīng)用軟件調(diào)用。
評論