DAQ Buffer方面的問題

各位先進大家好,最近使用DAQ擷取卡上遇到一些問題想請教

我的AI設定為continuous samples

rate:100kHz

samples to read:300

這樣的意思是DAQ以100kHz的速度擷取訊號存入buffer中

再從buffer每次取300個訊號點來做運算,請問我這樣子解釋是否正確?

那我要如何確保我運算的訊號是最即時的訊號而不是累積在buffer裡的訊號?

每次運算完就清空buffer還是…?

另外有沒有辦法再降低samples to read的數目呢?(想提高運算速度但再降低的話buffer會爆掉)

先感謝各位的幫忙


TMPZwithF.vi

<span =“apple-style-span”>[Quote]<span =“apple-style-span” style="font-size: 16px; line-height: 24px; ">這樣的意思是DAQ以100kHz的速度擷取訊號存入buffer中
再從buffer每次取300個訊號點來做運算,請問我這樣子解釋是否正確?<span =“apple-style-span”>[/quote]

<span =“apple-style-span”>這樣的理解是正確的。
<span =“apple-style-span”>
<span =“apple-style-span”>如果你經過一段長時間(如:1000 ms)才去讀取DAQ的buffer資料。 因為DAQ卡片上內建的FIFO memory容量有限,所以確實會有你所說的「記憶體爆掉」的情況產生。
<span =“apple-style-span”>
ni的說明請參考:371022k.pdf

第4-11頁有提到:
[quote]
If data cannot be transferred across the bus fast enough, the FIFO 
becomes full. New acquisitions overwrite data in the FIFO before 
it can be transferred to host memory. The device generates an error 
in this case. With continuous operations, if the user program does 
not read data out of the PC buffer fast enough to keep up with the 
data transfer, the buffer could reach an overflow condition, 
causing an error to be generated.
[/quote]


[quote]<span =“apple-style-span” style="font-size: 16px; line-height: 24px; ">那我要如何確保我運算的訊號是最即時的訊號而不是累積在buffer裡的訊號?<span =“apple-style-span” style="font-size: 16px; line-height: 24px; ">每次運算完就清空buffer還是…?[/quote]
及時去讀取資料即可。其實這邊的讀取資料就是「DAQ Read」,在讀取資料後,資料就會從DAQ的FIFO memory傳送到PC的DRAM裡面,所以那個部分的資料就會從FIFO memory清掉,所以你不需要手動清除。


[quote]<span =“apple-style-span” style="font-size: 16px; line-height: 24px; ">另外有沒有辦法再降低samples to read的數目呢?(想提高運算速度但再降低的話buffer會爆掉)[/quote] 
pc每次去DAQ取資料的時間其實不固定。因為PC有時須處理其他的軟體的任務要求,如:防毒軟體、開啟網頁…等。相較之下,DAQ內使用硬體的trigger,所以每次擷取資料的時間相當固定。如果你的「sample to read」的數值設得過小,段時間內也許可以運作正常,但是如果你的PC由於其他程式的使用,造成去DAQ取資料的週期減低的話,確實也會有DAQ記憶體爆掉的問題。解決方法就是「sample to read」不要設定的太低。如果smaple rate是100k的話,sample to read大約設定成10k,算是比較安全的設定方式。

感謝你的回覆,另外還有一些疑問想請教

[quote]另外有沒有辦法再降低samples to read的數目呢?(想提高運算速度但再降低的話buffer會爆掉)[/quote] 
[quote]pc每次去DAQ取資料的時間其實不固定。因為PC有時須處理其他的軟體的任務要求,如:防毒軟體、開啟網頁..等。相較之下,DAQ內使用硬體的trigger,所以每次擷取資料的時間相當固定。如果你的「sample to read」的數值設得過小,段時間內也許可以運作正常,但是如果你的PC由於其他程式的使用,造成去DAQ取資料的週期減低的話,確實也會有DAQ記憶體爆掉的問題。解決方法就是「sample to read」不要設定的太低。如果smaple rate是100k的話,sample to read大約設定成10k,算是比較安全的設定方式。[/quote]

這邊因為我想要較快的反應速度,
若一次輸入10k個點進行運算反應會變慢得滿明顯的,
如果訊號寫入buffer的速度>訊號從buffer讀取的速度,
但每次運算完都清空buffer,這樣是否還會有buffer爆掉的問題呢?

清空buffer是可以的。


就等於是直接使用daq assiatance,一個icon去讀取資料依樣。你可以設定一次讀取100個資料點。然後把daq的資源釋放掉。


也就是每一次讀取的時候,都經過一次:「init. > 擷取資料 > close」的過程。

但是如果你不需要那麼多筆資料的話,為什麼sampling rate不要調低一些呢?

[QUOTE=Benjamin]清空buffer是可以的。


也就是每一次讀取的時候,都經過一次:「init. > 擷取資料 > close」的過程。

但是如果你不需要那麼多筆資料的話,為什麼sampling rate不要調低一些呢?
[/QUOTE]

因為我要抓取的值是一個10kHz的sine波,所以rate最小必須設在100kHz

但我比較需要知道他即時振幅的暫態變化,

因此認為只要不至於因為buffer堆積而延遲,是可以不用對每一筆資料都做處理,

再次謝謝你的解答

另一個想法是

sample rate = 100k
sample to read = 10k

每次擷取10k筆資料後,你的程式用waveform subset或是array subset的方式,只取前1k筆資料來計算。

參考一下喔。

好像是個不錯的方法,我會試試看

非常感謝!

[QUOTE]

清空<span =“highlight”=“”>buffer是可以的。

就等於是直接使用<span =“highlight”=“”>daq assiatance,一個icon去讀取資料依樣。你可以設定一次讀取100個資料點。然後把<span =“highlight”=“”>daq的資源釋放掉。
[/QUOTE]
不好意思!我想請問一下,關於最後把daq的資源給釋放掉,那請問要怎麼釋放??
是要再建立一個屬性節點嗎???

清除DAQ的session可以用 DAQmx Clear Task



[tube]qZoxeVsiebU[/tube]