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