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