寫這篇博客的主要問題是: 以前寫了關於數據採集----爲何使用數字輸入端口不存在分頻現象,而使用模擬輸入端口採集數據時,編程
存在分頻現象? 遺憾的是,如今找不到了!數組
------------------------------------------------------------------------------緩存
1. 數據採集的時候會不會丟失?spa
若是軟件上讀取數據的循環運行得不夠快時,好比100K採樣率的時候,軟件循環確定沒有這麼快,數據是否是就丟失了?blog
首先,咱們要清楚的是,數據採集功能是由數據採集卡來完成的,軟件知識將採集到的數據收到電腦上面來,數據採集卡有自身的辦法內存
來解決硬件採集速度快過於軟件讀取速度的問題。博客
這須要對數據採集過程當中的數據的傳輸做一個介紹:外部的信號進入數據採集卡後,通過各類處理轉換,先進入數據採集卡自身的it
緩衝區裏面,緩衝區是先進先出(FIFO)的,NI採集卡應該都有板載的緩衝區,區別在於緩衝區的大小而已。而後當板載緩衝區中的數軟件
據量到了必定的條件時,數據採集卡將緩衝區的數據上傳到計算機內存中,通常以DMA(直接內存訪問)方式傳入的,但也能夠設置爲循環
其它方式,好比中斷等。 上傳數據的方式和時機能夠經過DAQmx的屬性節點進行設置或查看,DAQmx中默認的是使用DMA傳輸方式
(前提: 板載內存非空)。
數據傳輸方式包括:直接內存訪問(DMA),中斷請求(IRQ)和可編程I/O。DMA是一種DAQ板卡和PC內存間直接通信的傳輸
方式,再也不須要處理器的干預。 IRQ傳輸一般很低,只有150Kb/s,而DMA能夠高達20Mb/s。IRQ傳輸速率與使用的系統設備相關,
如處理器速度等。
數據到了內存後,再由程序中的DAQmx Read.vi從內存中讀入到計算機中去。這裏計算機的內存要和板載緩衝區區分來,板載緩
衝區是廠商固定死的,改變不了,不會出現溢出的狀況,它的空間能夠很小,好比1Kbit如下, 但計算機爲數據採集開闢的內存
建議是採樣率的10倍左右,便是說及時DAQmx Read.vi在10秒鐘都沒有執行一次的話,那麼就會出現內存不足以存放採集到的數據的
問題,致使數據丟失,DAQmx Read.vi就會報錯。 內存中的大小能夠再DAQmx Timing(Sampleclock).vi的每通道採樣輸入端進
行設置。可是DAQmx會默認設置一個最小值,若是你在每通道採樣輸入端設置的值小於這個值的話,DAQmx會忽略你輸入的這個值而
使用默認最小值。
不過單單將這個緩衝區設置成10倍,並不必定能保證緩衝區不會溢出,由於緩衝區的存儲的數據量不但跟它的輸入速度(採樣率)有關
,還跟它的輸出速度有關,它的輸出速度就是採集程序從它裏面讀取的速度,因此通常在使用循環中調用DAQmxRead.vi的時候,通常
是選擇多態VI中的多采樣而不是單採樣。
同時將它的每通道採樣數設置爲-1,表示每次調用DAQmxRead.vi的時候都是將內存中的全部數據讀取進來。在一些特殊狀況下才將這
個輸入設置爲其它整數,但就得保證循環能儘快的執行,以避免緩衝區溢出。若是設置爲100的話,表示每次從緩衝區中讀取100個數據回
來,若是緩衝區的數據不足100個,那麼就會等到夠了100個後纔讀進來並輸出,程序會在這裏等待緩衝區的數據夠100個才日後執行,
跟串口設置讀取緩衝區字節數同樣。設置爲-1則不會出現等待的狀況,有就讀,沒有就返回空數組。
因此,總結一下,爲了保證數據不會失丟,要設置好內存緩衝區的大小,還要保證讀取緩衝區的程序(DAQmxRead.vi)循環得儘可能快
,每一次讀取的數據儘可能多。
*****************************************************
總結: 1) 數據傳輸到電腦內存中
2) 數據不丟失 設置緩存區的大小,讀取緩存區的程序DAQmx Read.vi循環的儘量快。
-----------------------------------------------
2. 數據採集時間問題
數據採集時間問題主要兩方面。 一是每個數據點的時間,在NI的數據採集中是經過T0和dt來肯定的,T0就是開始數據採集的初始
時間,是任務開始時,數據次啊及卡讀取的計算機時間,dt二個數據點之間間隔的時間,是採樣率的倒數,好比1K採樣率,dt就是
1/1000=0.001=1毫秒。 在施工DAQmxRead.vi的時候要選擇波形輸出而不是DBL輸出,波形輸出就帶有這些信息,而DBL就只有
數據而沒有時間信息了。
另外一個就是採樣率設置的問題。數據採集卡的採樣脈衝通常是由它的內部時鐘源進行分頻後獲得的,因此採樣率是否是很是準確,得
看時鐘源是否能被整數倍地分頻到指定的採樣率。
問題:我設置採集的採樣速率爲500,001Hz。若是我在Labview中用NI-DAQmx編成,如何肯定實際採樣率?
答:您能夠用DAQmx定時屬性節點來得到此信息。SamPLClk.Timebase.Rate屬性提供了產生實際採樣率的時基頻率
(timebasefrequency)。大多數DAQ設備有兩個時基頻率:20MHz和100kHz。SamplClk.TimebaseDiv屬性提供分頻係數,用於從
時基頻率分頻下來到您所但願的實際採樣時鐘頻率。因此當您設置您的採樣速率爲500,001Hz,設備利用20MHz時基和分頻係數39來
得到實際的採樣速率20MHz/39=512,820.51Hz分頻係數永遠是一個整數,該整數的大小取決於您的數據採集板卡的型號。舉個例
子:假設分頻係數是一個16位的整數,這樣20MHz時基容許您使用的全部頻率均大於305.18Hz,由於一個16位整數對應的最大分頻
係數爲65,535。100kHz時基用於低於該頻率的採樣速率。進而,若是您指定的頻率不能準確獲得,驅動將採用最接近於您指定的採
樣率且高於您所指定的採樣率。
另外,若是確實須要指定的採樣率,也能夠用外部的時鐘源做爲採樣脈衝來進行數據採集。
其實更深刻一點的話,在連續採集的應用程序中,數據採集時鐘源的準確性問題就會顯示出來,假設時鐘源的偏差是50ppm
(百萬分之五十),即二萬分之一,而一天有86400秒,若是連續運行一天的話數據採集的時鐘偏差最多就會有4秒多,因此到了24
小時後就會出現波形圖上的時間與計算機時間差了大概4秒左右的現象,時間越長這個偏差就可能越大,若是這個偏差不能接受的話就
須要想其它辦法解決。其中一個方法是換一個更高精度的時鐘源,但長時間運行的話始終仍是會有偏差的,以前用過的方法是到了0點
的時候關閉任務再從新開啓,讓數據採集卡與計算機從新對時。