李苗
摘要:目前數(shù)據(jù)采集和處理系統(tǒng)中存在采樣數(shù)據(jù)丟失、延時(shí)、效率低等問(wèn)題,基于異步I/O調(diào)用、多線程、循環(huán)緩存技術(shù),本文設(shè)計(jì)出一種改進(jìn)型數(shù)據(jù)采集和處理系統(tǒng)。該系統(tǒng)可以實(shí)現(xiàn)軟件程序與數(shù)據(jù)采集卡之間實(shí)時(shí)、高速、無(wú)阻塞的數(shù)據(jù)傳輸。
關(guān)鍵詞:數(shù)據(jù)采集;循環(huán)緩存機(jī)制;多線程技術(shù);異步I/O調(diào)用
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)31-0005-02
The Improved Data Acquisition and Processing System Based on Windows
LI Miao
(School of Computer Science, Xian Shiyou University, Xian 710065, China)
Abstract: Based on sampling data in the data acquisition and processing system is lost, delaying and low efficiency, this paper designed a new data acquisition and data process system based on several technologies of asynchronous I/O calls,multi-threading and circulation caching mechanism. It can realize real-time, high-speed and non-blocking data transmission between software programs and data acquisition card.
Key words: Data acquisition;circulation-caching mechanism; Multithreading technology; Asynchronous I/O calls
隨著測(cè)量精度要求的提升,數(shù)據(jù)采集處理系統(tǒng)對(duì)數(shù)據(jù)采樣的實(shí)效性、準(zhǔn)確性等要求越來(lái)越高,常見的數(shù)據(jù)采集系統(tǒng)包括硬件和軟件系統(tǒng)兩部分,其中硬件采用數(shù)據(jù)采集卡,軟件由驅(qū)動(dòng)程序和應(yīng)用程序組成。驅(qū)動(dòng)程序是硬件和軟件連接的橋梁,主要是實(shí)現(xiàn)軟硬件之間的數(shù)據(jù)通信。應(yīng)用軟件是整個(gè)數(shù)據(jù)采集系統(tǒng)的核心,完成數(shù)據(jù)采集、處理、顯示等功能。本文設(shè)計(jì)的數(shù)據(jù)采集和處理應(yīng)用程序采用異步I/O調(diào)用,使程序與數(shù)據(jù)采集卡之間完成暢通的數(shù)據(jù)交互;不同應(yīng)用程序之間運(yùn)用多線程技術(shù)和循環(huán)緩存技術(shù),改進(jìn)后的系統(tǒng)能夠提高資源利用率,實(shí)現(xiàn)高速完整的數(shù)據(jù)集采集,具有開發(fā)周期短、可靠性高、成本低、通用性好等優(yōu)點(diǎn)。
1 基于Windows系統(tǒng)的改進(jìn)型數(shù)據(jù)采集和處理系統(tǒng)
數(shù)據(jù)采集卡的軟件系統(tǒng)包括驅(qū)動(dòng)程序和應(yīng)用程序設(shè)計(jì),傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)應(yīng)用程序通常采用同步I/O調(diào)用驅(qū)動(dòng)程序和單線程,存在系統(tǒng)阻塞、延時(shí)問(wèn)題。使用異步I/O調(diào)用可以解決系統(tǒng)阻塞問(wèn)題,使用多線程技術(shù)配合循環(huán)緩存技術(shù),不同線程完成不同功能,并對(duì)高速連續(xù)信號(hào)進(jìn)行采集、顯示、存儲(chǔ),既可以保證系統(tǒng)的實(shí)時(shí)性,又可以節(jié)約系統(tǒng)資源。
1.1 應(yīng)用程序與驅(qū)動(dòng)程序之間的通信
跨平臺(tái)驅(qū)動(dòng)程序模型WDM中驅(qū)動(dòng)程序與應(yīng)用程序之間通過(guò)異步I/O調(diào)用和事件通知的方式進(jìn)行數(shù)據(jù)通信。通過(guò)調(diào)用事件程序,WDM與應(yīng)用程序進(jìn)行數(shù)據(jù)交互。在接收I/O請(qǐng)求后,驅(qū)動(dòng)程序檢測(cè)事件發(fā)生情況。分為兩種情況:事件發(fā)生并即將與應(yīng)用程序交互,驅(qū)動(dòng)程序會(huì)通過(guò)WDM的調(diào)度例程完成驅(qū)動(dòng)程序與應(yīng)用程序之間的數(shù)據(jù)通信;如果沒(méi)有事件等待,應(yīng)用程序會(huì)調(diào)用系統(tǒng)函數(shù)來(lái)完成I/O的數(shù)據(jù)采集。
1.2 多線程和循環(huán)存儲(chǔ)技術(shù)概述
程序運(yùn)行的基本單元包括進(jìn)程和線程,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的并發(fā)性。一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位。OS為每個(gè)線程分配一定的CPU時(shí)間,接下來(lái)為每一個(gè)線程以循環(huán)方式提供一定的時(shí)間片,保證幾個(gè)線程運(yùn)行一致。線程不擁有系統(tǒng)資源,只與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。一個(gè)線程通過(guò)創(chuàng)建和撤銷另一個(gè)線程,并與同一個(gè)進(jìn)程中的多個(gè)線程之間并發(fā)執(zhí)行。從邏輯角度來(lái)看,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行,具有系統(tǒng)管理開銷小、線程間切換快、并行程度高、易于通信等優(yōu)勢(shì)。
Windows是一種多任務(wù)的非實(shí)時(shí)操作系統(tǒng),通常Windows系統(tǒng)中線程切換時(shí)間需要20ms,因此數(shù)據(jù)處理和顯示會(huì)對(duì)實(shí)時(shí)數(shù)據(jù)采集造成一定的時(shí)延,造成數(shù)據(jù)丟失。多線程可以更好的開發(fā)并行性和提高系統(tǒng)性能,是一種系統(tǒng)設(shè)計(jì)發(fā)展趨勢(shì),為減少系統(tǒng)工作過(guò)程中數(shù)據(jù)處理、存儲(chǔ)和顯示對(duì)高速連續(xù)數(shù)據(jù)采集產(chǎn)生的時(shí)延作用,采用多線程技術(shù)可以有效地減少Windows等待時(shí)間,提高程序執(zhí)行效率。
本系統(tǒng)將數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)顯示以及存儲(chǔ)放在多個(gè)線程中,這幾個(gè)While循環(huán)是并行運(yùn)行的,從而保證每個(gè)獨(dú)立的數(shù)據(jù)采集程序不受其他線程的影響;在數(shù)據(jù)采集存儲(chǔ)中引用了循環(huán)緩存技術(shù),保證采集到的數(shù)據(jù)的準(zhǔn)確性和實(shí)效性。
數(shù)據(jù)采集與處理系統(tǒng)運(yùn)行時(shí),數(shù)據(jù)采集線程將數(shù)據(jù)采集卡采集到的數(shù)據(jù)放入內(nèi)存緩沖區(qū),數(shù)據(jù)處理線程將內(nèi)存緩沖區(qū)中的數(shù)據(jù)讀取處理,并加以分析和顯示。采集的數(shù)據(jù)積累到一定的量后,自動(dòng)啟動(dòng)數(shù)據(jù)存儲(chǔ)線程,實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)并掛起。通過(guò)事件消息機(jī)制同步數(shù)據(jù)采集、分析、顯示和存儲(chǔ)線程,以全局?jǐn)?shù)據(jù)對(duì)象的方式完成資源共享、最終達(dá)到高速、連續(xù)、實(shí)時(shí)的數(shù)據(jù)采集和處理。
2 改進(jìn)型的數(shù)據(jù)采集和處理系統(tǒng)軟件設(shè)計(jì)
所有線程可以訪問(wèn)內(nèi)存堆棧、串口、文件等各種系統(tǒng)資源,基于Windows操作系統(tǒng)的事件對(duì)象可以使程序管理同一個(gè)或不同進(jìn)程中的線程之間所共享的數(shù)據(jù)與資源訪問(wèn)。在線程訪問(wèn)資源之前,需要等待該資源對(duì)應(yīng)的事件的發(fā)生。通過(guò)函數(shù)庫(kù)中的CreateEvent() 函數(shù)建立事件對(duì)象,這樣就可以直接控制事件對(duì)象的狀態(tài)。創(chuàng)建SetEvent()函數(shù)可以將事件狀態(tài)由未知改為已通知狀態(tài);創(chuàng)建和調(diào)用ResetEvent() 函數(shù),可以將該事件重置為未通知狀態(tài)。Win32 API提供了一組能使線程阻塞其自身執(zhí)行的等待函數(shù)(如WaitForSingleObject()),在函數(shù)未返回時(shí),線程將處于等待狀態(tài),此時(shí)線程只消耗很少的CPU時(shí)間。通過(guò)調(diào)用等待函數(shù)不僅可以實(shí)現(xiàn)線程同步,而且可以提高系統(tǒng)的執(zhí)行效率,具體的系統(tǒng)程序運(yùn)行情況圖1所示。
圖1 數(shù)據(jù)采集主程序框圖
通過(guò)循環(huán)存儲(chǔ)方式,合理分配存儲(chǔ)空間,在系統(tǒng)運(yùn)行時(shí)存儲(chǔ)數(shù)據(jù),每次只占據(jù)緩存區(qū)的一部分,當(dāng)達(dá)到緩存區(qū)底部時(shí),轉(zhuǎn)向緩存區(qū)頂部再次填充同一緩存區(qū),并依次讀取數(shù)據(jù),實(shí)現(xiàn)連續(xù)采集數(shù)據(jù)。在存儲(chǔ)過(guò)程中,合理分配存儲(chǔ)空間的大小和存儲(chǔ)速率,實(shí)現(xiàn)應(yīng)用程序從緩沖區(qū)的特定位置讀取數(shù)據(jù),同時(shí)新采集的數(shù)據(jù)存入緩存區(qū)的另一位置,這樣可以保證一個(gè)線程能夠正常讀取數(shù)據(jù),另一線程又可以完成數(shù)據(jù)更新,保證讀取的數(shù)據(jù)不會(huì)被更新的數(shù)據(jù)覆蓋,不會(huì)出現(xiàn)數(shù)據(jù)丟失和錯(cuò)亂,實(shí)現(xiàn)數(shù)據(jù)采集與處理的并行性。
3 結(jié)束語(yǔ)
本系統(tǒng)的優(yōu)勢(shì)主要體現(xiàn)在以下幾個(gè)方面:(1) 高速數(shù)據(jù)采集卡與應(yīng)用程序之間,通過(guò)異步I/O調(diào)用的方式可以有效地解決采集系統(tǒng)阻塞問(wèn)題;(2) 多線程和循環(huán)緩存技術(shù)的運(yùn)用,可以節(jié)約系統(tǒng)資源,提高了采集與處理的效率。
若數(shù)據(jù)采集卡每次采樣后,連續(xù)傳輸10KB的數(shù)據(jù),其傳輸時(shí)間約為130μs,數(shù)據(jù)處理時(shí)間約為160μs。在傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)中,工作流程是先讀數(shù)據(jù),再進(jìn)行數(shù)據(jù)處理,而改進(jìn)后的數(shù)據(jù)采集、處理系統(tǒng),使用異步I/O調(diào)用、多線程、循環(huán)緩存技術(shù),第二次數(shù)據(jù)處理與第一次數(shù)據(jù)處理是并行同步進(jìn)行的,執(zhí)行效率可以大幅度提升。實(shí)驗(yàn)結(jié)果顯示,改進(jìn)后的數(shù)據(jù)處理性能得到大幅度提升,隨著數(shù)據(jù)量的增加,數(shù)據(jù)執(zhí)行效率較傳統(tǒng)數(shù)據(jù)采集、處理系統(tǒng)得到大幅度提升。
參考文獻(xiàn):
[1] 邢瑞川, 安世奇, 疏學(xué)明. 多線程技術(shù)在數(shù)據(jù)采集中的應(yīng)用[J]. 包頭鋼鐵學(xué)院學(xué)報(bào), 2001,20(2):157-160.
[2] 李光春, 黃建國(guó), 王志剛. 多線程技術(shù)在數(shù)據(jù)采集中的應(yīng)用[J]. 技術(shù)平臺(tái), 2009(7): 85-87.
[3] 李竹青, 徐建南, 王志剛, 等. 基于異步I/O與多線程技術(shù)的數(shù)據(jù)采集卡軟件設(shè)計(jì)[J]. 測(cè)控技術(shù), 2008(8).
[4] 向科峰. 基于LabVIEW的數(shù)據(jù)采集系統(tǒng)若干問(wèn)題[D]. 西南科技大學(xué), 2007:24-33.
[5] 楊西俠, 柯晶.信號(hào)分析與處理[M]. 北京: 機(jī)械工業(yè)出版社, 2007.
[6] 王夢(mèng)羚, 王思明. 基于PCI-1713和LabVIEW的高速數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J]. 微計(jì)算機(jī)信息, 2006,22(7-1):120-122.
[7] 閆玲, 方開祥, 姚壽廣. 基于LabVIEW的多功能數(shù)據(jù)采集與信號(hào)處理系統(tǒng)[J]. 江蘇科技大學(xué)學(xué)報(bào):自然科學(xué)版, 2006,20(3):50-54.
[8] 宋庭新, 桂婕. 便捷式動(dòng)態(tài)信號(hào)采集系統(tǒng)的研制[J]. 計(jì)算機(jī)測(cè)量與控制, 2004,12(2):161-163.
[9]李建宏,何玉珠.多線程技術(shù)在復(fù)雜數(shù)據(jù)采集系統(tǒng)中的應(yīng)用[J].電子測(cè)量技術(shù),2008,31(5):102-104.