???? 關鍵詞:并口,增強型并口,窗口驅動模式,數據采集
1 引 言
在目前一些流行的上位機和數據采集設備組合的數據采集系統中,數據采集設備和上位機的通訊是一個比較關鍵的技術。一般的應用系統設計中,數據通訊技術主要采用串行異步通訊方式,但其傳輸速率受到限制,通常最高波特率設定在9600bps左右〔1〕。而在一些數據采樣率比較高的場合,如每秒20k~2M字節的數據通訊速率,使用串口通訊技術是遠遠達不到要求的,這就需要使用更為快速的數據通訊方案。目前比較合適的通訊技術還有并口和USB通訊方案。本文主要探討并口的通訊在數據采集中的運用。
當前許多并口數據采集系統都基于Windows98系統平臺,由于該系統可以直接訪問并口硬件資源,在上位機軟件方面比較容易,因此很少被詳細而深入地探討。但隨著Windows2000/WinXP操作系統逐漸成為主流的桌面系統,而該操作系統為了保證其穩定性,主機的上層應用程序將無法直接訪問并口,這就需要在Windows2000新的窗口驅動模式WDM下,基于Windows2000中現有的驅動體系,開發專有的并口數據采集設備驅動,以支持上位機采集軟件的開發和運行。
2 EPP并口通訊
并口通訊技術經歷多年的發展,現在已經形成了統一的1284標準。在這個標準中,目前定義了5種并口通訊模式〔2〕〔3〕,見表1。
其中,EPP和擴容并口(Extended ParallelPort,ECP)模式支持雙向數據傳輸,數據傳輸速率都能夠達到1Mbyte/s以上,顯然是滿足一般的數據采集要求的,這兩種模式是一般并口外設和主機廣泛支持的并口工作模式。由于EPP模式的操作時序簡單,本文將其作為首選數據通訊模式。
??? 而基于EPP協議的硬件和通訊設計,本文主要依據并口通訊的特點,采用中斷上傳方式,即外設通過nIntr中斷來通知主機采集數據上傳準備就緒,主機捕獲中斷后立即從并口讀取數據。
由于并口的頻繁中斷使得系統不穩定,因此,在啟用并口中斷的時候,一定要盡量減少并口中斷的頻率,在這里就是要增加每次中斷處理的數據傳輸量。一般的方法是外設采用容量較大的先進先出隊列(First InFirst Out,FIFO),并在一次中斷中,將這些數據上傳主機。
基于EPP協議的硬件設計已經在許多文章得到探討,這里不再贅述。
3 Windows2000下并口數據采集的軟件設計
在Windows2000/WinXP系統中,考慮到系統的穩定性,應用程序已經無法直接訪問和操作并口。同時虛擬設備驅動(Virtual Device Driver,VxD)也將為Windows2000下的更為先進的窗口驅動模式體系所取代,因此要在Windows2000/WinXP系統下進行并口數據采集設備的軟件開發,就必須進行并口設備的WDM驅動的開發。
3.1 Windwos2000驅動體系
圖1顯示了在Windows2000/WinXP系統中應用程序調用執行一個硬件的操作的基本過程,從中我們可以看到驅動的位置及其所起到的作用。
WDM是微軟公司在Windows NT驅動程序體系的基礎上,提出的一個新的設備驅動程序體系。WDM不僅支持即插即用、電源管理、WMI(WindowsManagement Instrumentation)等功能,它強調驅動程序的分層和模塊化,擁有更強的可擴展性和可移植性,使用更加靈活,運行更加安全,開發更加快捷,同時,可以很輕易地移植到不同的平臺上運行。
3.2 WDM驅動程序的種類和結構
??? WDM的驅動程序是分層的,一般按照層次分為高層、中間和底層三類〔4〕。顧名思義,高層驅動程序依賴于中間和底層驅動程序完成工作,而中間驅動程序又依賴于底層驅動程序來完成工作。
高層驅動程序主要為請求者提供非物理的抽象,并一次轉換為特定的設備請求。比如文件系統驅動程序(File SystemDriver,FSD)。
中間驅動程序是驅動中相對比較豐富的領域,包括了諸如磁盤鏡像、類驅動程序、微型驅動程序和過濾器驅動程序。這些驅動程序穿插在高層抽象層和低級物理支持之間。其功能多樣,實現方式靈活。
底層驅動程序主要包括諸如硬件總線的控制器等的驅動,這些驅動直接與Windows的硬件抽象層(Hardware Abstract Layer,HAL)和硬件交互,它們包括了物理驅動程序的概念,這些物理驅動程序與一個或多個功能驅動程序發生作用。
3.3 Windows2000中的并口系統驅動環境
Windows2000中已經為并口提供了一些默認的系統驅動,其中一個是Parport,另一個是Parclass,它們的執行映像文件分別對應Parport.sys和Parallel.sys。
Parport是Windows2000提供給并口的系統功能驅動程序,不可取代,它支持WDM的所有的基本特性,負責為每個并行端口創建一個命名的Parport設備對象,并且為每個Parport設備對象分配一個工作隊列。同時還與并口設備類驅動如Parclass或其他特定的并口設備功能驅動程序緊密配合,為它們提供如下的服務功能:
??? (1)并口使用的資源,如端口、中斷等等資源。
??? (2)總線接口信息。
?。?)給其他驅動提供一些回調過程的指針,通過這些回調過程可以控制一個并口設備。
Parclass是掛接在并口上的并口設備的類驅動,它依賴于Parport提供的服務,同時,它也是一個即插即用的并口設備的總線驅動。Parclass首先創建一個總線功能設備對象,它代表一個硬件獨立的Parclass總線控制器,同時為每個掛接在并口上的即插即用設備在Parclass總線上創建子對象,或者直接為并行端口創建一個遺留設備對象。
同樣,Parclass也給一些更高層的驅動程序提供一些回調過程和內部IO控制指令,以控制和訪問Parclass總線下的子設備。Parclass目前支持對Parclass子設備的裸訪問,同時支持的并口模式有標準并口、IEEE1284兼容并口、ECP和EPP并口等。
以上兩個驅動是Windows2000/WinXP系統中為并口以及并口設備提供的系統驅動程序,它構成了其他并口以及并口設備驅動開發的基礎和環境。
3.4 并口采集驅動的設計
??? 并口數據采集驅動的結構設計主要如圖2所示。
本文并口數據采集驅動程序結構設計主要有以下要點:
?。?)為了避免驅動程序設計過于復雜,減少驅動調用的層次,本驅動直接構建在并口驅動程序Parport之上,而沒有在Parclass上構建本文的驅動,直接利用Parport提供的基本的并口操作實現本文驅動的功能。
??? (2)驅動工作在EPP高速通訊模式。
?。?)驅動不采用輪詢模式去查詢并口,而是等待并口外設的中斷事件,通知主機外設數據上傳準備完畢,驅動中斷伺服例程或者延遲例程,完成并口設備采集數據的讀取。
?。?)本系統沒有數據的雙向通訊,對上層應用程序和驅動程序而言,只有驅動程序到應用程序的數據流,因此它們之間的通訊模式采用了事件模式,即驅動在采集數據到達或者數據緩沖區已滿時,通過事件通知上層應用程序,再由上層應用程序來從驅動的系統緩沖區中讀取采集上來的數據。
3.5 并口驅動的實現
并口驅動的實現主要是按照WDM驅動的規范和接口來實現,這些接口有層次的分為如下幾個部分:驅動程序的初始化(DriverEntry入口函數)和卸載例程(DriverUnload)、驅動設備的添加例程(AddDevice)和主要IO請求的派發例程、即插即用(Plug and Play,Pnp)處理例程(其中包括驅動設備的啟動、停止和卸載等等子例程)、控制IO子請求的處理例程、電源管理處理例程、WMI和NT事件通知處理例程。驅動的設計的和實現在許多書籍和文章上都有詳細的介紹〔4〕〔5〕,其一般通用的設計和實現這里不再贅述。這里主要闡述一些與并口操作有著緊密聯系的關鍵實現。
3.5.1 并口的獲取和訪問
在Windows2000操作系統中,并口驅動Parport自動為每個并口生成一個設備對象,一般最常用的一個并口設備對象的內部設備名為“\Device\ParllelPort0”,本驅動就是通過這個內部設備名來獲得并口對象的。同時,應該注意在設備的卸載時刪除相應的并口設備指針。得到這個設備對象后,就可以通過內部控制IO請求和回調函數來控制并口操作。具體代碼如下
在獲得并口對象之后就通過底層的Parport驅動發送內部控制IO IOCTL INTERNAL PARALLEL? PORT? ALLOCATE,或者也可以調用PARALLEL? PORT? INFORMATION的PPARALLEL? TRY? ALLOCATE? ROUTNE例程來占用并口,這樣驅動程序就可以獲得并獨占并口的資源,與并口數據采集設備通訊了。
3.5.2 并口模式的設置
首先這里強調的是,主機的并口必須支持EPP模式的通訊方式,具體地說,就是主機的基本輸入輸出系統(Basic Input Output System,BIOS)中要將并口模式設置為EPP模式或者EPP+ECP混合模式。在此基礎之上,驅動程序才能正確設置并口工作模式。一般在EPP模式下時,驅動不用設置并口工作模式,但如果在EPP+ECP工作模式下,則需要驅動程序檢測并設置并口工作模式,這時就需要通過向Parport驅動程序發送IOCTL INTERNAL PARALLEL SET? CHIP? MODE內部控制IO,或調用TrySetChipMode回調例程設置并口為EPP工作模式。同時,應注意如果BIOS中設為EPP+ECP混合模式,在卸載本驅動設備后要將并口模式恢復為原有的模式。
3.5.3 并口中斷的掛接
掛接并口中斷,不推薦直接調用IoConnectInterrupt例程,而只需要向Parport驅動程
序發送內部控制IO(IOCTL INTERNAL PARALLEL? CONNECT? INTERRUPT)來掛接所指定中斷例程。
3.5.4 并口驅動與應用程序的通訊
主要的方法就是由上層應用程序創建一個事件,然后通過IO MJ DEVICE CONTROL的設備控制IO將此事件句柄作為一個參數傳給驅動程序,之后應用程序本身就進入等待這個通知事件觸發的狀態之中。驅動程序獲得這個通知事件句柄,將其保存在自己的設備擴展之中,當并口有數據到達需要向上層應用程序發送數據的時候,就觸發這個事件,則上層應用程序將會得到通知,繼而從驅動中讀取數據。
4 結束語
本文驅動是在Windows2000設備驅動程序開發包(Device Drivers Kit,DDK)和VC6下開發完成的,由Numage公司的SoftIce調試工具調試通過。
本驅動程序采用了增強型并口模式作為并口設備驅動的工作模式,此模式下并口開發相對比較容易,而且極大地擴展了并口通訊容量和速度。同時,本驅動構建在Windows2000為并口提供的系統功能驅動Parport之上,通過Parport提供的各項功能來訪問和控制并口,既減少了本驅動的開發的難度,又增強了系統的整合性和穩定性。目前,實測數據采集速率峰值達到1Mbyte/s以上,穩定運行時也可達到400K~500Kbyte/s的速度,同時,上層的應用程序耗用的資源相當少,運行平穩,效果良好,為Windows2000/WinXP系統下開發并口數據采集設備的軟件系統提供了一些有意義的嘗試和經驗。
參考文獻
2 IEEEStd 1284-1994.IEEEStandard Signaling Method fora Bidirectional Parallel Peripheral Interface for Personal Computers.1994
3 宋大雷,張東來,等.IEEE1284標準簡介.電子計算機與外部設備,2000,24(1):21~24
4?。溃〢rt Baker,Jerry Lozano著.Windows2000設備驅動程序設計指南.施 諾,等譯.北京:機械工業出版社,2001,9:8~10
5 姜 江,柳 泉,等.基于Windows2000的WDM設備驅動程序的開發.應用科技,2002,29(7):45~47
評論
查看更多