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