摘 要:PCI總線是當今計算機的主流I/O總線,具有高傳輸率、支持DMA操作、即插即用等性能。本文介紹了PCI總線的特點和工作原理,提出了PCI總線DAQ卡的設計原理,以及Windows環境下DLL驅動軟件的設計和實現方法;結合基于PCI總線的DAQ卡的研制,討論了對這種硬件在不同的實際測控系統中的應用。
關鍵詞:PCI總線 ;DAQ卡;測控系統
基于DAQ(數據采集)板卡和信號調理電路為儀器硬件所組成的PC-DAQ測控系統,是整個測控系統中的一個重要的組成部分。本文結合PCI總線工作原理和特性,首先簡要講述了基于PCI總線DAQ板卡的設計結構,然后對帶有GPIB[1]接口DAQ卡的硬件原理設計、DLL驅動軟件設計做了詳細的討論。
1 基于PCI總線DAQ卡的設計結構
基于PC-DAQ[2]組成虛擬儀器測控系統,通用的構建方法是在計算機上插入數據采集(DAQ)卡,并由驅動軟件驅動硬件,通過應用程序構建虛擬面板和發送通訊命令。因此,在該系統中,實現基于PCI總線數據采集(DAQ)卡的軟硬件設計,是核心內容。
基于PCI總線的DAQ卡,在設計實現上,分為兩個部分:硬件電路的設計和軟件驅動程序的實現。由于DAQ卡是基于PCI總線的,因此,在硬件上,包括實現PCI總線的接口電路和實現數據采集及處理的虛擬儀器功能電路兩部分。驅動軟件部分,則是實現計算機和硬件板卡之間的通訊,把所采集的數據存儲到計算機內存中。
[align=center]

圖1基于PCI總線DAQ卡的軟硬件設計結構圖[/align]
2 GPIB接口卡的硬件設計與實現
帶有GPIB接口的DAQ卡,在硬件功能上,需要實現三個部分:PCI總線接口、PCI設備的即插即用和GPIB功能接口電路。
2.1 PCI總線接口協議的實現
在該系統的硬件設計中,選用了PLX公司的專用接口芯片PCI9052作為實現PCI總線的橋接芯片。PCI9052對于PCI總線和局部總線轉換提供了無縫鏈接。因此,在硬件實現上,只需要對PCI總線引腳和PCI9052引腳做一一對應連接即可。
2.2 即插即用的實現
PCI總線提供了即插即用的功能,從而使得操作系統在啟動過程中根據檢測到的配置空間寄存器參數,自動為硬件分配各種資源,實現了硬件設備的資源自動配置。
PCI總線的即插即用,對于使用專用集成芯片設計的板卡,主要是通過設置PCI橋接芯片內部的配置寄存器內容來實現的。實現的方法有兩種:通過軟件在線編程修改橋接芯片中配置寄存器內容和使用燒寫器修改串行EEPROM內容。
2.3 接口功能電路的實現
對于GPIB功能電路,為了實現GPIB總線接口協議,本設計中采用了德州儀器生產的專用接口芯片DS75160和DS75162以及74LS375芯片來實現。DS7560和DS75162是專門針對于實現GPIB功能電路的集成芯片。
2.4 接口卡電路的實現
GPIB接口卡的電路包括原理圖和印刷版電路兩部分。
2.4.1 原理圖設計與實現
硬件板卡電路原理如圖2所示。在下圖中,PCI9052用于實現PCI總線接口各種時序電路,EEPROM為93LC46B,用于實現PCI板卡的即插即用功能,外圍芯片74LS688[13]實現地址片選,8255用于實現局部的I/O資源,GPIB功能電路實現接口協議。
[align=center]

