如何在Python上為DAQmx任務設定取樣率?

更新 Jun 15, 2023

產品資訊

硬件

  • CompactDAQ Chassis

驅動程式

  • NI-DAQmx

程式語言

  • Python

問題敘述

我透過 Python 控制我的DAQ設備,目前可以建立任務並連線到DAQ設備;接下來我想設定與 Timing 相關的參數,請問要如何為任務設定取樣率和取樣模式呢?

解決方案

您可以設定nidaqmx.task類的 timing 屬性,如參考文件中所示。方式是使用 cfg_samp_clk_timing 方法: 請在編寫 Python 腳本時執行以下步驟:
  • 使用以下幾行導入所需的 timing 常數。有關更多資訊,請讀參考資料的 Constants section
from nidaqmx.constants import Edge
from nidaqmx.constants import AcquisitionType
  • 建立您的 nidaqmx 任務並為其增加頻道。 (此範例將使用 Digital Input 任務)
with nidaqmx.Task() as digitalInputTask: 
        digitalInputTask.di_channels.add_di_chan("cDAQ1Mod3/port0/line0", line_grouping=LineGrouping.CHAN_PER_LINE)
  • 使用cfg_samp_clk_timing設定 timing 選項
digitalInputTask.timing.cfg_samp_clk_timing(1000,source =“”,active_edge = Edge.RISING,sample_mode = AcquisitionType.FINITE,samps_per_chan = 5)

此方法的參數如下:
  • ratefloat )– 指定每秒每通道樣本中的取樣率。
  • source (optional[ str ] )– 指定取樣時鐘的 source terminal。不指定的話會使用裝置的預設 onboard clock。
  • active_edge – 指定在取樣時鐘脈衝的哪些 edge 上擷取或產生取樣。
  • sample_mode – 指定任務是否連續擷取或產生樣本,或者它是否擷取或產生有限數量的樣本。
  • samps_per_chan (optional[ long ] )– 指定使用FINITE_SAMPLES時每個通道要擷取取或產生的取樣數。

最終您的程式碼應會類似於下方程式碼片段:
import nidaqmx
from nidaqmx.constants import LineGrouping
from nidaqmx.constants import Edge
from nidaqmx.constants import AcquisitionType 

with nidaqmx.Task() as digitalInputTask: 
        digitalInputTask.di_channels.add_di_chan("cDAQ1Mod3/port0/line0", line_grouping=LineGrouping.CHAN_PER_LINE)
        digitalInputTask.timing.cfg_samp_clk_timing(100, source="", active_edge=Edge.RISING, sample_mode=AcquisitionType.FINITE, samps_per_chan=50)
        data = digitalInputTask.read(50);
        print(data)

相關資訊

有關如何透過Python使用NI-DAQ裝置的資訊,請參閱以下文章
可以在此連結中找到Python API的完整參考。