07-29-2011 12:49 PM
ここで何度かお世話になっているk-catと申します.
LabVIEWに関しては,まだまだ分からないことが多く,どなたか詳しい方に是非ご教授頂きたく,再度書き込みをさせて頂きました.
よろしくお願いいたします.
私は,LabVIEWでデータ集録を行い,卓球ボールがネット上を通過した際の入射角度,速度,高度を算出するということを行っています(画像1).
卓球台のネットを挟んで赤外線センサを設置し,A選手側が1-8ch,B選手側が9-16chで計16chのデータ集録を行っています.
卓球ボールがセンサを遮ると電圧が5Vの出力で変化し,3.5V以上の変化でボールがセンサを遮ったと定義しています.
現在,計測ファイルから読み取ったデータ(実際に試合から得たデータ)から入射角度,速度,高度を算出するプログラムがあり,
これをDAQアシスタントでWhileループで回しながら,ボールが通過した直後に数値が算出できるプログラムにしたいと考えています.
リアルタイムで3.5V以上を超えたチャンネルと時間を抽出し,配列させるにはどのようにしたらいいでしょうか.
(現在,計測されたデータをチャンネルごと3.5V以上のポイント検出を行っているかと思います)
どなたかご教授頂ければと思います.よろしくお願いいたします.
08-11-2011 07:28 AM
k-cat さん
面白いですね!ただ、Whileループを回しながら処理させるのは、処理内容にもよりますが少々非現実的な気がします。
DAQアシスタントで連続集録させるプログラムだと、サンプルレートと読み取るサンプル数によってループの回る速度が下記のように決まります。
例:
サンプルレート1000・読み取るサンプル数100の設定だと、ループレートは100msec
サンプルレート1000・読み取るサンプル数1000の設定だと、ループレートは1000msec(1秒)
上記の例は、どちらもWhileループの中で行うプログラミングが、DAQのAPIでの集録に関するのみであった場合で、処理に100msec以上(最初の例で)、かかるようであれば集録自体が足を引っ張られ悪影響を及ぼしてしまうので、処理の部分がループレート内に納まるような内容にしておく、というのがボトルネックになります。
ただし、例え処理が間に合う、として仮に(最初の例で)リアルタイムで読み取られたデータから入射角度,速度,高度を算出できたとします。
ところが、上記の例では100msecおきにその処理が更新されることになるので、例え処理が追いついたとしても、ユーザがその値を確認できるのはたったの0.1秒間です。
それでも表示させる意味があるのでしょうか?
ループレートを抑えるため、読み取りサンプル数の値を増やしたとします。そうすると、データの更新は下の例では1秒置きにはなり、なんとか目で終える早さにはなりますが、
1秒置きに1000個のデータが更新されながら表示されるとして、毎秒切り替わる1000個ものデータを目で追えるのでしょうか。処理が追いついたところで、そもそも何のための表示なのか、表示させることに意味がないといけません。
とりあえず、複数チャンネルからの連続集録のデータ扱いは、1D波形かDBLの2D配列の処理になるので、参考になるプログラムを添付します!
Good Luck!