簡體   English   中英

回調:DAQmxRegisterDoneEvent()和DAQmxEveryNSamplesEvent之間的區別

[英]Callbacks: Difference between DAQmxRegisterDoneEvent() and DAQmxEveryNSamplesEvent

試圖弄清楚如何專門調用回調包裝器。 我們的代碼處理了slowTaskonTask slowTask期間,我處理以下兩行(特定於此問題):

DAQmxCfgSampClkTiming(slowTask, "OnboardClock", GUI_RATE,
      DAQmx_Val_Rising, DAQmx_Val_ContSamps, 1);
DAQmxRegisterEveryNSamplesEvent(slowTask, DAQmx_Val_Acquired_Into_Buffer, 1,
      0, EveryNCallbackWrapper, this);

我知道在這里,每當緩沖區填充一個樣本時,就會調用EveryNCallbackWrapper

對於onTask ,我onTask理解回調如何被調用。 我查閱了NI文檔,但聽不懂。

DAQmxCfgSampClkTiming(onTask, "OnboardClock", ON_RATE, DAQmx_Val_Rising,
     DAQmx_Val_FiniteSamps, 100);
DAQmxRegisterDoneEvent(onTask, 0, DoneCallbackWrapper, this);

這個讓我更加困惑。 我相信只要觸發onTask(使用硬件觸發器),DAQ就會以ON_RATE采樣/秒的速率開始對模擬測量值進行數字化處理,一旦將100個采樣采樣/讀入DAQs緩沖區,就會調用DoneCallbackWrapper() 取決於此硬件觸發信號保持高電平的時間,每次DAQ讀取100個樣本(觸發器為高電平)時,將調用此包裝器?或者在讀取100個樣本之后,僅調用一次回調?

讀取100個樣本后,僅調用一次回調

由於slowTask使用DAQmx_Val_ContSamps ,因此該程序要求進行無限 (也稱為連續)采集,並將數據流式傳輸到主機。 使用EveryNSamples回調使程序可以訪問和處理設備發送的最新數據。

因為onTask使用DAQmx_Val_FiniteSamps ,所以該程序要求單次采集100樣本。 使用“ Done事件,程序可以訪問和處理完整的采集和完整的采集。

在您的評論更新中,程序使用

DAQmxCfgDigEdgeStartTrig(onTask, "/PXI2Slot4/PXI_Trig0", DAQmx_Val_Rising));

onTask配置數字邊沿啟動觸發器 當該觸發線具有上升沿時, onTask采集開始,捕獲100個樣本,停止並調用回調。

如果程序需要在/PXI2Slot4/PXI_Trig0 每個上升沿為onTask采集100個樣本, onTask可以使用NI 63xx系列設備上的可重觸發屬性 ,該屬性允許針對每個觸發事件重新運行同一任務。

更多詳細信息在X系列用戶手冊中

AI啟動觸發器也可配置為可重新觸發。 定時引擎響應於AI Start Trigger信號上的每個脈沖,生成樣本並轉換時鍾以進行配置的采集。

在時鍾生成過程中,定時引擎會忽略AI Start Trigger信號。 時鍾生成完成后,計數器等待另一個啟動觸發器開始另一個時鍾生成。 圖4-22顯示了一個可重觸發的模擬輸入,每個輸入具有三個AI通道和四個采樣

可觸發的模擬輸入信號的圖示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM