關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 實時高速數據采集與存儲系統的一種實現方法

        實時高速數據采集與存儲系統的一種實現方法

        作者: 時間:2007-03-26 來源:網絡 收藏

        摘要:PCI-7300A_RevB超高速數字I/O卡的應用,介紹一種大容量、高速、實時數據。并根據自己的開發經驗,指出實現過程中應該注意的一些問題。
        關鍵詞:高速、實時、數據與存儲、PCI-7300A_RevB

        1、引言

        隨著信息科學的飛速發展,數據和存儲技術已經是數字信號處理中非常重要的環節,將決定整個系統的性能。它廣泛應用于雷達,通信,遙測遙感等領域。它己經成為人們獲得外界信息的重要手段。基于總線的數據采集與,由于可靠且易于實現、經濟等優點,得到了廣泛的應用。但當數據傳輸率很高時,保持存儲過程的可靠性、實時性將會成為一個比較棘手的問題。為此一些廠商提供了雙總線技術、64位/66MHzPCI總線系統來解決這問題。但這些技術較為昂貴,且忽略了現有的硬件設備。經過實驗與探索,我們選用ADLINK公司的PCI-7300A_RevB超高速數字I/O卡,利用現有的單(32位/33MHz)PCI總線的計算機

        系統構成低成本的硬件平臺,并利用自己開發的軟件系統,最終實現了高速(45Mbytes/sec)持續的數據采集于存儲。

        2、硬件組成及注意事項

        為了利用現有的硬件設備,降低成本;我們采用ADLINK公司出品的PCI-7300A_RevB超高速數字I/O卡作為數據采集部分。該卡的主要特性如下:

        32位數字I/O通道

        32位PCI總線

        通過觸發信號控制數據采集操作的開始。

        100針SCSI型連接器

        分散/聚攏方式的DMA

        最高傳輸速率80Mbytes/sec

        要實現實時高速的數據存儲,使用的一般的硬盤是不行的。所以我們選用希捷公司出品的型號為ST3146707LC的SCSI硬盤,該硬盤的容量是146GB,能滿足記錄大量數據的需要,其轉速為10Krpm。相應的SCSI硬盤控制器,選用Adaptec公司出品的型號為Adaptec19160的Ultra160-SCSI硬盤控制器.

        在搭建硬件平臺的過程中有些問題是必須注意的,否則系統不能正常工作。首先,PCI-7300A_RevB卡雖然采用分散/聚攏方式的DMA,但它對CPU資源的占用率是非常高的。經過實驗證明,要保證整個數據采集與正常工作,只能使用奔四1.7G以上的計算機系統。其次,Windows系統允許多個設備共享一個中斷請求號(IRQ)。為了保證存儲過程的實時性,必須確保SCSI硬盤控制器和PCI-7300A_RevB卡使用不同的IRQ。可以在主板BIOS里把Pnp(即插即用) /PCI設備的IRQ進行手動配置。最后Windows 2000 Service Pack 2 (SP2) 及早期版本不支持大于137GB容量的硬盤。須要先安裝Service Pack 3,再在注冊表(HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesAtapiParameters)里添加一個REG_DWORD類型的參數EnableBigLba,并把值設成0x1。這樣146GB的硬盤才能工作正常。

        3、軟件設計

        軟件設計直接決定硬件是否能正常工作,以及能否充分發揮硬件的性能。

        3.1PCIS-DASK及雙緩沖區模式的工作原理

        PCIS-DASK是ADLINK公司為自己的產品提供的驅動程序包,提供了專門用于實現采集的連續多緩沖區操作的一組API函數。通過這組API函數,我們可以按照雙緩沖區的原理,非常方便地實現對數據的實時、高速、連續的采集與存儲。

        雙緩沖區模式,在工程上稱為“乒乓” 緩沖區模式。跟常用的單緩沖區模式相比雙緩沖區模式的優點是,它可以使用較小容量的內存,不間斷地緩沖幾乎無限量的數據(輸入與輸出端需協同工作)。這種緩沖區模式的工作原理是:在內存里開辟兩塊容量相等的緩沖區(以下將分別它們稱為第一緩沖區和第二緩沖區)作為連續數據輸入的緩沖區。工作開始時,數據采集卡首先將數據寫入第一緩沖區中,在數據采集卡開始把數據寫入第二緩沖區的同時,用戶程序可以根據自身需要取出第一緩沖區中的數據做特定的處理。當第二緩沖區被寫滿后,數據采集卡回到第一緩沖區的起始處,以覆蓋舊數據的方式,把新數據寫入第一緩沖區中;與此同時用戶程序取出第二緩沖區中的數據。整個數據采集處理過程可以如此不斷地循環進行下去。

        32板卡驅動設置及注意的問題

        對板卡驅動的深刻理解是編寫好數據采集于存儲程序的前提。在連續數據輸入模式下,板卡驅動程序需要在系統內存里開辟一塊緩沖區做為二級緩存,用戶可以設置該緩沖區的大小 。方法是:從菜單開始/程序/PCI-DASK/NuDAQ PCI configuration Utility 打開DASK2000 Device Driver Configuration對話框,從Card Type組合框中選擇Pci7300A_RevB項,在DI欄輸入你想要開辟的緩沖區容量,點擊OK按鈕完成設置。需要注意的是板卡驅動設置的緩沖區(簡稱驅動緩沖區)容量與用戶程序開辟的緩沖區(用戶緩沖區)容量存在著一定關系。經過我們多次實驗,得出驅動緩沖區容量大約是用戶緩沖區的3倍;因此,當驅動緩沖區過小,而用戶緩沖區較大時,會出現錯誤。

        33 VisualC++開發環境的設置

        為了使用PCIS-DASK提供的實現連續多緩沖區操作的API函數,以及初始化板卡、設置板卡工作方式的API函數;需要VisualC++連接PCI-DASK提供的動態連接庫(Pci-dask.lib).具體方法是:打開工程,從菜單Project/Setting…打開Project Setting對話框,切換到Link選項卡,在Object/library modules攔中添加Pci-dask.lib,點擊OK按鈕完成設置。最后在工程中加入頭文件Dask.h.。

        34多線程的實時數據存儲軟件設計

        在要求高速、實時和連續采集和存儲的情況下,一方面要求系統不間斷地進行數據采集,同時還要進行數據實時地存儲,否則將會丟失數據,造成數據不完整。為了解決這個問題,我們在軟件實現中,引入了Windows的多任務處理技術(multitasking)。在程序里創建兩個工作線程分別完成數據采集和數據存儲工作。緩沖方式采用上面所說雙緩沖區模式,當數據采集線程(SampleThreadProc)把采集到的數據寫入第一緩沖區時,數據存儲線程(StorageThreadProc)把第二緩沖區的數據存入SCSI硬盤;當數據采集線程把數據寫入第二緩沖區時,數據存儲線程把第一緩沖區的數據存入SCSI硬盤;如此循環。另外通過實際實驗測試Adaptec19160 Ultra160-SCSI硬盤控制器,配合希捷公司出品的ST3146707LC SCSI硬盤,持續寫入速率能達到80Mbytes/sec。遠大于45 Mbytes/sec的采集速率。所以當數據采集線程寫滿其中一個緩沖區之前,數據存儲線程已經把另一個緩沖區里的數據存儲入SCSI硬盤。所以這種方法能保證數據的實時性、完整性和連續性。其程序流程圖如圖1。

        35軟件實現

        由于篇幅所限,下面僅給出程序中核心的代碼。

        BOOLEAN BufferID=0;//緩沖區的ID;1第一緩沖區,0:第二緩沖區。

        BOOLEAN Stop=0;//停止數據采集與存儲,1:停止,0:繼續。

        U32 Buffer1 [data_size], Buffer2 [data_size];

        //開辟塊緩沖區。

        FILE *fp;//存儲數據的目錄。

        UINT SampleThreadProc (LPVOID pParam)

        {BOOLEAN HalfReady=0;//緩沖被寫滿標志

        do {HalfReady=0;

        do(DI_AsyncMultiBufferNextReady(card,HalfReady,viewidx))://等待驅動程序報告緩
        //有沖區被寫滿。

        }while(!HalfReady);//如果HalfReady!=0,

        //明有緩沖區被寫滿。

        BufferID = ! BufferID;

        AfxBeginThread(StorageThreadProc,NULL);

        //啟動數據存儲線程



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 务川| 鄂尔多斯市| 巴里| 栖霞市| 湘潭市| 嵊州市| 万山特区| 衡水市| 宣城市| 禄丰县| 伊宁县| 曲松县| 南开区| 阿勒泰市| 丰原市| 宝鸡市| 泸西县| 白河县| 尉犁县| 内江市| 汕尾市| 邵东县| 扬州市| 唐海县| 高陵县| 东海县| 邛崃市| 惠安县| 织金县| 辛集市| 宜章县| 正定县| 苍南县| 晋宁县| 海淀区| 嘉荫县| 江陵县| 花垣县| 汶川县| 永靖县| 旅游|