我在使用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发布于 2021-10-13 05:42:10
我猜问题是您没有将触发器设置为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所以task是专门为通道ai1创建的,它设置了基于ai0通道的触发器。
https://stackoverflow.com/questions/69378138
复制相似问题