欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

多傳感器探測數(shù)組數(shù)據(jù)實時采集方法

文檔序號:6576818閱讀:323來源:國知局
專利名稱:多傳感器探測數(shù)組數(shù)據(jù)實時采集方法
技術領域
本發(fā)明涉及一種數(shù)據(jù)實時采集算法設計,尤其是一種多傳感器探測數(shù)組數(shù)據(jù) 實時采集方法。
背景技術
在大氣傳輸實驗中,要求用軟件準確無誤的獲取多傳感器探測數(shù)組測試系統(tǒng) 的采樣數(shù)據(jù)。而此測試系統(tǒng)是由16個探測模塊構成,每個模塊是由8行8列共 64個傳感器組成的探測數(shù)組,共有1024個探測單元。各個模塊的連接和控制如 附圖一所示。對于每個模塊,其上面的64個探測器都可以通過單片機進行尋址。 然后依照單片機輸出給模擬開關的控制信號,選通對應模塊,使該模塊的數(shù)據(jù)能 夠通過模擬開關送入數(shù)據(jù)采集卡,最后送入計算機進行處理。
在實驗中遇到的主要難點是數(shù)組模塊的輸出信號是模擬信號,所以必須進 行A/D轉換,才能將信號錄入計算機?;诖?,采用PC104接口數(shù)據(jù)采集卡。 PC104接口的最大瓶頸是重復長時間使用時傳輸速率低,而實驗的數(shù)據(jù)采集信息 量大,采集速度和實時性要求高,采集時間較長,且數(shù)據(jù)采集具有不可重復性, 并要求保證數(shù)據(jù)的完整性,顯然PC104接口難以滿足實驗要求。如果不能實時、 高速、準確而又完整的獲取實驗中的數(shù)據(jù)信息,就會給大氣傳輸特性的研究造成 非常大的誤差,甚至會造成整個實驗前功盡棄。

