在一个不知情的傲慢的时刻,我决定我的新数据采集计算机将成为x64运行win7。我有在计算机上运行的matlab 2012a和执行数据acq的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的数量为零。然后停下来。
发生了什么事?我应该如何设计我的听众?
======
\ begin {rant}
我无法相信matlab网站对于基于会话的DAQ有多么糟糕。没有定时数字I / O?啧!
\ {端咆哮}
======
-bas