簡體   English   中英

NI DAQmx - 觸發輸入通道使用外部模擬觸發輸入(python)讀取 N 個樣本

[英]NI DAQmx - Trigger input channel to read N samples using external analog trigger input (python)

我在使用 Python 和 nidaqmx 庫正確觸發模擬輸入通道以讀取 N 個值時遇到問題。 我有兩個模擬輸入通道,ai0 和 ai1。 通道 ai0 是觸發通道,讀取 9V,直到電路連接並且電壓變為 3V。 那一刻,我想從通道 ai1 讀取 N 個樣本。 我想重復這個過程 1 分鍾。 我正在使用 NI USB-6361 daq。

我的代碼在下面,問題是我的代碼不會等到觸發器滿足后才執行讀取任務。 觸發器配置正確,因為如果我刪除 ai1 任務,一旦電壓下降,程序將從通道 ai0 讀取 N 個樣本。 但是,我想從 ai1 讀取信號,但使用 ai0 作為觸發器。 希望這是有道理的,並感謝您的幫助。

import nidaqmx

num_samples = 1000;
s_freq = 1e3;
tend = num_samples/s_freq;

#read from DAQ
def readdaq():
    task = nidaqmx.Task()
    task.ai_channels.add_ai_voltage_chan("Dev1/ai0",max_val=10, min_val=0)
    task.triggers.reference_trigger.cfg_anlg_edge_ref_trig("Dev1/ai0", pretrigger_samples = 10, trigger_slope=nidaqmx.constants.Slope.FALLING, trigger_level = 5)
    task.stop()
    task.close()
    
    task = nidaqmx.Task()
    task.ai_channels.add_ai_voltage_chan("Dev1/ai1",max_val=10, min_val=0)
    task.timing.cfg_samp_clk_timing(s_freq, sample_mode=nidaqmx.constants.AcquisitionType.FINITE, samps_per_chan=num_samples)
    task.start()
    value = task.read(number_of_samples_per_channel=num_samples)
    task.stop()
    task.close()
return value

我想問題是您沒有將觸發器設置為ai1通道,而是設置為ai0通道。 嘗試這個:

def readdaq():
    task = nidaqmx.Task()
    task.ai_channels.add_ai_voltage_chan("Dev1/ai1",max_val=10, min_val=0)
    task.triggers.reference_trigger.cfg_anlg_edge_ref_trig("Dev1/ai0", pretrigger_samples = 10, trigger_slope=nidaqmx.constants.Slope.FALLING, trigger_level = 5)
    task.timing.cfg_samp_clk_timing(s_freq, sample_mode=nidaqmx.constants.AcquisitionType.FINITE, samps_per_chan=num_samples)
    task.start()
    value = task.read(number_of_samples_per_channel=num_samples)
    task.stop()
    task.close()
return value

所以任務是為通道ai1創建的,它設置了基於ai0通道的觸發器。

暫無
暫無

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

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