在不知不觉中,我决定我的新数据采集计算机将是运行 win7 的 x64。我在计算机上运行 matlab 2012a,并使用 NI PCIe6363 卡进行数据采集。我的问题是关于新的 daq.Session 界面以及如何在后台收集数据(我实验的一个关键组成部分)。
我包括一些示例代码。我将尝试解释我认为代码应该做什么。而实际发生的事情......
代码:
function runSessionDAQ
s = daq.createSession ('ni'); s.addAnalogInputChannel('Dev1', 0, 'Voltage');
s.IsContinuous = true; s.Rate = 10000;
timeDuration = 5;
s.NotifyWhenDataAvailableExceeds = s.Rate*timeDuration-1; %trigger 'DataAvailable' before the last sample is collected
lh = s.addlistener('DataAvailable', @(src,events)collectAndSaveData(src,events));
function collectAndSaveData(src,event)
fprintf('here\n');
t = event.TimeStamps; data = event.Data;
save('C:\Users\ephys-data\Desktop\data.mat','t','data');
end
tic;
startT = toc;
stopT = startT+timeDuration;
stop = false;
s.startBackground();
while ~stop
if toc>stopT;
stop = true;
s.ScansAcquired
s.stop();
fprintf('stopping....\n');
else
if s.ScansAcquired == 0
% keyboard
end
fprintf('continuing...\n')
end
WaitSecs(0.5);
end
delete(lh);
end
预期功能:从卡中连续记录数据约 5 秒。就在扫描最后几个数据点之前,将数据保存在适当的位置。然后停止采集。
实际结果:
>>runSessionDAQ
continuing...
continuing...
continuing...
continuing...
continuing...
continuing...
continuing...
continuing...
continuing...
continuing...
ans =
0
stopping....
没有数据存储在适当的位置。实际上声称 ScansAcquired 的数量为零。就停下来。
怎么了?我应该如何设计我的听众?
=========
\开始{咆哮}
我不敢相信 matlab 网站对于基于会话的 DAQ 的记录是多么糟糕。并且没有定时数字 I/O?嘘!
\结束{咆哮}
=========
-bas