1

在不知不觉中,我决定我的新数据采集计算机将是运行 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

4

0 回答 0