• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一種改進(jìn)型多線程機(jī)制在數(shù)據(jù)采集系統(tǒng)中的應(yīng)用

      2019-08-13 09:26:29王嘉范蟠果毛恒
      關(guān)鍵詞:多線程數(shù)據(jù)采集

      王嘉 范蟠果 毛恒

      摘? ?要:為緩解數(shù)據(jù)采集實(shí)時(shí)性要求較高和數(shù)據(jù)處理延時(shí)較大之間的矛盾,研究了LabWindows/CVI軟件開(kāi)發(fā)環(huán)境下的多線程機(jī)制和相關(guān)的數(shù)據(jù)保護(hù)機(jī)制。并對(duì)傳統(tǒng)數(shù)據(jù)采集多線程機(jī)制進(jìn)行改進(jìn),除了為數(shù)據(jù)采集任務(wù)創(chuàng)建線程外,單獨(dú)為每一路數(shù)據(jù)通道創(chuàng)建獨(dú)立的線程用以處理該通道數(shù)據(jù)。實(shí)驗(yàn)結(jié)果表明:改進(jìn)后的多線程機(jī)制更加適合數(shù)據(jù)處理耗時(shí)較長(zhǎng)、數(shù)據(jù)通道多、實(shí)時(shí)性要求嚴(yán)格的系統(tǒng),能顯著提高系統(tǒng)實(shí)時(shí)性和軟件運(yùn)行效率。

      關(guān)鍵詞:LabWindows/CVI;多線程;數(shù)據(jù)采集;數(shù)據(jù)通道

      中圖分類號(hào):TP29? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A

      Application of an Improved Multithreading Mechanism

      in Data Acquisition System

      WANG Jia?覮,F(xiàn)AN 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

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

      1? ?LabWindows/CVI多線程技術(shù)

      多線程技術(shù)基于操作系統(tǒng)的時(shí)間片輪轉(zhuǎn)調(diào)度機(jī)制,使多個(gè)任務(wù)在宏觀上并行執(zhí)行。在典型應(yīng)用多線程的LabWindows/CVI程序中,開(kāi)發(fā)者使用主線程來(lái)創(chuàng)建用戶界面并響應(yīng)其動(dòng)作,而使用輔助線程來(lái)進(jìn)行其它時(shí)間要求嚴(yán)格的操作[2],如數(shù)據(jù)采集、實(shí)時(shí)監(jiān)控等,極大提高了CPU使用率和程序的運(yùn)行效率。LabWindows/CVI中有兩種設(shè)計(jì)線程的方法,分別是線程池技術(shù)和異步定時(shí)器技術(shù)。線程池適合于不連續(xù)地執(zhí)行若干次或者在循環(huán)內(nèi)執(zhí)行的任務(wù),而異步定時(shí)器適用于按照固定時(shí)間間隔執(zhí)行的任務(wù)[3]。

      為了避免線程競(jìng)爭(zhēng)引發(fā)的邏輯錯(cuò)誤,在CVI中有三種保護(hù)數(shù)據(jù)的機(jī)制,分別是線程鎖、線程安全變量和線程安全隊(duì)列[4]。

      1.1? ?線程池機(jī)制

      線程池是一種多線程處理形式,其通過(guò)主線程中創(chuàng)建,而輔助線程在線程池中創(chuàng)建和管理[5]。線程池的目的是使得線程可以重復(fù)調(diào)用,即執(zhí)行完一個(gè)任務(wù)后該線程可以繼續(xù)執(zhí)行其他任務(wù)而不是被注銷。用戶可以自由創(chuàng)建新的線程池或刪除現(xiàn)有線程池,進(jìn)而通過(guò)這些線程池管理不同的輔助線程。

      當(dāng)系統(tǒng)需要同時(shí)處理多個(gè)任務(wù)時(shí),用戶通過(guò)調(diào)用庫(kù)函數(shù),將欲執(zhí)行的函數(shù)傳遞到某線程池,該線程池就會(huì)將該函數(shù)分配到一個(gè)線程中去執(zhí)行,這個(gè)函數(shù)被稱為線程函數(shù)[6]。通過(guò)這個(gè)過(guò)程,用戶將不同的任務(wù)分配到不同的線程執(zhí)行,從而實(shí)現(xiàn)多任務(wù)并行。

      1.2? ?異步定時(shí)器機(jī)制

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

      1.3? ?數(shù)據(jù)保護(hù)機(jī)制

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

      2? ?多通道數(shù)據(jù)采集系統(tǒng)

      某型飛機(jī)供電參數(shù)測(cè)試系統(tǒng)需要對(duì)多個(gè)節(jié)點(diǎn)的電氣信息進(jìn)行采集,并按照《GJB5189-2003飛機(jī)供電特性參數(shù)測(cè)試方法》所規(guī)定的測(cè)試方法處理數(shù)據(jù)并進(jìn)行顯示和保存。由于數(shù)據(jù)通路較多,測(cè)試算法復(fù)雜,單線程以及傳統(tǒng)多線程方案在此并不適用。為此,本文基于LabWindows/CVI軟件開(kāi)發(fā)環(huán)境,設(shè)計(jì)了一種運(yùn)行效率更高的多線程機(jī)制,并選用多通道同步數(shù)據(jù)采集卡、串口擴(kuò)展卡以及工控機(jī)作為硬件平臺(tái)設(shè)計(jì)測(cè)試系統(tǒng),僅使用一個(gè)USB口即可實(shí)現(xiàn)16路數(shù)字/模擬通道的測(cè)試。

      2.1? ?系統(tǒng)介紹

      該測(cè)試系統(tǒng)的測(cè)試對(duì)象為測(cè)試節(jié)點(diǎn),其分為數(shù)字和模擬兩型。數(shù)字測(cè)試節(jié)點(diǎn)以固定時(shí)間間隔通過(guò)串口發(fā)送定量數(shù)據(jù),而模擬測(cè)試節(jié)點(diǎn)通過(guò)數(shù)據(jù)采集卡進(jìn)行A/D采樣,工控機(jī)通過(guò)多路選擇開(kāi)關(guān)切換測(cè)試節(jié)點(diǎn)類型和以及控制對(duì)應(yīng)測(cè)試通道的啟停(數(shù)字、模擬節(jié)點(diǎn)均為16個(gè)),所有通道的數(shù)據(jù)流都通過(guò)一個(gè)USB口輸入工控機(jī),由測(cè)試系統(tǒng)上位機(jī)進(jìn)行處理,系統(tǒng)結(jié)構(gòu)如圖1所示。

      2.2? ?傳統(tǒng)方案

      傳統(tǒng)數(shù)據(jù)采集系統(tǒng)的程序一般可歸為以下三種工作模式,但它們并不適合通道數(shù)多、數(shù)據(jù)量大或者有復(fù)雜數(shù)據(jù)處理算法的系統(tǒng),下面對(duì)它們簡(jiǎn)單介紹。

      1)單線程系統(tǒng)

      使用單線程編程方法編寫(xiě)程序時(shí),整個(gè)應(yīng)用程序只使用一條主線程,當(dāng)使用者對(duì)用戶界面進(jìn)行操作時(shí),CPU可能會(huì)因?yàn)轫憫?yīng)這些動(dòng)作而影響數(shù)據(jù)采集和數(shù)據(jù)處理,也可能由于CPU始終得不到釋放導(dǎo)致用戶界面無(wú)響應(yīng),這都是不允許發(fā)生的,該方案只適合簡(jiǎn)單的數(shù)據(jù)采集/處理系統(tǒng)。

      2)雙線程系統(tǒng)

      作為傳統(tǒng)單線程模式的改進(jìn),除主線程用以響應(yīng)用戶動(dòng)作外可再設(shè)置一條輔助線程用以輪詢采集和處理各個(gè)通道的數(shù)據(jù)。但在數(shù)據(jù)處理耗時(shí)遠(yuǎn)大于數(shù)據(jù)采集耗時(shí)的情況下,若將這兩個(gè)任務(wù)放在同一線程運(yùn)行,可能會(huì)因數(shù)據(jù)處理任務(wù)耗時(shí)過(guò)長(zhǎng),致使數(shù)據(jù)采集任務(wù)無(wú)法按時(shí)執(zhí)行,從而導(dǎo)致數(shù)據(jù)緩存區(qū)覆蓋,嚴(yán)重影響測(cè)試結(jié)果。

      3)擁有獨(dú)立數(shù)據(jù)采集線程、數(shù)據(jù)處理線程的系統(tǒng)

      該方案是在第二種方案的基礎(chǔ)上加以改進(jìn),除主線程外,為數(shù)據(jù)采集任務(wù)和數(shù)據(jù)處理任務(wù)分別創(chuàng)建單獨(dú)的線程,該方案確保了系統(tǒng)的可靠性和響應(yīng)速度。但該型供電參數(shù)測(cè)試系統(tǒng)數(shù)據(jù)通路多、所涉及的數(shù)據(jù)處理算法復(fù)雜,若在一條數(shù)據(jù)處理線程中完成所有通道的數(shù)據(jù)處理會(huì)使該線程的單次執(zhí)行時(shí)長(zhǎng)遠(yuǎn)大于數(shù)據(jù)采集線程,又由于數(shù)據(jù)采集線程的優(yōu)先級(jí)必須高于數(shù)據(jù)處理線程,數(shù)據(jù)處理線程會(huì)頻繁被數(shù)據(jù)采集線程阻塞。因此該方案在線程調(diào)度方面耗費(fèi)資源過(guò)多,數(shù)據(jù)處理線程的執(zhí)行效率低下。

      2.3? ?系統(tǒng)特點(diǎn)

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

      3? ?線程代碼實(shí)現(xiàn)

      下面對(duì)線程的具體代碼實(shí)現(xiàn)進(jìn)行介紹,因?yàn)樗袛?shù)據(jù)流都通過(guò)工控機(jī)的特定USB口傳入,因此采集線程讀取數(shù)據(jù)的對(duì)象是USB緩存區(qū)。

      3.1? ?數(shù)據(jù)采集線程

      以下為數(shù)據(jù)采集輔助線程回調(diào)函數(shù)中,關(guān)于數(shù)據(jù)采集的代碼,該輔助線程通過(guò)異步定時(shí)器創(chuàng)建,為了確保系統(tǒng)可靠性,數(shù)據(jù)采集線程擁有最高的優(yōu)先級(jí)。

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

      {

      /*每隔0.1s一個(gè)測(cè)試節(jié)點(diǎn)往緩存寫(xiě)入points個(gè)字節(jié)數(shù)據(jù),points為變量*/

      for(j=0;j

      {

      /*從USB緩沖區(qū)讀取數(shù)據(jù)*/

      ByteRead1=ComRdByte(ComName[i]);

      ReadBuffer1[i][J]=ByteRead1;

      }

      /*每讀完一通道就將數(shù)據(jù)寫(xiě)入對(duì)應(yīng)安全隊(duì)列*/

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

      }

      }

      3.2? ?數(shù)據(jù)處理線程

      該系統(tǒng)共有16條類似的數(shù)據(jù)處理線程與16路數(shù)據(jù)通道相對(duì)應(yīng),這些線程通過(guò)線程池創(chuàng)建,擁有相同的優(yōu)先級(jí)。

      int CVICALLBACK UnpackThread1(void *functionData)

      {

      /*unpack_flag1為線程運(yùn)行/停止標(biāo)志*/

      while(unpack_flag1)

      {

      /*確保安全隊(duì)列中有數(shù)據(jù)可讀才進(jìn)入數(shù)據(jù)處理過(guò)程*/

      CmtGetTSQAttribute(queueHandle1,ATTR_TSQ_ITEMS_IN_QUEUE,&queue_item);

      if(queue_item> 0)

      {

      /*從對(duì)應(yīng)通道的安全隊(duì)列取出數(shù)據(jù),根據(jù)測(cè)試算法要求,每次取出一定量的數(shù)據(jù)進(jìn)行處理*/

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

      if(item_num>= 0)

      {

      for(j=0;j

      {

      /*將從安全隊(duì)列讀出的數(shù)據(jù)存入該線程的緩存中,供數(shù)據(jù)處理使用*/

      ByteRead2=ReadBuffer2[J];

      UnpackBuffer[J]=ByteRead2;

      }

      /*進(jìn)行數(shù)據(jù)解包、處理、儲(chǔ)存和實(shí)時(shí)顯示的代碼,在此省略*/

      ……

      }

      }

      else

      {

      stop_count++;

      /*當(dāng)安全隊(duì)列一段時(shí)間無(wú)數(shù)據(jù)可讀時(shí)停止該線程運(yùn)行*/

      if(stop_count>10)

      unpack_flag1 = 0;

      }

      }

      return 0;

      }

      3.3? ?停止線程

      由于每一通道的數(shù)據(jù)處理進(jìn)程彼此獨(dú)立,其處理進(jìn)度難免存在差異,有必要單獨(dú)設(shè)置一個(gè)停止線程對(duì)所有數(shù)據(jù)處理線程進(jìn)行監(jiān)控。當(dāng)數(shù)據(jù)采集任務(wù)完成后,系統(tǒng)必須等待所有通道的數(shù)據(jù)都被處理完再切換至下一測(cè)試階段(此時(shí)才釋放所有輔助線程),否則可能導(dǎo)致數(shù)據(jù)丟失。具體實(shí)現(xiàn)方法為設(shè)置停止線程優(yōu)先級(jí)高于數(shù)據(jù)處理線程,并持續(xù)對(duì)16條數(shù)據(jù)處理線程的運(yùn)行標(biāo)志位進(jìn)行檢測(cè),當(dāng)所有標(biāo)志位都為0時(shí)即可釋放包括停止線程自身在內(nèi)的所有輔助線程。

      4? ?結(jié)? ?論

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

      多線程技術(shù)在 Windows系統(tǒng)中已經(jīng)被成熟運(yùn)用[9],將其引入大數(shù)據(jù)量、實(shí)時(shí)性要求高的測(cè)控軟件具有很多優(yōu)勢(shì)和工程應(yīng)用價(jià)值。將傳統(tǒng)數(shù)據(jù)采集系統(tǒng)的多線程機(jī)制進(jìn)行改進(jìn),提高了測(cè)試的實(shí)時(shí)性和系統(tǒng)資源利用率,并且通過(guò)安全隊(duì)列保證了數(shù)據(jù)在軟件內(nèi)部傳遞的安全性,確保了測(cè)試的準(zhǔn)確性。該型測(cè)試系統(tǒng)已在實(shí)際生產(chǎn)中應(yīng)用,取得了良好的效果。

      參考文獻(xiàn)

      [1]? ? 單體強(qiáng),陳雷,張萬(wàn)發(fā). LabWindows/CVI多線程技術(shù)的應(yīng)用研究[J]. 電子設(shè)計(jì)工程,2012,20(15):52—54.

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

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

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

      [5]? ? 張偉,劉大偉. 隊(duì)列與多線程技術(shù)在交通監(jiān)控系統(tǒng)通信軟件中的應(yīng)用[J]. 上海船舶運(yùn)輸科學(xué)研究所學(xué)報(bào),2009,32(1):50—54.

      [6]? ? 楊東升,王高峰. 多線程技術(shù)在虛擬儀器開(kāi)發(fā)軟件LabWindows/CVI中的實(shí)現(xiàn)[J]. 電測(cè)與儀表,2005,42(3):39—41.

      [7]? ? 張毅剛. 虛擬儀器軟件開(kāi)發(fā)環(huán)境[M]. 北京:機(jī)械工業(yè)出版社,2002.

      [8]? ? 程照宇,盛文,雷曉勇,等. 多線程技術(shù)在虛擬數(shù)字信號(hào)分析儀中的應(yīng)用[J]. 中國(guó)測(cè)試,2008,34(1):74—76.

      [9]? ? 周炎濤. Windows中的多線程編程技術(shù)和實(shí)現(xiàn)[J]. 計(jì)算技術(shù)與自動(dòng)化,2002,21(3):109—116.

      猜你喜歡
      多線程數(shù)據(jù)采集
      Java并發(fā)工具包對(duì)并發(fā)編程的優(yōu)化
      CS5463在植栽用電子鎮(zhèn)流器老化監(jiān)控系統(tǒng)中的應(yīng)用
      大數(shù)據(jù)時(shí)代高校數(shù)據(jù)管理的思考
      科技視界(2016年18期)2016-11-03 22:51:40
      鐵路客流時(shí)空分布研究綜述
      基于廣播模式的數(shù)據(jù)實(shí)時(shí)采集與處理系統(tǒng)
      軟件工程(2016年8期)2016-10-25 15:54:18
      通用Web表單數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
      軟件工程(2016年8期)2016-10-25 15:52:53
      基于多線程文件傳輸關(guān)鍵技術(shù)研究與實(shí)現(xiàn)
      基于開(kāi)源系統(tǒng)的綜合業(yè)務(wù)數(shù)據(jù)采集系統(tǒng)的開(kāi)發(fā)研究
      網(wǎng)頁(yè)爬蟲(chóng)技術(shù)的關(guān)鍵技術(shù)研究探索
      一種基于多線程的高速磁盤鏡像算法
      兴安县| 兖州市| 鲁山县| 海晏县| 白水县| 高尔夫| 双流县| 朔州市| 临海市| 桐城市| 鞍山市| 青浦区| 灌云县| 霍林郭勒市| 潍坊市| 五大连池市| 龙口市| 古田县| 武乡县| 哈密市| 班戈县| 华池县| 龙陵县| 丹寨县| 墨竹工卡县| 山阴县| 平邑县| 丰镇市| 赤水市| 白玉县| 武隆县| 新宁县| 静乐县| 晴隆县| 宁远县| 赤城县| 随州市| 股票| 金溪县| 新竹市| 锦州市|