999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種改進型多線程機制在數據采集系統中的應用

2019-08-13 09:26:29王嘉范蟠果毛恒
計算技術與自動化 2019年4期
關鍵詞:數據采集

王嘉 范蟠果 毛恒

摘? ?要:為緩解數據采集實時性要求較高和數據處理延時較大之間的矛盾,研究了LabWindows/CVI軟件開發環境下的多線程機制和相關的數據保護機制。并對傳統數據采集多線程機制進行改進,除了為數據采集任務創建線程外,單獨為每一路數據通道創建獨立的線程用以處理該通道數據。實驗結果表明:改進后的多線程機制更加適合數據處理耗時較長、數據通道多、實時性要求嚴格的系統,能顯著提高系統實時性和軟件運行效率。

關鍵詞:LabWindows/CVI;多線程;數據采集;數據通道

中圖分類號:TP29? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼:A

Application of an Improved Multithreading Mechanism

in Data Acquisition System

WANG Jia?覮,FAN Pan-guo,MAO Heng

(Northwestern Polytechnical University,Xi'an,Shaanxi 710072,China)

Abstract:In order to alleviate the contradiction between high real-time requirement of data acquisition and large data processing delay,the multithreading mechanism and related data protection mechanism in LabWindows/CVI environment are studied. For the purpose of improvement,in addition to creating threads for data acquisition tasks,separate threads are created for each data channel to process the channel data. The experimental results show that the improved multi-threading mechanism is more suitable for systems with long data processing time,multiple data channels and strict real-time requirements,and can significantly improve the real-time performance of the system and the efficiency of software operation.

Key words:LabWindows/CVI;multi-threading;data acquisition;data channel

隨著計算機技術和測控技術的快速發展,在工程應用中,多任務并行能力已成為衡量測控軟件性能的重要標準之一。而計算機中的多線程技術特別適用于實時性強的多任務系統[1],在測控軟件中運用多線程機制,可以同步并行完成多個任務,從而提高軟件的運行效率和系統的響應速度。在本文中將傳統多通道數據采集系統的多線程機制進行改進,有效緩解了數據采集實時性要求較高和數據處理延時較大之間的矛盾,確保了兩者的同步性。

1? ?LabWindows/CVI多線程技術

多線程技術基于操作系統的時間片輪轉調度機制,使多個任務在宏觀上并行執行。在典型應用多線程的LabWindows/CVI程序中,開發者使用主線程來創建用戶界面并響應其動作,而使用輔助線程來進行其它時間要求嚴格的操作[2],如數據采集、實時監控等,極大提高了CPU使用率和程序的運行效率。LabWindows/CVI中有兩種設計線程的方法,分別是線程池技術和異步定時器技術。線程池適合于不連續地執行若干次或者在循環內執行的任務,而異步定時器適用于按照固定時間間隔執行的任務[3]。

為了避免線程競爭引發的邏輯錯誤,在CVI中有三種保護數據的機制,分別是線程鎖、線程安全變量和線程安全隊列[4]。

1.1? ?線程池機制

線程池是一種多線程處理形式,其通過主線程中創建,而輔助線程在線程池中創建和管理[5]。線程池的目的是使得線程可以重復調用,即執行完一個任務后該線程可以繼續執行其他任務而不是被注銷。用戶可以自由創建新的線程池或刪除現有線程池,進而通過這些線程池管理不同的輔助線程。

當系統需要同時處理多個任務時,用戶通過調用庫函數,將欲執行的函數傳遞到某線程池,該線程池就會將該函數分配到一個線程中去執行,這個函數被稱為線程函數[6]。通過這個過程,用戶將不同的任務分配到不同的線程執行,從而實現多任務并行。

1.2? ?異步定時器機制

異步定時器通過調用Windows的多媒體定時器,按照設定的時間間隔執行回調函數。其回調函數按照嚴格的時間間隔執行,非常適用于按照固定時間間隔執行的任務[8]。與同步定時器相比,異步定時器使用獨立線程,定時精度不受其他線程或用戶界面操作影響,確保了定時器事件的實時性和可靠性[1]。

1.3? ?數據保護機制

線程安全隊列是一種在線程間安全傳輸數據的數據保護機制,通常用于大批量數據傳輸。線程安全隊列內部采用了鎖策略,有效避免了線程間的沖突、數據錯誤、死鎖等情況的出現[7]。由于數據安全隊列采用FIFO工作模式[8],讀、寫線程可以同時對其進行操作,既保證了數據傳輸是安全可靠的,又提高了數據傳輸速度,非常適合數據采集系統。

2? ?多通道數據采集系統

某型飛機供電參數測試系統需要對多個節點的電氣信息進行采集,并按照《GJB5189-2003飛機供電特性參數測試方法》所規定的測試方法處理數據并進行顯示和保存。由于數據通路較多,測試算法復雜,單線程以及傳統多線程方案在此并不適用。為此,本文基于LabWindows/CVI軟件開發環境,設計了一種運行效率更高的多線程機制,并選用多通道同步數據采集卡、串口擴展卡以及工控機作為硬件平臺設計測試系統,僅使用一個USB口即可實現16路數字/模擬通道的測試。

2.1? ?系統介紹

該測試系統的測試對象為測試節點,其分為數字和模擬兩型。數字測試節點以固定時間間隔通過串口發送定量數據,而模擬測試節點通過數據采集卡進行A/D采樣,工控機通過多路選擇開關切換測試節點類型和以及控制對應測試通道的啟停(數字、模擬節點均為16個),所有通道的數據流都通過一個USB口輸入工控機,由測試系統上位機進行處理,系統結構如圖1所示。

2.2? ?傳統方案

傳統數據采集系統的程序一般可歸為以下三種工作模式,但它們并不適合通道數多、數據量大或者有復雜數據處理算法的系統,下面對它們簡單介紹。

1)單線程系統

使用單線程編程方法編寫程序時,整個應用程序只使用一條主線程,當使用者對用戶界面進行操作時,CPU可能會因為響應這些動作而影響數據采集和數據處理,也可能由于CPU始終得不到釋放導致用戶界面無響應,這都是不允許發生的,該方案只適合簡單的數據采集/處理系統。

2)雙線程系統

作為傳統單線程模式的改進,除主線程用以響應用戶動作外可再設置一條輔助線程用以輪詢采集和處理各個通道的數據。但在數據處理耗時遠大于數據采集耗時的情況下,若將這兩個任務放在同一線程運行,可能會因數據處理任務耗時過長,致使數據采集任務無法按時執行,從而導致數據緩存區覆蓋,嚴重影響測試結果。

3)擁有獨立數據采集線程、數據處理線程的系統

該方案是在第二種方案的基礎上加以改進,除主線程外,為數據采集任務和數據處理任務分別創建單獨的線程,該方案確保了系統的可靠性和響應速度。但該型供電參數測試系統數據通路多、所涉及的數據處理算法復雜,若在一條數據處理線程中完成所有通道的數據處理會使該線程的單次執行時長遠大于數據采集線程,又由于數據采集線程的優先級必須高于數據處理線程,數據處理線程會頻繁被數據采集線程阻塞。因此該方案在線程調度方面耗費資源過多,數據處理線程的執行效率低下。

2.3? ?系統特點

考慮到上述問題,在該系統中使用主線程創建、顯示并運行用戶界面,使用異步定時器為數據采集任務創建線程,確保其按照嚴格的時間間隔執行(在此設為0.1 s,讀取的數據量與數字/模擬節點0.1 s寫入工控機USB緩沖區的量相當,確保緩沖區內數據不會溢出),保證了數據采集的實時性;并單獨為每一路數據通道創建一條獨立的線程和一組對應的安全隊列,使得在數據采集線程從USB緩存區讀取數據的同時,所有通道的數據處理線程能同步接收數據采集線程讀取的數據,并對其進行解包、處理和顯示;另外還有一路高優先級輔助線程用以監測所有數據處理線程,確保緩沖區中所有通道的數據都解析完成后,數據處理任務才停止運行(所有數據處理線程才被釋放),進而轉向下一測試階段,線程間工作原理如圖2所示。

3? ?線程代碼實現

下面對線程的具體代碼實現進行介紹,因為所有數據流都通過工控機的特定USB口傳入,因此采集線程讀取數據的對象是USB緩存區。

3.1? ?數據采集線程

以下為數據采集輔助線程回調函數中,關于數據采集的代碼,該輔助線程通過異步定時器創建,為了確保系統可靠性,數據采集線程擁有最高的優先級。

for(i=0;i<16;i++) /*16通道*/

{

/*每隔0.1s一個測試節點往緩存寫入points個字節數據,points為變量*/

for(j=0;j

{

/*從USB緩沖區讀取數據*/

ByteRead1=ComRdByte(ComName[i]);

ReadBuffer1[i][J]=ByteRead1;

}

/*每讀完一通道就將數據寫入對應安全隊列*/

CmtWriteTSQData(queueHandle[i],&ReadBuffer1[i][0],points,0,NULL);

}

}

3.2? ?數據處理線程

該系統共有16條類似的數據處理線程與16路數據通道相對應,這些線程通過線程池創建,擁有相同的優先級。

int CVICALLBACK UnpackThread1(void *functionData)

{

/*unpack_flag1為線程運行/停止標志*/

while(unpack_flag1)

{

/*確保安全隊列中有數據可讀才進入數據處理過程*/

CmtGetTSQAttribute(queueHandle1,ATTR_TSQ_ITEMS_IN_QUEUE,&queue_item);

if(queue_item> 0)

{

/*從對應通道的安全隊列取出數據,根據測試算法要求,每次取出一定量的數據進行處理*/

item_num = CmtReadTSQData(queueHandle1,ReadBuffer2,set_points,TSQ_INFINITE_TIMEOUT,0);

if(item_num>= 0)

{

for(j=0;j

{

/*將從安全隊列讀出的數據存入該線程的緩存中,供數據處理使用*/

ByteRead2=ReadBuffer2[J];

UnpackBuffer[J]=ByteRead2;

}

/*進行數據解包、處理、儲存和實時顯示的代碼,在此省略*/

……

}

}

else

{

stop_count++;

/*當安全隊列一段時間無數據可讀時停止該線程運行*/

if(stop_count>10)

unpack_flag1 = 0;

}

}

return 0;

}

3.3? ?停止線程

由于每一通道的數據處理進程彼此獨立,其處理進度難免存在差異,有必要單獨設置一個停止線程對所有數據處理線程進行監控。當數據采集任務完成后,系統必須等待所有通道的數據都被處理完再切換至下一測試階段(此時才釋放所有輔助線程),否則可能導致數據丟失。具體實現方法為設置停止線程優先級高于數據處理線程,并持續對16條數據處理線程的運行標志位進行檢測,當所有標志位都為0時即可釋放包括停止線程自身在內的所有輔助線程。

4? ?結? ?論

在硬件相同的情況下,按照本文2.2節中第三方案編寫程序,與本文設計的多線程程序相比較,具體實驗內容如下:在20 kHz的采樣率下,使用四路通道連續采集峰峰值為1 V、頻率為50 Hz的正弦波信號60 s,并進行相關數據處理操作,查看數據處理完成進度(在程序中體現為所顯示的數據長度,60 s共采集到60*20*1000=1200000個數據點)。其中圖3截自本文2.2節中第三方案編制的程序,圖4截自本文提出的多線程機制程序,可見傳統多線程程序雖然保證了系統可靠性,但應用于復雜數據采集系統時線程間協同性較低,整體運行效率不高;提出的多線程機制充分發揮了計算機硬件資源的性能,在硬件支持的條件下基本可以實現數據采集和數據處理同步執行。

多線程技術在 Windows系統中已經被成熟運用[9],將其引入大數據量、實時性要求高的測控軟件具有很多優勢和工程應用價值。將傳統數據采集系統的多線程機制進行改進,提高了測試的實時性和系統資源利用率,并且通過安全隊列保證了數據在軟件內部傳遞的安全性,確保了測試的準確性。該型測試系統已在實際生產中應用,取得了良好的效果。

參考文獻

[1]? ? 單體強,陳雷,張萬發. LabWindows/CVI多線程技術的應用研究[J]. 電子設計工程,2012,20(15):52—54.

[2]? ? 馬青亮,周倫彬,鮑芳. Lab Windows/CVI的多線程機制在虛擬數字存儲示波器中的應用[J]. 中國測試,2008,34(1):60—62.

[3]? ? 張驚雷,王鑫,ZHANG Jing-lei,等. 基于LabWindows/CVI異步定時的多通道數據采集[J]. 測控技術,2014,33(2):100—102.

[4]? ? 楊秋虎. LabWindows/CVI多線程技術的應用[J]. 電子科技,2015,28(3):19.

[5]? ? 張偉,劉大偉. 隊列與多線程技術在交通監控系統通信軟件中的應用[J]. 上海船舶運輸科學研究所學報,2009,32(1):50—54.

[6]? ? 楊東升,王高峰. 多線程技術在虛擬儀器開發軟件LabWindows/CVI中的實現[J]. 電測與儀表,2005,42(3):39—41.

[7]? ? 張毅剛. 虛擬儀器軟件開發環境[M]. 北京:機械工業出版社,2002.

[8]? ? 程照宇,盛文,雷曉勇,等. 多線程技術在虛擬數字信號分析儀中的應用[J]. 中國測試,2008,34(1):74—76.

[9]? ? 周炎濤. Windows中的多線程編程技術和實現[J]. 計算技術與自動化,2002,21(3):109—116.

猜你喜歡
數據采集
Web網絡大數據分類系統的設計與改進
CAN總線通信技術在電梯監控系統中的應用
基于大型嵌入式系統的污水檢測系統設計
社會保障一卡通數據采集與整理技巧
基于AVR單片機的SPI接口設計與實現
CS5463在植栽用電子鎮流器老化監控系統中的應用
大數據時代高校數據管理的思考
科技視界(2016年18期)2016-11-03 22:51:40
鐵路客流時空分布研究綜述
基于廣播模式的數據實時采集與處理系統
軟件工程(2016年8期)2016-10-25 15:54:18
通用Web表單數據采集系統的設計與實現
軟件工程(2016年8期)2016-10-25 15:52:53
主站蜘蛛池模板: 欧美激情综合一区二区| 国产成人精品一区二区| 91年精品国产福利线观看久久| 在线毛片免费| 色135综合网| 亚洲国产中文综合专区在| 色欲综合久久中文字幕网| 国产精品第页| 成年人视频一区二区| 亚洲人成网站日本片| 国产亚洲视频中文字幕视频| 国产精品吹潮在线观看中文| 91高清在线视频| 露脸一二三区国语对白| 日韩欧美国产精品| 日韩高清在线观看不卡一区二区| 都市激情亚洲综合久久| 福利一区在线| 三级视频中文字幕| 四虎综合网| 久久精品无码国产一区二区三区| 亚洲国产日韩视频观看| 欧日韩在线不卡视频| 美女无遮挡免费网站| 激情综合网址| 伊人91在线| 超清无码熟妇人妻AV在线绿巨人| 91精品免费高清在线| 色视频久久| 国产主播在线观看| 伊人色综合久久天天| 国产一区亚洲一区| www.国产福利| 国产粉嫩粉嫩的18在线播放91| 狠狠色婷婷丁香综合久久韩国| 天天干伊人| 国产99在线观看| 国产精品成人一区二区| 亚洲VA中文字幕| 精品无码一区二区在线观看| 日本一区二区三区精品AⅤ| 91青青视频| 国产精品无码AV中文| 国产一级特黄aa级特黄裸毛片| 无码高潮喷水专区久久| 性喷潮久久久久久久久| 亚洲第一成网站| 老司机aⅴ在线精品导航| 亚洲av无码专区久久蜜芽| 999精品在线视频| 2022精品国偷自产免费观看| 欧美一级高清片久久99| 久久国产V一级毛多内射| 国产精品天干天干在线观看| 久久婷婷色综合老司机| 蝌蚪国产精品视频第一页| 国产精品性| 亚洲综合狠狠| 夜夜操国产| 国产自在线播放| 久一在线视频| 四虎国产精品永久一区| 最新国产成人剧情在线播放| 欧美成人午夜影院| 色哟哟精品无码网站在线播放视频| 黄色网页在线观看| 成人一级黄色毛片| 男人的天堂久久精品激情| 国产成人av一区二区三区| 午夜不卡视频| 国产成人精品在线| 亚洲成人在线免费观看| 国产午夜人做人免费视频中文| 91青青视频| 天天摸夜夜操| 久久综合国产乱子免费| 免费不卡在线观看av| 国产精品偷伦视频免费观看国产 | 97青草最新免费精品视频| 精品超清无码视频在线观看| 精品91在线| 国产SUV精品一区二区6|