1

何も知らされていない傲慢な瞬間に、私は新しいデータ取得コンピューターを x64 で win7 を実行することに決めました。コンピューターで実行されている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 の数がゼロであると主張しています。そしてただ止まる。

何が起こっている?リスナーをどのように設計すればよいですか?

=========

\begin{暴言}

セッションベースのDAQに関するmatlab Webサイトの文書化がどれほど不十分であるかは信じられません。タイミングの取れたデジタル I/O がありませんか? おい!

\end{暴言}

=========

-bas

4

0 に答える 0