06-12-2017 11:10 PM
VisualBasic2010
USB-6002を使用
連続サンプリング中のサンプルデータ数を確認して
必要数のデータを取得したいと思っています。
必要数のデータが溜まった際にイベントを発生させ
サンプリングする方法はサンプルコードにありましたが
上記の方法でのサンプリング方法がわかりませんでした。
通常、このようなサンプリングは行わないのでしょうか?
06-15-2017 02:07 AM
こんにちは!
問題を把握するにあたり、2点質問してもよろしいでしょうか?
1.「連続サンプリング中のサンプルデータ数を確認して必要数のデータを取得したい」とのことですが、もう少し詳細な処理内容を伺ってもよろしいでしょうか。
例.サンプルレート1000で、電圧を連続測定して5V以上の値を取得したい、など
2.参考にされたサンプルコードは、どのようなコードでしょうか。サンプル名がお判りであれば教えて頂けば幸いです。
なお補足となりますが、Visual Basic 2010でのDAQプログラミングについて、資料を見つけましたので、よろしければ参照いただければと思います。
Visual C# .NETでのDAQプログラミング - National Instruments
http://digital.ni.com/public.nsf/allkb/A20418336F02A21586256EC1003FCC88#NoMS
06-15-2017 04:22 AM
icchiさん、こんにちは。
メッセージありがとうございます。
ご質問いただいている点、回答します。
1msecのサンプルレートで、アナログ入力8チャンネルのサンプリングを行いたいとしています。
バッファからのデータ更新周期は100msecとしており、100msec毎に100サンプルのデータ取得を行っています。(ContAcqVoltageSamples_IntClkを参考)
フォームの移動などを行った際、イベントの処理がとまってしまうようで
データ受信が出来ず、しばらくするとメモリーのオーバーフローでエラーが出るような状態になります。
これを回避する方法として、デバイスのメモリ内にバッファリングされたデータ数を調べて、必要数に達していたら定量(100サンプル)のデータを取得する方法がとれないかと考えております。
このような方法は負荷もかかりそうなので、あまり良い方法とは思っていませんが、試すこともできず困っております。
お力をお貸しいただければ助かります。
参考にしたコードは、DAQmxをインストールした際に、同時にインストールされるサンプルプログラム
ContAcqVoltageSamples_IntClk or _SWTimed を参考にしています。
06-21-2017 09:25 PM
ご返答ありがとうございます。
返事が遅れてしまいすみません。
中々、同じ事象が起こらず困っています…
教えて頂いた情報から判断すると、読み取り速度がハードウェアの収録に追いついていないため、イベント発生時に処理が止まると、バッファにデータが溜まっていき、メモリのオーバーフローが起きるのではないでしょうか。
ご提案いただいている回避策を試すよりも、先ずは読み取りの速度を上げてみてはいかがでしょうか。
もし上記の方法で問題が解決しない場合は、こちらでも問題の事象を再現してみたいと思いますので、お手数ですがソースコードをご開示いただけないでしょうか。
よろしくお願いいたします。
06-21-2017 10:55 PM
お探しのコードは下記のものかと思います。
AvailableSamplesPerChannel Property
ですが、icchiさんのおっしゃる通り根本的な原因を調べなくては、
どうしても場当たり的な対応になってしまい、後々問題が再発しかねません。
Readのループが長時間、実行されないような状況になっていませんか?