發(fā)明內(nèi)容
本發(fā)明的目的是提供一種多傳感器探測數(shù)組數(shù)據(jù)實時采集方法,通過采用 Microsoft Visual C#2005平臺在計算機中的編程,以解決采用PC104采集卡所導 致的數(shù)據(jù)傳輸速率無法滿足實驗數(shù)據(jù)傳輸速率要求的問題。
為了達到上述目的,本發(fā)明所采用的技術方案為
一種多傳感器探測數(shù)組數(shù)據(jù)實時采集方法,其特征在于采用Microsoft Visual C#2005平臺在計算機中進行編程,通過編程后的計算機對數(shù)據(jù)采集卡及 單片機進行控制;編程時采用線程池技術,在程序的數(shù)據(jù)采集線程中創(chuàng)建線程池, 控制線程、繪圖線程在線程池創(chuàng)建的次線程中運行;
所述數(shù)據(jù)采集進程中,設置一個數(shù)據(jù)HFIFO緩沖區(qū)指針,所述緩沖區(qū)大小為8192個字節(jié);當總線上出現(xiàn)數(shù)據(jù)時,首先將接收到的數(shù)據(jù)幀放入HFIFO緩沖 區(qū);所述緩沖區(qū)分為5種狀態(tài)
0 表示HFIFO空;
1 表示HFIFO非空但不到半滿;
2 表示HFIFO達到或超過半滿,但未到全滿;
3 表示HFIFO全滿; 其它數(shù)值 表示未知狀態(tài),
當數(shù)據(jù)未達到緩沖區(qū)大小的一半時,即狀態(tài)0和1:此時不產(chǎn)生數(shù)據(jù)采集事 件,數(shù)據(jù)將駐留在HFIFO緩沖區(qū)中,數(shù)據(jù)采集線程等待;
當數(shù)據(jù)達到或超過緩沖區(qū)大小的一半但未全滿即狀態(tài)2:進程將先判斷一下
HFIFO狀態(tài),若為半滿,就讀4096個數(shù);超過半滿,但未全滿,此時讀數(shù)分2 次,先將前4096個數(shù)讀出,再將后面的數(shù)據(jù)全部讀出,即讀空HFIFO;
當HFIFO全滿即狀態(tài)3:此時數(shù)據(jù)采集進程只要讀空HFIFO或達到用戶指 定的個數(shù)就可返回,讀數(shù)也分2次,先將前4096個數(shù)讀出,再讀空HFIFO;
其它數(shù)值表未知狀態(tài),不應該出現(xiàn);
所述數(shù)據(jù)卡采集到的數(shù)據(jù)優(yōu)先保存,并以二進制形式直接保存進文件-, 繪圖線程分為第一繪圖線程、第二繪圖線程;
狀態(tài)2時進入第一繪圖線程,在繪圖時要求先判斷一下HFIFO狀態(tài),若為 半滿,就讀前4幀即4096個像素,然后立刻返回,進行繪圖,繪圖時只繪出第 一幀,最后保存;
狀態(tài)3時進入第二繪圖線程,讀滿8幀即8192個像素,然后立刻返回,進
行繪圖,繪圖時也只繪出第一幀,最后保存。
狀態(tài)2時分兩批讀數(shù)的優(yōu)點在于以下兩方面:第一,縮短了一次讀數(shù)的時間;
第二,低字節(jié)的數(shù)據(jù)讀完后,為HFIFO騰出了空間,以便總線板中接收到的數(shù)
據(jù)幀繼續(xù)放入HFIFO緩沖區(qū),數(shù)據(jù)不易丟失,保證了數(shù)據(jù)的完整性。
狀態(tài)3即為數(shù)據(jù)溢出的臨界狀態(tài),為保證既有數(shù)據(jù)的有效性,系統(tǒng)設計了數(shù) 據(jù)冗余,即使數(shù)據(jù)少量溢出,因為數(shù)據(jù)快速轉移仍然可以保證數(shù)據(jù)可有效恢復。 經(jīng)測試,系統(tǒng)可在100K速率下得到完整數(shù)據(jù)。
由于測試系統(tǒng)是由16個探測模塊構成傳感器探測數(shù)組。要對多路參數(shù)進行 檢測和控制,為了降低整個系統(tǒng)的復雜度,實現(xiàn)數(shù)據(jù)采集的實時性和完整性。需要數(shù)據(jù)采集控制軟件具有多任務并行的能力,即設計多個線程,并且由于完成的 任務不同,各線程的設計也不盡相同。本發(fā)明軟件平臺采用Micro公司的 Microsoft Visual C# 2005,該平臺具有接口友好、功能強大、資源豐富等優(yōu)點, 完全面向對象的編程和消息處理。軟件共設計包括數(shù)據(jù)采集線程、控制線程、繪 圖線程,程序運行中最多時會出現(xiàn)三個線程并行運行的可能。
由于數(shù)據(jù)采集的要求高,為保證大量數(shù)據(jù)的完整性,數(shù)據(jù)采集線程優(yōu)先級高 于控制線程,并能保證糾錯恢復功能,還可滿足采集過程的高速要求和中斷要求。
由于多傳感器探測系統(tǒng)采樣數(shù)據(jù)信息量大、采集時間較長或不受時間限制, 不便于存儲和實時傳輸。軟件設計中將采集到的數(shù)據(jù)并不駐留在內(nèi)存中而是在第 一時間以二進制的形式直接保存進檔,這就解決了長時間數(shù)據(jù)采集的問題。
本發(fā)明采用Microsoft Visual C# 2005平臺設計了事件觸發(fā)與實時多任務相
結合的控制方式在實驗開始前的空閑階段,主線程運行,數(shù)據(jù)采集線程等待。
實驗開始后,主線程在低優(yōu)先級下繼續(xù)運行,數(shù)據(jù)采集線程轉入高優(yōu)先級運行。 在數(shù)據(jù)采集算法設計中采用事件觸發(fā)方式。并充分利用數(shù)據(jù)采集卡提供的緩存 器,對數(shù)據(jù)進行分時,集中傳遞,減少計算機與外設通行的次數(shù)。以實現(xiàn)實驗中 數(shù)據(jù)采集的實時性控制,并使采集的數(shù)據(jù)具有高效性、完整性、高可靠性、實時 性等優(yōu)點。