圖2 GPIB接口卡原理框圖[/align]
2.4.2 印刷板電路設計與實現
PCI總線設計屬于高速線路設計,對信號的完整性設計要求較高,在本系統中,由于應用總線接口端要求工作時鐘為8MHZ,這個工作時鐘和PCI端的33MHZ工作時鐘是相互獨立的,因此,設計兩層的PCB板就可以達到傳輸速度上的要求。
3 DLL軟件驅動的設計與實現
對于基于DAQ板卡構建的虛擬儀器測控系統,其軟件設計主要任務是實現硬件板卡的驅動程序和儀器虛擬化功能函數的實現。在Windows98操作系統環境下,硬件板卡的驅動程序有三種形式:VxD驅動、DLL驅動和WDM驅動程序[3]。這三種形式中,由于在Windows98環境下提供了能夠在應用層直接操作硬件I/O空間的API函數,所以,在對于帶有GPIB接口的DAQ卡驅動軟件,通過設計一個直接操作硬件I/O空間的DLL[4]來實現。
3.1 DLL的內在工作機制
動態連接庫是應用程序在運行時連接函數庫的一種實現機制。函數庫存儲在它自己的文件中,并不被編譯到應用程序可執行文件中去。DLL在應用程序運行時才連接,而不是在應用程序創建時被連接。DLL包含一個導出函數表,對于需要導出的函數,在定義的時候作類似如下的聲明:
extern “C” __declspec(dllexport) int FunctionName(int n);
除了需要作以上的聲明外,編譯工程中還必須為連接器指定導入庫,而且客戶程序必須實際調用了DLL的導出函數中的至少一個函數。
在創建DLL時,一般都使用VC++6.0來進行開發,在DLL的開發過程中,需要定義三個文件:
(1)一個C語言源文件(必須);
(2)一個自定義的頭文件(可選,在應用程序中調用);
(3)一個模塊定義文件(可選,在_stdcall方式調用時可能需要)。
3.2 Windows98下操作硬件的API函數
在Windows98環境中,操作系統為應用程序直接操作硬件I/O空間提供了6個API函數,用于實現硬件I/O空間字節、字和雙字的讀寫。
3個端口讀函數原型和說明如下(括號內參數為16位I/O讀地址):
讀字節:int _inp( unsigned short port );
讀 字:unsigned short _inpw( unsigned short port );
讀雙字:unsigned long _inpd( unsigned short port );
3個端口寫函數原型和說明如下:
寫字節:int _outp( unsigned short port, int databyte );
寫 字:unsigned short _outpw( unsigned short port,
unsigned short dataword );
寫雙字:unsigned long _outpd( unsigned short port,
unsigned long dataword );
在上述三個API函數中,第一個參數為需要寫入數據的16位I/O地址,第二個參數為需要寫入的數據。在Windows98操作系統中,通過操作以上6個API函數,就可以對包含I/O資源的設備硬件進行讀寫操作。
3.3 DLL中PCI設備局部資源的獲得
在PCI設計中,在調試完硬件,硬件設備就可以正常工作了。但是,如果需要通過軟件來控制硬件動作,則必須獲得系統已經為硬件設備所分配的各種資源信息,即各種映射的那個I/O和內存空間的基地址和大小。
在GPIB接口卡的設計中,在硬件上,局部資源為8255所申請的四個字節的I/O空間。因此,在軟件上,需要獲得這四個字節的I/O空間在系統中PCI地址空間所對應的基地址大小,通過訪問PCI地址空間中的基地址才能通過地址映射實現對8255四個I/O端口的讀寫操作。
在該板卡的設計中,PCI配置周期由配置機制[5]產生,這種機制使用兩個雙字I/O雙字I/OCF8H地址。第一個雙字I/O地址CF8H,是一個可讀寫寄存器,命名為CONFIG-ADDRESS。第二個雙字地址是CFCH,命名為CONFIG-DATA寄存器。對配置空間的操作是通過寫一個值到設備的CONFIG-ADDRESS寄存器。在此之后如果對CONFIG-DATA寄存器回讀,橋就會將CONFIG-ADDRESS寄存器中的值轉換為PCI總線上所要求的配置周期,即自動產生配置讀和配置寫周期[6]。因此,在軟件上通過對這兩個寄存器進行循環讀寫,可以獲得GPIB接口卡的硬件資源,該部分工作流程如左圖3所示。
[align=center]

圖3 PCI卡資源獲取流程[/align]
4 PCI總線DAQ卡在基于示波器測控系統中的應用
在工業現場使用示波器進行信號測量時,常有因環境限制而無法處理測量結果的情況。這時,可通過GPIB總線接口,將數字示波器和位于PC機中的通訊接口卡相連,把數據傳輸到計算機中,然后再在應用層使用圖形化編程軟件LabView[7]構建示波器的虛擬控制面板,實現用戶通過對在測試現場的示波器進行程控操作,在計算機上的虛擬示波器面板上顯示實際的測量結果,并對實際的數據進行分析、存儲等處理,完成示波器的虛擬化操作。
系統的結構框圖如下圖4所示:
[align=center]

圖4 系統的結構框圖[/align]
上述所示波器測控系統中,硬件部分主要是一塊自主研制的基于PCI總線的GPIB接口板卡, 用于實現示波器數據的采集,軟件部分是用于驅動GPIB板卡的DLL功能驅動程序,實現發送命令和數據采集的軟件控制。
在該實際應用中,對于TDS220進行程控操作最基本的幾個程控命令如下所述:
初始化硬件:IBFIND(GPIB總線地址,0,3000)
初始化示波器:IBDEV(儀器地址)
發送命令至示波器:IBWRT(儀器地址,控制命令)
接收數據(字符串形式):IBRD(儀器地址,緩沖區地址,接受數據個數)
接收數據(數組形式):IBRDI(儀器地址,緩沖區地址,讀出數據字節數)
儀器返回本地:IBGTL(儀器地址)
5 結語
基于PCI總線是現代測控系統發展的必然要求,本文所介紹的DAQ卡是結合測控技術的實際發展的需要,在創新思想的指導下提出并開發完成的,文中還給出了在實際測控系統中的應用實例,取得了較為滿意的效果。
參考文獻:
[1] 鮑芳. 基于PCI/PXI/VXI總線的虛擬儀器測試系統[J].工業儀表與自動化裝置,2000,第3期:17-19
[2] 張兢. 基于DAQ數據采集卡的虛擬儀器通用平臺設計[J]. 重慶工學院學報,2001,第15卷第2期:41-43
[3] 武安河.Windows驅動程序(VxD與WDM)開發實物[M].北京:電子工業出版社,2001
[4] [美]David J.Kruglinski著,潘愛明譯. VC++技術內幕[M].清華大學出版社,1999
[5] Tom Shanley,Don Anderson. PCI System Architecture [M], 2000
[6] 陳利學. 微機總線與接口設計[M].電子科技大學出版社,1998
[7] National Instruments. LabView Programmer’s Guide [M], 2000
[8] 李紀敏,余宏強.基于PCI總線的導彈控制系統自動測控研制[J].微計算機信息,2005,8-1:47-49