在數據采集過程中經常遇到緩沖區重寫錯誤,一般提示,原來采集的數據已經被重寫。這樣的錯誤與緩沖區密切相關。
在傳統DAQ中 緩沖區非常明顯,但是在新的DAQMX中,緩沖區的分配被隱含了,從程序框圖上看不到緩沖區的概念,這一方面簡化了編程的復雜性,對於初學者非常有利, 但是另一方面,由於不了解緩沖區的基本原理,導致采集程序的低效和錯誤無法處理。
下面談一下NI板卡模擬量緩沖區是如何確定的,這些知識在DAQMX文檔中解釋的非常清楚。
輸入類型任務這里指的模擬量輸入,我們知道模擬量輸入可以分為單點采集方式、定點采集方式和連續采集方式。
A、單點采集方式不需要分配緩沖區。
B、定點采集方式
所謂定點采集,是由用戶確定需要采樣的點數,這可以通過設置Samples Per Channel參數實現。比如每通道采集1000個采樣,采集8個通道,則分配的緩沖區大小為1000×8,因此LV分配的緩沖區是足夠容納所有采樣點的。

上面是定點采集的程序框圖,紅色箭頭處表示與分配緩沖區相關的參數。
- 圖中虛擬通道VI中,物理通道參數決定了需要采集的通道數。
- 采樣模式確定了定點采集方式。
- Samples per channel(每通道采樣數)和物理通道數共同決定了緩沖區的大小,為二者的乘積關系。
- RATE(采樣率)在定點方式下與緩沖區的大小無關,采樣率決定了完成所有采樣所需要的時間,不影響緩沖區的大小。
- 定點采集方式下讀函數一次讀取整個緩沖區, 不需要設置要讀取的采樣數。
C、連續采集方式
同定點采集方式類似,連續采集方式下,LV分配的最小緩沖區等於每通道采樣數X通道數,保證能容納規定的采樣數量。但是與定點采樣不同,根據每通道采樣數和采樣速率設置不同,LV會對緩沖區進一步調整,如下表所示。連續采集方式下,緩沖區的大小不僅取決於Samples Per Channel,也取決於Sample Rate,緩沖區的大小取二者之間較大的數。
連續采集方式緩沖區的大小與采樣率相同,這是可以理解的。設想一下,在高速采樣的情況下,采樣速率為100萬每秒,每通道采樣1000個,假設為單通道采集,則1000個采樣需要時間為1毫秒。如果緩沖區為1000,則必須保證1MS 讀取一次,每次1000個。這對於WINDOWS操作系統,由於其非實時性,根本無法保證1MS循環一次。所以必須要擴大緩沖區的大小,才能滿足要求。
一般情況下,連續采集的緩沖區大小決定於采樣速率,其分配情況如下表所示。
| Sample Rate | Buffer Size |
|---|---|
| No rate specified | 10 kS |
| 0–100 S/s | 1 kS |
| 100–10,000 S/s | 10 kS |
| 10,000–1,000,000 S/s | 100 kS |
| >1,000,000 S/s | 1 MS |
看一下連續采集方式下的程序框圖。

- 虛擬通道設置與定點采集相同,物理通道決定了采集的通道數。
- 采樣模式確定為連續采集方式。
- Samples Per ChanelX通道數決定最小緩沖區的大小。
- 采樣率決定了是否調整緩沖區大小,如上述表格所示。
- 讀函數必須規定每次讀取采樣數,這樣通過采樣率和每通道采樣數,就可以確定循環時間。
不僅僅是AD采集需要緩沖區,緩沖計數方式和DA波形輸出都涉及到緩沖區分配的問題。對於AD采集,為了充分利用緩沖區的內存,采用循環緩沖的方式,在以后的文章中,會專門說明循環緩沖區的工作原理。
