解決方案
讀取數據有兩個方面:現實世界中的訊號被數位化的速度有多快("how fast?"),以及軟體一次從硬體FIFO中檢索了多少數據("how much?")。這些軟硬體配置相互依賴。
在硬體方面, DAQmx Timing功能確定從設備/感測器到數據採集卡片上硬體FIFO的數據流速率。在軟體方面,DAQmx Read功能確定數據從PC Buffer到軟體的傳輸。參見下圖:
第1部分:從DAQ卡片上的設備/感測器到硬體FIFO總覽DAQmx Timing功能控制從設備獲取Sample的數量和速率。此功能在三種不同的取樣模式下運行:
- Finite,
- Continuous,
- Hardware timed single point.
選擇哪種模式會影響取樣的Sample數量。
DAQmx Timing函數是多態的;這裡討論的實際例子是
Sample Clock 。有關DAQmx Timing的其他實例,請參見DAQmx
Help。
How Much?對於 Finite acquisition, DAQmx Timing的“
Samples Per Channel”輸入確定每個通道上讀取多少個Sample。換句話說,“
Sample Per Channel 設置將要收集的"數據塊"的大小。
對於Continuous acquisition, "
Samples Per Channel "為每個通道指定的PC Buffer的大小。
How Fast?DAQmx Timing的
Rate輸入確定取樣速度並以多快的速度放入硬體FIFO。指定速率的值取決於DAQmx Timing中Source輸入指定的timebase。指定的速率必須能夠整除Source。例如,X系列卡上的預設Source是onboard clock(100 MHz)。有關可實現取樣率的更多訊息,請參閱以下內容:
第2部分:從硬體FIFO到PC Buffer和編程環境How Much?DAQmx Read功能的“
Number of Samples Per Channel”輸入確定從PC Buffer向編程環境提取多少Sample。選定的數據傳輸機制(如下所列)決定了如何將Sample實際從硬體FIFO引入PC Buffer。有關更多訊息,請參見
Data Transfer Mechanisms - NI-DAQmx Help January 2019。
- DMA
- Interrupt Requests
- Programmed I/O
- USB bulk
當使用編程的I / O方法時,DAQmx Read功能直接從硬體FIFO本身獲取Sample。當使用所有其他硬體定時的傳輸機制時,建議取樣數為DAQmx Timing功能上指定的速率的1/10。例如,如果在
DAQmx Timing function上輸入的速率為1000(Hz),則DAQmx Read功能上每個通道的取樣數應不超過100。這是為了確保沒有PC Buffer覆蓋或寫入錯誤 。
How Fast?執行編程的I / O時,從DAQ上的硬體FIFO讀取Sample到編程環境的速率取決於調用讀取功能的頻率。由於DAQmx Read功能通常處於while loop中,因此迴圈執行速率將確定DAQmx Read功能執行的頻率。軟體的速度也將取決於處理器的速度和單位時間內所能執行的次數。
當使用其他數據傳輸機制時,Sample從硬體FIFO進入PC Buffer的速度與程式的執行速度無關。因此,通常希望使用非編程的I / O機制,該機制強制使用PC Buffer,以便可以及時保留多個Sample,以便讀取DAQmx Read功能。