亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于USB2.0和LabWindows/CVI數(shù)據(jù)采集系統(tǒng)軟件設(shè)計(jì)

        2012-11-29 08:39:48王海濤陳后金
        鐵路計(jì)算機(jī)應(yīng)用 2012年10期
        關(guān)鍵詞:主線線程調(diào)用

        王海濤,陳后金

        (北京交通大學(xué) 電子信息工程學(xué)院,北京 100044)

        隨著電子儀器與計(jì)算機(jī)技術(shù)的發(fā)展,數(shù)據(jù)采集技術(shù)在智能儀器、國防軍事、工業(yè)生產(chǎn)和科學(xué)研究等領(lǐng)域得到了廣泛應(yīng)用。

        傳統(tǒng)的數(shù)據(jù)采集儀器的軟件和硬件都是由廠商預(yù)先定義、預(yù)先封裝的,這樣,他們的靈活性就比較差。美國國家儀器公司(NI 公司)推出的交互式C語言開發(fā)平臺(tái)—LabWindows/CVI,將C語言平臺(tái)與用于數(shù)據(jù)采集、分析、處理和顯示的測控專業(yè)工具結(jié)合起來,給熟悉C 語言的開發(fā)設(shè)計(jì)人員編寫自動(dòng)測試環(huán)境、檢測系統(tǒng)、數(shù)據(jù)采集系統(tǒng)等應(yīng)用軟件提供了一個(gè)理想的軟件開發(fā)環(huán)境。

        現(xiàn)在,常用的采集方式是在計(jì)算機(jī)或者工控機(jī)安裝外圍控制接口(PCI)或工業(yè)標(biāo)準(zhǔn)總線接口(ISA)的數(shù)據(jù)采集卡。雖然這些板卡自帶了設(shè)備驅(qū)動(dòng)程序和數(shù)據(jù)采集函數(shù)庫,在軟件編程時(shí)可以直接調(diào)用自帶的數(shù)據(jù)采集函數(shù)庫實(shí)現(xiàn)數(shù)據(jù)采集和顯示,但是,這些板卡通常價(jià)格昂貴、安裝麻煩、容易受機(jī)箱內(nèi)環(huán)境的影響,而且計(jì)算機(jī)或者工控機(jī)插槽數(shù)量有限,不能掛載很多設(shè)備。而通用串行總線(USB)的出現(xiàn)很好地解決了上述問題。

        本文把LabWindows/CVI與USB結(jié)合起來,設(shè)計(jì)了一種基于LabWindows/CVI軟件開發(fā)平臺(tái)和USB2.0接口的數(shù)據(jù)采集系統(tǒng),這個(gè)系統(tǒng)通過普通的USB連接線與計(jì)算機(jī)連接,支持即插即用,使用簡單方便,既避免了傳統(tǒng)儀器靈活性差,又不會(huì)有現(xiàn)在儀器成本高的缺點(diǎn)。

        1 硬件電路

        該數(shù)據(jù)采集系統(tǒng)由USB2.0接口芯片CY7C-68001、控制和計(jì)算芯片TMS320C6713、模數(shù)轉(zhuǎn)換芯片AD7865及擴(kuò)展接口芯片CPLD等組成。AD7865采集到電壓和電流數(shù)據(jù)以后,經(jīng)過TMS320C6713寫入到CY7C68001芯片的端點(diǎn),再通過USB總線傳給上位機(jī)。系統(tǒng)硬件結(jié)構(gòu)如圖1。

        圖1 系統(tǒng)硬件結(jié)構(gòu)框圖

        2 系統(tǒng)軟件設(shè)計(jì)

        2.1 動(dòng)態(tài)鏈接庫設(shè)計(jì)

        LabWindows/CVI以ANSI C為編程語言,它開發(fā)的應(yīng)用程序不能直接調(diào)用Windows系統(tǒng)的應(yīng)用程序編程接口。但是,在Windows平臺(tái)下,應(yīng)用程序和USB設(shè)備之間的通信必須通過計(jì)算機(jī)系統(tǒng)的應(yīng)用程序接口(API)函數(shù)。這樣,要想與USB設(shè)備通信,就必須在LabWindows/CVI平臺(tái)開發(fā)的應(yīng)用程序與Windows API函數(shù)之間建立聯(lián)系。LabWindows/CVI開發(fā)的應(yīng)用程序可以調(diào)用動(dòng)態(tài)鏈接庫(DLL)里面的函數(shù),而DLL文件可以調(diào)用Windows的API函數(shù),因此,DLL文件就是兩者建立聯(lián)系的橋梁。

        本文將計(jì)算機(jī)與USB通信的各種API函數(shù)(比如打開一個(gè)存在的USB設(shè)備)都封裝了起來,做成了一個(gè)DLL文件,然后在應(yīng)用程序中進(jìn)程加載和調(diào)用,進(jìn)而訪問USB設(shè)備,進(jìn)行數(shù)據(jù)的采集和傳輸。這樣做也便于程序的管理和代碼的重復(fù)利用,并且很好地保護(hù)了代碼的知識(shí)產(chǎn)權(quán)。

        表1中列出了要加入的幾個(gè)函數(shù)的聲明及功能。其中:

        myRequest和bulkControl分別是EZ-USB設(shè)備驅(qū)動(dòng)頭文件ezusbsys.h中定義的VENDOR_OR_CLASS_REQUEST_CONTROL和BULK_TRANSFER_CONTROL的結(jié)構(gòu)體類型。

        DLL文件可以在VC++ 6.0的環(huán)境下開發(fā):

        表1 DLL函數(shù)及功能

        (1)建立一個(gè)Win32 Dynamic-Link Library的工程。

        (2)在選擇創(chuàng)建什么類型的DLL選項(xiàng)中選擇“建立一個(gè)簡單的DLL工程”。點(diǎn)擊“完成”。

        (3)在工程中加入必要的頭文件和自己編寫的函數(shù),編譯連接就可以生成LIB和DLL文件。

        要在LabWindows/CVI中使用這個(gè)DLL函數(shù),必須把DLL、LIB和主頭文件拷貝到應(yīng)用程序的文件夾下,并且在應(yīng)用程序工程中添加LIB和C文件中包含拷貝過來的.h文件。

        2.2 多線程技術(shù)與設(shè)計(jì)

        在本系統(tǒng)中,為了實(shí)現(xiàn)數(shù)據(jù)采集、顯示并行處理,采用了多線程技術(shù)。這樣就可以把這些任務(wù)分配給不同的線程,次線程完成數(shù)據(jù)的實(shí)時(shí)采集,而主線程完成顯示和存儲(chǔ)等。這樣就能最大限度地保證數(shù)據(jù)的實(shí)時(shí)性,并且能及時(shí)響應(yīng)界面的其他操作。

        2.2.1 線程池的使用

        LabWindows/CVI提供了兩種機(jī)制實(shí)現(xiàn)多線程操作。這兩種機(jī)制是線程池和異步定時(shí)器。線程池技術(shù)比較適用于運(yùn)行不連續(xù)的任務(wù)或者是一個(gè)死循環(huán);而異步定時(shí)器技術(shù)則比較適用于執(zhí)行一些有規(guī)律的中斷。根據(jù)本系統(tǒng)的實(shí)際情況,本文采用了線程池的機(jī)制。應(yīng)用程序以用戶界面為主線程,完成數(shù)據(jù)的顯示和輸入響應(yīng)的任務(wù)。而數(shù)據(jù)采集線程則在響應(yīng)用戶界面采集指令后啟動(dòng),并且它作為后臺(tái)線程負(fù)責(zé)數(shù)據(jù)的采集,根據(jù)界面存儲(chǔ)指令進(jìn)行存儲(chǔ),而主線程則在發(fā)生一定的觸發(fā)事件后進(jìn)行數(shù)據(jù)的顯示。

        要使用LabWindows/CVI提供的線程池技術(shù)創(chuàng)建采集線程,必須調(diào)用Utility Library中的CmtScheduleThreadPoolFunction函數(shù),并且將要在采集線程中運(yùn)行的函數(shù)的名稱傳遞給它,這樣,線程池會(huì)安排一個(gè)空閑的線程來執(zhí)行這個(gè)函數(shù)中的代碼。傳遞給CmtScheduleThreadPoolFunction的函數(shù)成為線程池函數(shù),它必須有下面的格式:

        int CVICALLBACK ThreadFunction (void*functionData);

        而主函數(shù)還需要調(diào)用庫中的CmtSchedule-ThreadPoolFunction函數(shù)創(chuàng)建一個(gè)新的線程來執(zhí)行用戶指定的線程函數(shù)。這樣,用戶自定義的函數(shù)就可以在次線程中執(zhí)行,同時(shí),主線程執(zhí)行主函數(shù)的回調(diào)而無需等待次線程的執(zhí)行。

        在主線程退出之前,需要調(diào)用CmtWait-ForThreadPoolFunctionCompletion函數(shù),這樣就可以使主線程等待線程池中的函數(shù)結(jié)束后再退出,不會(huì)造成次線程不能正確清理分配到的資源。

        2.2.2 線程訪問數(shù)據(jù)保護(hù)

        在使用多線程時(shí),必須考慮的問題就是數(shù)據(jù)的保護(hù)。因?yàn)槟承┳兞靠赡芡瑫r(shí)被多個(gè)線程訪問而發(fā)生沖突,導(dǎo)致程序運(yùn)行錯(cuò)誤。這些變量包括全局變量、動(dòng)態(tài)分配內(nèi)存的變量和靜態(tài)局部變量。而LabWindows/CVI提供3種數(shù)據(jù)保護(hù)機(jī)制:線程鎖、線程安全變量和線程安全隊(duì)列。

        因?yàn)楸鞠到y(tǒng)中數(shù)據(jù)采集線程和主線程之間有大量的數(shù)據(jù)進(jìn)行傳遞,所以選用的是線程安全隊(duì)列。線程安全隊(duì)列是一種在線程間進(jìn)行安全數(shù)組數(shù)據(jù)傳遞的機(jī)制,所以特別適用于在程序中有一個(gè)線程生成數(shù)組數(shù)據(jù)、而另外一個(gè)線程對數(shù)組數(shù)據(jù)進(jìn)行處理的情況。線程安全隊(duì)列(TSQ)是一個(gè)先進(jìn)先出的隊(duì)列,而且可以響應(yīng)特定的事件。TSQ的工作過程為:(1)在主線程中創(chuàng)建一個(gè)TSQ,給它裝載一個(gè)寫回調(diào)函數(shù),并且設(shè)置參數(shù)讓TSQ在寫滿緩沖區(qū)時(shí)觸發(fā)事件。(2)在主界面采集命令發(fā)出后,線程池分配一個(gè)空閑線程給數(shù)據(jù)采集函數(shù),這樣,該函數(shù)把獲得的數(shù)據(jù)都寫入TSQ中,假設(shè)TSQ緩沖區(qū)長度被設(shè)置為n,當(dāng)緩沖區(qū)寫滿時(shí),便會(huì)觸發(fā)主線程的顯示回調(diào)函數(shù)。(3)在顯示回調(diào)函數(shù)中,主線程將數(shù)據(jù)從TSQ讀出,存放在自定義的數(shù)組中,完成后續(xù)的處理和顯示。這樣,數(shù)據(jù)采集和顯示就會(huì)同步進(jìn)行。

        2.3 程序控制和數(shù)據(jù)傳輸流程

        程序控制和數(shù)據(jù)傳輸流程如圖2。

        圖2 程序控制和數(shù)據(jù)傳輸流程圖

        3 結(jié)束語

        本文基于LabWindows/CVI這一軟件平臺(tái),設(shè)計(jì)了一種高速的USB2.0系統(tǒng)。運(yùn)用多線程技術(shù)和DLL技術(shù),極大地提高了系統(tǒng)性能,增強(qiáng)了系統(tǒng)的實(shí)時(shí)性,降低了系統(tǒng)的成本。經(jīng)過測試,本系統(tǒng)達(dá)到了設(shè)計(jì)要求,運(yùn)行良好。

        [1]王海濤,付 鈞,鮮 勇,等. 基于LabWindows/CVI的數(shù)據(jù)采集系統(tǒng)軟件設(shè)計(jì)[J]. 艦船電子工程,2010(5):64-66.

        [2]陳矯陽,陳 楸,劉桓龍. 基于LabWindows/CVI多線程數(shù)據(jù)采集的研究[J]. 科學(xué)技術(shù)與工程,2008(9):2459-2461.

        [3]孔 麗,于紅蕓,張 利. LabWindows/CVI中調(diào)用VC動(dòng)態(tài)庫的方法與實(shí)例[J]. 海軍航空工程學(xué)院學(xué)報(bào),2004(3):364-366.

        [4]王建新,楊世鳳,隋美麗. LabWindows/CVI測試技術(shù)及工程應(yīng)用[M]. 北京:化學(xué)工業(yè)出版社,2006.

        猜你喜歡
        主線線程調(diào)用
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        人物報(bào)道的多維思考、主線聚焦與故事呈現(xiàn)
        活力(2019年17期)2019-11-26 00:42:32
        更加突出主線 落實(shí)四個(gè)到位 推動(dòng)主題教育取得實(shí)實(shí)在在成效
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        數(shù)字主線
        淺談linux多線程協(xié)作
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        下沉和整合 遼寧醫(yī)改主線
        利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
        Linux線程實(shí)現(xiàn)技術(shù)研究
        日韩精品成人一区二区三区| 亚洲中国精品精华液| 免费黄色影片| 国产精品高潮呻吟av久久无吗| 久久久久久久久中文字幕| 国产一级黄色片一区二区| 亚洲 欧美 综合 在线 精品| 精品一区二区三区无码免费视频| 在线观看网址你懂的| 美女福利视频网址导航| 我和隔壁的少妇人妻hd| 婷婷中文字幕综合在线| 久久精品免费无码区| 97超碰中文字幕久久| 国产成人精品免费久久久久| 无码骚夜夜精品| 免费看国产精品久久久久| 亚洲综合精品一区二区| 国产中文三级全黄| 理论片87福利理论电影| 久久99精品波多结衣一区| 午夜影院免费观看小视频| 女人色熟女乱| 麻豆精品久久久久久久99蜜桃| 日韩在线手机专区av| 亚洲精品中文字幕一二三区| 国产台湾无码av片在线观看| 人妻AV无码一区二区三区奥田咲| 国产丝袜在线福利观看| 色欲av永久无码精品无码蜜桃| 女同性黄网aaaaa片| 韩国无码精品人妻一区二| 男性av天堂一区二区| 欧洲vat一区二区三区| 国产女人18一级毛片视频 | 18禁免费无码无遮挡不卡网站| 欧产日产国产精品精品| 国产亚洲欧美在线播放网站| 亚洲熟女乱一区二区三区| 亚洲中文字幕无码一久久区| 精品人妻VA出轨中文字幕|