新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 實(shí)時(shí)數(shù)據(jù)采集與存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法

實(shí)時(shí)數(shù)據(jù)采集與存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法

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

3.4 多線程的實(shí)時(shí)數(shù)據(jù)存儲(chǔ)軟件設(shè)計(jì)

  在要求高速、實(shí)時(shí)和連續(xù)采集和存儲(chǔ)的情況下,一方面要求系統(tǒng)不間斷地進(jìn)行,同時(shí)還要進(jìn)行數(shù)據(jù)實(shí)時(shí)地存儲(chǔ),否則將會(huì)丟失數(shù)據(jù),造成數(shù)據(jù)不完整。為了解決這個(gè)問(wèn)題,我們?cè)谲浖?shí)現(xiàn)中,引入了Windows的多任務(wù)處理技術(shù)(multitasking)。在程序里創(chuàng)建兩個(gè)工作線程分別完成和數(shù)據(jù)存儲(chǔ)工作。緩沖方式采用上面所說(shuō)雙緩沖區(qū)模式,當(dāng)線程(SampleThreadProc)把采集到的數(shù)據(jù)寫(xiě)入第一緩沖區(qū)時(shí),數(shù)據(jù)存儲(chǔ)線程(StorageThreadProc)把第二緩沖區(qū)的數(shù)據(jù)存入SCSI硬盤(pán);當(dāng)數(shù)據(jù)采集線程把數(shù)據(jù)寫(xiě)入第二緩沖區(qū)時(shí),數(shù)據(jù)存儲(chǔ)線程把第一緩沖區(qū)的數(shù)據(jù)存入SCSI硬盤(pán);如此循環(huán)。另外通過(guò)實(shí)際實(shí)驗(yàn)測(cè)試Adaptec19160Ultra160-SCSI硬盤(pán)控制器,配合希捷公司出品的ST3146707LCSCSI硬盤(pán),持續(xù)寫(xiě)入速率能達(dá)到80Mbytes/sec。遠(yuǎn)大于45Mbytes/sec的采集速率。所以當(dāng)數(shù)據(jù)采集線程寫(xiě)滿其中一個(gè)緩沖區(qū)之前,數(shù)據(jù)存儲(chǔ)線程已經(jīng)把另一個(gè)緩沖區(qū)里的數(shù)據(jù)存儲(chǔ)入SCSI硬盤(pán)。所以這種方法能保證數(shù)據(jù)的實(shí)時(shí)性、完整性和連續(xù)性。其程序流程圖如圖1。

  

實(shí)時(shí)數(shù)據(jù)采集與存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法

  3.5 軟件實(shí)現(xiàn)

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

  

實(shí)時(shí)數(shù)據(jù)采集與存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法

  

實(shí)時(shí)數(shù)據(jù)采集與存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法

4 性能評(píng)估

  為了驗(yàn)證該系統(tǒng)的性能,我們對(duì)其所能達(dá)到的采集和存儲(chǔ)速率、以及數(shù)據(jù)正確率進(jìn)行了測(cè)試和分析。

  在測(cè)試中我們使用了自己設(shè)計(jì)的數(shù)據(jù)源,它能以任意速率發(fā)送32位的線性數(shù)字信號(hào)。另外編寫(xiě)了一個(gè)數(shù)據(jù)檢測(cè)程序,可給出存儲(chǔ)的數(shù)據(jù)的正確率和顯示數(shù)據(jù)錯(cuò)誤的地方。經(jīng)過(guò)長(zhǎng)時(shí)間的測(cè)試,得到結(jié)果是:數(shù)據(jù)源發(fā)送速率為45Mbytes/sec時(shí),存儲(chǔ)的數(shù)據(jù)能達(dá)到100%的正確率。當(dāng)數(shù)據(jù)源發(fā)送速率為50Mbytes/sec時(shí),數(shù)據(jù)有錯(cuò)誤。

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

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

  5 結(jié)語(yǔ)

  本文介紹的實(shí)現(xiàn)方法易于實(shí)現(xiàn),且充分挖掘了硬件的性能,可滿足對(duì)數(shù)據(jù)采集與實(shí)時(shí)存儲(chǔ)速率要求較高(≤45Mbytes/sec)的應(yīng)用。由于使用的硬件平臺(tái)是普通的奔四級(jí)PC機(jī),所以開(kāi)發(fā)成本較低。另外文中對(duì)實(shí)現(xiàn)過(guò)程中應(yīng)注意的問(wèn)題作了詳細(xì)說(shuō)明并給出核心編程部分,使讀者很容易在較短時(shí)間內(nèi)開(kāi)發(fā)出滿足自己需要的系統(tǒng)。

c++相關(guān)文章:c++教程



上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