我有一个机箱 cDAQ-9174 和两个 DAQ(NI 9421 和 NI9208),用于监控一些基于电压的传感器并读取一些基于频率的传感器。
为此,在 MATLAB 中,我创建了一个会话,其中我为基于电压的传感器添加了 ai_channels,为频率传感器添加了 ci_channels。我什至设法进行了缓冲采集,因此我可以获得 1 Hz 频率同步读数:
“Matlab 代码”
s = daq.createSession('ni');
addAnalogInputChannel(s,'cDAQ3Mod3','ai2','Voltage');
addCounterInputChannel(s,'cDAQ3Mod2', 'ctr0', 'Frequency');
addCounterInputChannel(s,'cDAQ3Mod2', 'ctr1', 'Frequency');
% addCounterInputChannel(s,'cDAQ3Mod2', 'ctr2', 'Frequency');
% addCounterInputChannel(s,'cDAQ3Mod2', 'ctr3', 'Frequency');
s.DurationInSeconds=5; %Tempo de aquisição
s.Rate=1; %Number of samples per second
% inputSingleScan(s)
[data,time]=s.startForeground();
由于 Matlab 许可证有点贵,而 python 不是,所以我使用 NIDAQmx 库将此代码转换为 python (v3.7)。
我很失望地发现,显然,您不能将不同的频道类型添加到同一个任务中:
import nidaqmx as daq
fTask = daq.Task()
fTask.ai_channels.add_ai_voltage_chan("/cDAQ3Mod1/ai8")
fTask.ai_channels.add_ai_voltage_chan("/cDAQ3Mod1/ai0")
ftask.ci_channels.add_ci_freq_chan("cDAQ3Mod2/ctr0")
nidaqmx.errors.DaqError: Task cannot contain a channel with the specified channel type, because the task already contains channels with a different channel type.
Status Code: -200559
查看此错误的文档,您会发现:
错误 -200559 任务不能包含具有指定通道类型的通道,因为该任务已经包含具有不同通道类型的通道。为每种渠道类型创建一个任务。
所以,现在我很困惑 MATLAB 代码是否有效(并且确实有效),以及如何实现两个已同步获取数据的任务。