吳曉鵬
【摘要】數(shù)據(jù)采集在工業(yè)系統(tǒng)中占據(jù)十分重要的位置,這是因為無論是控制系統(tǒng)還是計算機,都需要對外界采集的數(shù)據(jù)進(jìn)行分析和處理。采集數(shù)據(jù)一般使用數(shù)據(jù)采集卡,相應(yīng)的軟件系統(tǒng)可以分成兩個部分:驅(qū)動程序以及應(yīng)用程序。傳統(tǒng)的數(shù)據(jù)采集采用的是單線程,但是實時性并不理想。本論文介紹了基于多線程和異步IO調(diào)用的數(shù)據(jù)采集系統(tǒng),經(jīng)驗證,數(shù)據(jù)的實時性和可靠性都得到了很大的提高。
【關(guān)鍵詞】多線程;采集
1.引言
數(shù)據(jù)采集在工業(yè)系統(tǒng)中占據(jù)十分重要的位置,這是因為無論是控制系統(tǒng)還是計算機,都需要對外界采集的數(shù)據(jù)進(jìn)行分析和處理。采集數(shù)據(jù)一般使用數(shù)據(jù)采集卡,相應(yīng)的軟件系統(tǒng)可以分成兩個部分:驅(qū)動程序以及應(yīng)用程序。在數(shù)據(jù)采集卡誕生時,采集數(shù)據(jù)多采用的是單線程及同步I/O調(diào)用的方式。這種方式并不適用于大量快速的數(shù)據(jù)傳輸,因為軟件系統(tǒng)在調(diào)用了驅(qū)動函數(shù)之后,一直循環(huán)采樣數(shù)據(jù)直至其傳輸完成[1]。
多線程以及異步I/O調(diào)用很好地解決了以上的難題:多線程能夠保證數(shù)據(jù)的采集以及數(shù)據(jù)的處理在不同的線程進(jìn)行,這樣就能夠使得軟件占用很小的系統(tǒng)資源,同時又具有很好的實時性;異步I/O調(diào)用技術(shù)可以使得應(yīng)用程序只在調(diào)用時才使用驅(qū)動函數(shù),這樣就避免了阻塞的情況。本論文主要介紹如何通過使用多線程技術(shù)和對于I/O的異步調(diào)用,提高數(shù)據(jù)采集的實時性和準(zhǔn)確性。
2.數(shù)據(jù)采集卡技術(shù)的改進(jìn)
2.1 驅(qū)動程序和采集卡的通信
windows系統(tǒng)中,數(shù)據(jù)采集卡的驅(qū)動程序一般是工作于內(nèi)核模式,而用戶界面等是應(yīng)用于用戶模式。在顯示數(shù)據(jù)和處理數(shù)據(jù)的過程中,程序需要調(diào)用API和驅(qū)動程序進(jìn)行通信,進(jìn)而實現(xiàn)底層的采集數(shù)據(jù)交互。數(shù)據(jù)傳輸有關(guān)的API有很多,本論文主要用到的是ReadFile()函數(shù)。該函數(shù)同時支持對于IO端口的異步調(diào)用和同步調(diào)用[2]。
2.2 調(diào)用程序時同步和異步的區(qū)別
數(shù)據(jù)采集過程中,對于IO的調(diào)用有兩種方式:同步IO和異步IO調(diào)用。這兩種調(diào)用方式具有很多不同,最主要的區(qū)別在于異步IO不會因為發(fā)出了IO請求就阻塞進(jìn)程,而是繼續(xù)執(zhí)行其它進(jìn)程,在本質(zhì)上相當(dāng)于是一個“中斷”。異步調(diào)用的系統(tǒng)資源占用之所以比同步調(diào)用低,就是因為其能夠使得內(nèi)核處理IO時可以同時處理其它任務(wù)。這樣即使是大量數(shù)據(jù)的傳輸和對于大量數(shù)據(jù)的處理,都能夠取得很好的效果。函數(shù)CreatFile()決定是否發(fā)起異步IO請求。
2.3 驅(qū)動程序WDM
所謂WDM,使得用戶能夠靈活地使用驅(qū)動程序開發(fā)應(yīng)用程序。它具有跨平臺的應(yīng)用特性,本論文的數(shù)據(jù)采集卡驅(qū)動通過調(diào)用WDM來開發(fā)。應(yīng)用程序通過調(diào)用驅(qū)動程序,對于某些特定時間進(jìn)行檢測,進(jìn)而和應(yīng)用程序進(jìn)行數(shù)據(jù)交互。一般來說,WDM模式中有兩種數(shù)據(jù)交換方式:事件通知以及異步IO通知[3]。
2.3.1 事件通知
通過調(diào)用系統(tǒng)事件進(jìn)程,WDM能夠和應(yīng)用程序交互數(shù)據(jù)等。WDM可以接收應(yīng)用程序所創(chuàng)建的事件,進(jìn)而在特定時刻發(fā)送數(shù)據(jù)信息。
2.3.2 異步IO方式
在接收IO的請求后,驅(qū)動程序會檢測特定事件是否已經(jīng)發(fā)生。
(1)沒有事件等待,應(yīng)用程序則會調(diào)用系統(tǒng)函數(shù)來查看IO的數(shù)據(jù)采集等情況。
(2)事件發(fā)生并準(zhǔn)備將數(shù)據(jù)與應(yīng)用程序進(jìn)行交互,那么驅(qū)動程序會通過WDM的調(diào)度例程進(jìn)行驅(qū)動程序和應(yīng)用程序的數(shù)據(jù)通信[4]。
3.多線程技術(shù)的應(yīng)用
3.1 串行數(shù)據(jù)處理
傳統(tǒng)的數(shù)據(jù)采集方式是對數(shù)據(jù)進(jìn)行串行處理,即數(shù)據(jù)點的獲取和保存處理等工作是串行實現(xiàn)的,這種方法雖然容易實現(xiàn),但是缺點也是顯而易見的:效率低,實時性差。
3.2 多線程數(shù)據(jù)處理
眾所周知,windows系統(tǒng)是多任務(wù)的,即同一個進(jìn)程可以包含許多線程。這樣就為應(yīng)用程序的開發(fā)提供了無數(shù)種可能性,使得程序開發(fā)人員能夠靈活地開發(fā)應(yīng)用程序。多線程對于提高系統(tǒng)的穩(wěn)定性和實時性具有重要的作用。程序開發(fā)人員很容易調(diào)用系統(tǒng)的多線程接口函數(shù)進(jìn)行開發(fā)[5]。
4.高速數(shù)據(jù)采集卡軟件設(shè)計
衡量數(shù)據(jù)采集卡的標(biāo)準(zhǔn)有兩個:數(shù)據(jù)采集速率以及數(shù)據(jù)傳輸速率。當(dāng)然,數(shù)據(jù)的處理和分析能力也很重要[6]。本論文設(shè)計的數(shù)據(jù)采集系統(tǒng)的軟件是基于多線程和異步調(diào)用的方式,主要可以分為兩個子線程:數(shù)據(jù)處理和數(shù)據(jù)傳輸。
5.結(jié)束語
數(shù)據(jù)采集在工業(yè)系統(tǒng)中占據(jù)十分重要的位置,這是因為無論是控制系統(tǒng)還是計算機,都需要對外界采集的數(shù)據(jù)進(jìn)行分析和處理。采集數(shù)據(jù)一般使用數(shù)據(jù)采集卡,相應(yīng)的軟件系統(tǒng)可以分成兩個部分:驅(qū)動程序以及應(yīng)用程序。傳統(tǒng)的數(shù)據(jù)采集采用的是單線程,但是實時性并不理想。本論文介紹了基于多線程和異步IO調(diào)用的數(shù)據(jù)采集系統(tǒng),經(jīng)驗證,數(shù)據(jù)的實時性和可靠性都得到了很大的提高。
參考文獻(xiàn)
[1]潘愛民,王國印.V isualC++技術(shù)內(nèi)幕[M].北京:清華大學(xué)出版社(第4版),2001.
[2]史惠康.Visual C+ +5.0實用編程技術(shù)[M].北京:中國水利水電出版社,1999.
[3]邢瑞川,安世奇,疏學(xué)明.多線程技術(shù)在數(shù)據(jù)采集中的應(yīng)用[J].包頭鋼鐵學(xué)院學(xué)報.2001,20(2):157-160.
[4]李光春,黃建國,王志剛.多線程技術(shù)在數(shù)據(jù)采集中的應(yīng)用[J].技術(shù)平臺,2009,7:85-87.
[5]李竹青,徐建南,王志剛,田書林.基于異步I/O與多線程技術(shù)的數(shù)據(jù)采集卡軟件設(shè)計[J].測控技術(shù),2008(08).
[6]普措才仁,孫旸.基于LabWindows/CVI多線程技術(shù)數(shù)據(jù)采集系統(tǒng)的構(gòu)建[J].甘肅聯(lián)合大學(xué)學(xué)報(自然科學(xué)版),2007(05).