03-10-2016 03:21 AM
すいません。
やり方がよくわからないので教えてください。
NI-USB6351を使用しています。
このDAQを用いて、1時間おきにデータをとり、さらに収録終了後に保存をするという
プログラムを作りました。
一定時間ごとに数十秒のロギングしたい為、「Daqmxロギングを構成でデータ保存」をするのではなく
whileループにシフトレジスタを設け、シフトレジスタを10段程度くみ、そのデータを「波形をファイルに書き込む」を用いて
データを書き込むようにしました。
ファイル名は時間で名前をつける為、都度新しいファイルを作ります。
ここでわからないことがあります。
whileループ内の「波形をファイルに書き込む」を実行するとエラーコード1 NewFileと表示され
データは保存されません。
whileループを抜けた後の「波形をファイルに書き込む」については保存がされます。
あと懸念しているのがもし保存が正常にできるようになってもデータを保存しているときにもロガーが動作している為
メモリがパンクすると思っています。これを回避するにはどうすればいいでしょうか?
お手数ですがご教示お願いいたします。
03-10-2016 08:55 PM
my_hiro73 様
エラー 1は、入力パラメータが無効であることを示しているため、
「波形をファイルに書き込む」VIに配線されているパスなどに問題がないかを確認したほうがよいと思います。
「メモリがパンクする」と懸念されておりますが、一番起こりえそうなことは、「DAQmx読み取り」VIでバッファ上書きエラーが発生することです。
あとは、サンプル数次第ですが、メモリフルエラーやファイルI/Oのオーバーヘッドによる処理時間の増加が考えられます。
下記のサンプルにあるように生産者・消費者デザインパターンでキュー関数を用いて別ループ処理にすれば良いと思います。
この例では、ディスクストリーミングなので、ファイルを開いておいて、収集しながら保存し続ける方法です。
DAQmx アナログ集録で集録したデータをCSV形式で保存
https://decibel.ni.com/content/docs/DOC-40751
以上です。
03-10-2016 11:19 PM
ご回答ありがとうございます。
おっしゃられていたように初歩的なミスでした。
キューの話も大変参考になります。
そのキューについて質問です。
使い方として、普段はグラフは見るだけで保存は定時間にしようと思ったら
普段はキューの排出にしておいてキューを抹消し、保存するときはデキューにして指定時間保存しておけばいいのでしょうか?
大変助かりました。
ありがとうございます。
03-10-2016 11:45 PM
生産者ループ側は常にエンキューしている状態であるため、消費者ループもデキューしておき、
必要なタイミングで保存するケースに切り替えるというので良いと思います。