新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > 實時數據采集與存儲系統的實現方法

        實時數據采集與存儲系統的實現方法

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

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

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

          

        實時數據采集與存儲系統的實現方法

          3.5 軟件實現

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

          

        實時數據采集與存儲系統的實現方法

          

        實時數據采集與存儲系統的實現方法

        4 性能評估

          為了驗證該系統的性能,我們對其所能達到的采集和存儲速率、以及數據正確率進行了測試和分析。

          在測試中我們使用了自己設計的數據源,它能以任意速率發送32位的線性數字信號。另外編寫了一個數據檢測程序,可給出存儲的數據的正確率和顯示數據錯誤的地方。經過長時間的測試,得到結果是:數據源發送速率為45Mbytes/sec時,存儲的數據能達到100%的正確率。當數據源發送速率為50Mbytes/sec時,數據有錯誤。

          經分析原因出在數據采集過程,當有很多位發生進位時(如FFFFFFFF→00000000)采集卡不能正確地采樣數據。實際上經過特殊處理后,這樣的數據還是可以使用的。

          計算機32位/33MHzPCI總線帶寬典型的輸出數據吞吐量為100Mbytes/sec,輸入數據吞吐量為120Mbytes/sec,而系統中其他的PCI設備也需要占用一定的帶寬,并且數據采集和存儲過程都要占用PCI總線帶寬;因此,45Mbytes/sec(100%正確率)的采集和存儲速率已經接近系統和硬件的極限。

          5 結語

          本文介紹的實現方法易于實現,且充分挖掘了硬件的性能,可滿足對數據采集與實時存儲速率要求較高(≤45Mbytes/sec)的應用。由于使用的硬件平臺是普通的奔四級PC機,所以開發成本較低。另外文中對實現過程中應注意的問題作了詳細說明并給出核心編程部分,使讀者很容易在較短時間內開發出滿足自己需要的系統。

        c++相關文章:c++教程



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 桂阳县| 婺源县| 陇南市| 绥化市| 察隅县| 华安县| 高安市| 廊坊市| 兴城市| 武义县| 沙雅县| 太仆寺旗| 鄄城县| 昭平县| 黄梅县| 淅川县| 修武县| 江都市| 阜城县| 德昌县| 涡阳县| 灵丘县| 昌都县| 华安县| 澄城县| 安仁县| 乌兰浩特市| 连云港市| 东乡| 铜陵市| 关岭| 三门县| 昭觉县| 巍山| 张家口市| 灯塔市| 北安市| 睢宁县| 三门县| 邳州市| 武平县|