圖1為探測模塊控制圖。
圖2為數(shù)據(jù)采集線程流程圖。 圖3為繪圖線程流程圖。
具體實施例方式
一種多傳感器探測數(shù)組數(shù)據(jù)實時采集算法設計方法,采用Microsoft Visual C#2005平臺在計算機中進行編程,通過編程后的計算機對數(shù)據(jù)采集卡及單片機 進行控制;編程時采用線程池技術,在程序的數(shù)據(jù)采集線程中創(chuàng)建線程池,控制 線程、繪圖線程在線程池創(chuàng)建的次線程中運行;所述數(shù)據(jù)卡采集到的數(shù)據(jù)優(yōu)先保 存,并以二進制形式直接保存進文件。
所述數(shù)據(jù)采集線程中,設置一個數(shù)據(jù)HFIFO緩沖區(qū)指針,所述緩沖區(qū)大小 為8192個字節(jié),所述緩沖區(qū)分為5種狀態(tài) 0 表示HFIFO空;1 表示HFIFO非空但不到半滿;
2 表示HFIFO達到或超過半滿,但未到全滿;
3 表示HFIFO全滿;
其它數(shù)值 表示未知狀態(tài);
所述數(shù)據(jù)采集線程程序代碼如下 unsafe void DataThread()
card.DisableAD();
card.ClearHFifo();
card.EnableAD(); try
while(state)
switch(card.GetHFifoStatus())
break; C3scl:
break; case2:
try
this.GatherData(l);
catch { break; C3se3: try
this.GatherData(2);
catch
break; default:
Console. WriteLine("test"); break;
catch(ThreadAbortException tae){ 一 〃 MessageBox.Show("采集結束,,,tae.Message,
〃 MessageBoxButtons.OK,MessageBoxIcon.Information); catch
MessageBox.Show("檢查采集設備電源,電源可能未打開!!", "釆集設備無法工作!!",
MessageBox.Buttons.OK,MessageBoxIcon.Error); GatherThread.Abort();
所述數(shù)據(jù)采集線程程序代碼中,DataThread()為數(shù)據(jù)采集線程函數(shù), GetHFifoStatus()為獲得狀態(tài)函數(shù)。
所述緩沖區(qū)為狀態(tài)2和狀態(tài)3時,事件返回后進入繪圖線程,所述繪圖線程
程序代碼如下
unsafe void GatherData(int status)
int size=4096*status;
Intl6*p=stackalloc Intl6[size]; 〃8k
card.GatherHFifoData(p,(UInt32)status,8192);
bool bb二false;
if(bq)
bb=true; bq二false;
else
bb二false;
byte[ ] nData=this.MakeData(p,bb);〃DataIO.cs byte[,] picData=this.BufferData(nData); Bitmap bm=this.MakePic(picData); int y;
y=this.menuStripl .Size.Height; this.pictureBoxl .Image=bm; if(this.OnSaveData !=null)
{
this.OnSaveData(this,
new SaveDataEventArgs(new IntPtr(p),this.filName,status));20 所述GatherData()為繪圖線程函數(shù)。
所述數(shù)據(jù)保存程序如下
unsafe protected void SaveData(object sender,SaveDataEventArgs e) 〃資料
保存
Intl6*p=(Intl6*)e.ResultAddr;
String fn=this.myDir+@ "\"+e.FileName
Console. WriteLine(e.Status);
try
Filelnfo fi=new Filelnfo(fn); using(FileStream fs=fi.Open(FileMode.Append,
FileAccess.Write))
using(Bingary Writer bw=new Binary Writer(fs)) for(int i=0;i<4096*e.Status;i++) bw,Write(p[i]);
catch(Exception ex)
Console.WriteLine(ex.Message);
所述SaveData()函數(shù)為數(shù)據(jù)保存函數(shù),所述SaveData()函數(shù)中將采集到的數(shù)
據(jù)以二進制形式直接保存到路徑為e.FileName的文件中。
在Microsoft Visual C# 2005多線程程序中,使用數(shù)據(jù)采集線程創(chuàng)建、顯示并
運行用戶接口,在次線程中運行其它的對時間要求很高的操作(如DAQ)。
Microsoft Visual C# 2005平臺提供了兩種在Windows的次線程中運行代碼的高
級機制,分別是線程池(thread pools)和異歩定時器(asynchronous timers)。
線程池適用于需要連續(xù)地執(zhí)行多次或在循環(huán)中執(zhí)行的任務,而異歩定時器適 用于在固定時間間隔內(nèi)執(zhí)行的任務。
由于試驗中參數(shù)的采集和總線數(shù)據(jù)的收發(fā)是首要的任務,需要連續(xù)地執(zhí)行。
8因此,編程時采用線程池技術,在程序的主線程(數(shù)據(jù)采集線程)中創(chuàng)建線程池, 控制線程、繪圖線程都在線程池創(chuàng)建的次線程中運行。具體程序中設置了數(shù)據(jù)采 集線程函數(shù)DataThread(),獲得狀態(tài)函數(shù)GetHFifoStatus()。在獲取HFIFO狀態(tài)中, 用了4個"Case: break;"語句來判斷狀態(tài),從而進行循環(huán)。
當進入狀態(tài)2和3時,事件返回后便進入繪圖線程,軟件只設置GatherData() 為繪圖線程函數(shù)。線程空閑時則進行圖像的播放,數(shù)據(jù)優(yōu)先保存,SaveData()為 數(shù)據(jù)保存函數(shù)。SaveData()函數(shù)中將采集到的數(shù)據(jù)以二進制形式直接保存到路徑 為e.FileName的文件中。程序設計時采用直接指標方式,提高了傳輸數(shù)據(jù)的效 率。
權利要求
1、一種多傳感器探測數(shù)組數(shù)據(jù)實時采集方法,其特征在于采用MicrosoftVisual C#2005平臺在計算機中進行編程,通過編程后的計算機對數(shù)據(jù)采集卡及單片機進行控制;編程時采用線程池技術,在程序的數(shù)據(jù)采集線程中創(chuàng)建線程池,控制線程、繪圖線程在線程池創(chuàng)建的次線程中運行;所述數(shù)據(jù)采集進程中,設置一個數(shù)據(jù)HFIFO緩沖區(qū)指針,所述緩沖區(qū)大小為8192個字節(jié);當總線上出現(xiàn)數(shù)據(jù)時,首先將接收到的數(shù)據(jù)幀放入HFIFO緩沖區(qū);所述緩沖區(qū)分為5種狀態(tài)0 表示HFIFO空;1 表示HFIFO非空但不到半滿;2 表示HFIFO達到或超過半滿,但未到全滿;3 表示HFIFO全滿;其它數(shù)值 表示未知狀態(tài),當數(shù)據(jù)未達到緩沖區(qū)大小的一半時,即狀態(tài)0和1此時不產(chǎn)生數(shù)據(jù)采集事件,數(shù)據(jù)將駐留在HFIFO緩沖區(qū)中,數(shù)據(jù)采集線程等待;當數(shù)據(jù)達到或超過緩沖區(qū)大小的一半但未全滿即狀態(tài)2進程將先判斷一下HFIFO狀態(tài),若為半滿,就讀4096個數(shù);超過半滿,但未全滿,此時讀數(shù)分2次,先將前4096個數(shù)讀出,再將后面的數(shù)據(jù)全部讀出,即讀空HFIFO;當HFIFO全滿即狀態(tài)3此時數(shù)據(jù)采集進程只要讀空HFIFO或達到用戶指定的個數(shù)就可返回,讀數(shù)也分2次,先將前4096個數(shù)讀出,再讀空HFIFO;其它數(shù)值表未知狀態(tài),不應該出現(xiàn);所述數(shù)據(jù)卡采集到的數(shù)據(jù)優(yōu)先保存,并以二進制形式直接保存進文件;繪圖線程分為第一繪圖線程、第二繪圖線程;狀態(tài)2時進入第一繪圖線程,在繪圖時要求先判斷一下HFIFO狀態(tài),若為半滿,就讀前4幀即4096個像素,然后立刻返回,進行繪圖,繪圖時只繪出第一幀,最后保存;狀態(tài)3時進入第二繪圖線程,讀滿8幀即8192個像素,然后立刻返回,進行繪圖,繪圖時也只繪出第一幀,最后保存。
全文摘要
本發(fā)明涉及一種多傳感器探測數(shù)組數(shù)據(jù)實時采集方法,采用Microsoft VisualC#2005平臺在計算機中進行編程,通過編程后的計算機對數(shù)據(jù)采集卡及單片機進行控制;編程時采用線程池技術,在程序的數(shù)據(jù)采集線程中創(chuàng)建線程池,控制線程、繪圖線程在線程池創(chuàng)建的次線程中運行;所述數(shù)據(jù)卡采集到的數(shù)據(jù)優(yōu)先保存,并以二進制形式直接保存進文件。本發(fā)明充分利用數(shù)據(jù)采集卡提供的緩存器,對數(shù)據(jù)進行分時·集中傳遞,減少計算機與外設通行的次數(shù)。以實現(xiàn)實驗中數(shù)據(jù)采集的實時性控制,并使采集的數(shù)據(jù)具有高效性、完整性、高可靠性、實時性等優(yōu)點。
文檔編號G06F3/05GK101488074SQ20091011625
公開日2009年7月22日 申請日期2009年2月26日 優(yōu)先權日2009年2月26日
發(fā)明者楓 何, 侯再紅, 劉潔群, 毅 吳 申請人:中國科學院安徽光學精密機械研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
靖西县| 红河县| 百色市| 东明县| 建昌县| 萨迦县| 图木舒克市| 凤凰县| 永顺县| 南平市| 渭南市| 西城区| 灵璧县| 莱芜市| 锡林郭勒盟| 富源县| 南涧| 梓潼县| 东安县| 宝应县| 昌江| 海南省| 龙山县| 筠连县| 喜德县| 云阳县| 荃湾区| 宣化县| 全南县| 淮阳县| 茶陵县| 从化市| 新干县| 阿巴嘎旗| 定日县| 融水| 镇赉县| 梅河口市| 阳东县| 乌鲁木齐县| 印江|