NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

計測データ遅延について

現在、加速度と筋電計測の実験プログラムを組んでいます。

加速度をDAQに信号入力させ、電気刺激を流すプログラムを行っていますが、実際の加速度と電気刺激出力にdelayが生じてしまいます。この場合、roop内の速度の問題でしょうか?それとも、サンプリング数の問題でしょうか?DAQ設定でサンプリング数とレートを上げてしまうと、「-200279」が生じてしまいます。どのような組み方を行えば、加速度データを確実に感知し、電気刺激が流れる信号になるでしょうか?

また、筋電波形/加速度波形ともに表示が遅いです。

ご教示頂けると幸いです。

0 件の賞賛
メッセージ1/12
3,408件の閲覧回数

平素よりNI製品をご愛顧頂きありがとうございます。
日本ナショナルインスツルメンツ技術部の上野です。

 

アナログ入力とアナログ出力に遅延があるのは、アナログ出力を行うケースストラクチャの条件判断を行う処理があるため、必ずアナログ入力が1回実行されてからしかアナログ出力が行われないからです。比較関数の条件を満たさなければ、ループが繰り返されて、より遅延が増えます。

 

エラー -200279が発生する理由は、Whileループ速度が遅く、データ収集速度と合わないためです。詳細については、DAQmx読み取りまたはプロパティノードでLabVIEWエラー-200279が発生するを参照してください。待機関数やファイル保存などの処理を行わなければ、エラーは発生しなくなります。

 

表示が遅いというのは、良く分かりませんが、レートとサンプル数の設定のことかと思います。添付いただいたVIではレートが1000 Hz、読み取るサンプル数が1000点になっています。よって、0.001秒間隔(1000の逆数)で1000点のデータ収集をおこなう、つまり0.001×1000=1秒毎に値をデバイスのバッファからアプリケーションへ読み取る設定です。レートを速くするか、サンプル数を減らせば、読み取る間隔が短くなります。

 

設定変更を試す場合は、関数パレット>>ストラクチャにあるダイアグラム無効ストラクチャを使用して、ループ速度に影響を及ぼす処理を一時的無効化して試すとデバッグしやすいと思います。

 

もしアナログ入力とアナログ出力を同時に開始したいのでしたら、開始トリガを使用したり、アナログ出力のバッファに書き込む値をループ前におこなったりする必要があります。詳しくは、サンプルを参照していただければと思います。

 

 

 

 

 

0 件の賞賛
メッセージ2/12
3,347件の閲覧回数

平素より大変お世話になっております。

ご返答頂きありがとうございます。

 

スレッドに送ってから少し修正を行いました。

レート1000に設定し、サンプリング数100で行うと筋電・加速度の

波形チャートがdelay生じず、可能となりましたが、何回かしていく

うちに波形チャートがフリーズし、画面が動かなくなりました。

 

アナログ出力を行うケースストラクチャですが、一応ある一定の加速度

の値を達したら電気が流れるというプログラムで組んでいたので、ケース

ストラクチャで組んでいます。確かに仰る通り、1回条件を介してから

loop内が実行されることから、加速度と電気刺激の同期が遅れてしまうんだろうな

と推測していました。もし、その他の良い組み方があれば、ご教示いただけないでしょうか。

プログラムとしては、手を動かした時(加速度感知:このプログラムで言えば加速度x0.7に達する)、アナログ出力にて電気刺激が流れるという形を取りたいと考えています。

 

「エラー -200279」に関しては、while loopにシフトレジスタを設定したらエラー表示はでなくなりました。ありがとうございます。

バッファサイズの設定はいまいちまだ理解できていません。

0 件の賞賛
メッセージ3/12
3,333件の閲覧回数

測定の開始時だけ特定の電圧値を超えたら開始するアナログトリガは、一部のDAQデバイスに搭載されている機能です。その機能が使えるかは仕様書に記載されているかどうかを確認する必要があります。

 

連続測定中に指定した電圧値を基にアナログ出力を行うのでしたら、比較関数とケースストラクチャを組み合わせた方法でよいかと思います。

 

ただし、アナログ出力を行うDAQアシスタントは、Trueケースに入るとその都度、構成・出力・終了処理が行われます。これがループを遅くする要因となります。

アナログ出力も連続サンプルモードに構成することで、構成と終了がループの最初と最後だけに行われるようになり、効率よく処理されるようになります。

 

たとえば、下図のようにFalse時は振幅を0として0 Vを生成し、True時はフロントパネルで指定した電圧値にするようにすれば速く処理されるかと思います。

 

SS1.png

 

上図では、計測ファイルに書き込むExpress VIを無効化しておりますが、この部分もループを遅くする要因となっています。添付したVIは、ファイルI/O関数の処理時間を比較します。計測ファイルに書き込むExpress VIを使用した場合は100点、それ以外は1000点のデータを保存する速度を比較しているのですが、Express VIは圧倒的に時間がかかります。よって高速に回したいループ内で保存する目的では、Express VIの使用はお勧めできません。

 

データ収集しながらデータ保存する場合は、ループ前にファイルを開く処理、ループ後にファイルを閉じる処理を行うストリーミング保存の手法をお勧めします。

 

0 件の賞賛
メッセージ4/12
3,326件の閲覧回数

ご返信ありがとうございます。

現在、DAQで試しましたが、いくつかの問題があります。

1.DAQアシスタント3(アナログ信号入力)のサンプルレート1000、サンプリング数100にすると非常に遅くなりやすい傾向にある⇒サンプリング数1000にすると比較的速く処理されやすいですが、加速度信号(アナログ信号入力)から電気刺激信号(アナログ信号出力)までdelayがあります。

2.DAQデバイスアシスタント2(アナログ信号出力)を連続サンプルにすると非常に遅くなりやすい

3.loopレートが非常に小さい⇒これはloop回転数が遅いことを示す?

4.計測ファイル書き込むExpress VIを扱わないと、以前エクセル書き込めない状態となった為、こちらを使用している状況です。

 

色々試行錯誤していますが、なかなか問題解決できていない状況です。

すべてをダウンロード
0 件の賞賛
メッセージ5/12
3,277件の閲覧回数

遅延があるということは、ループが回る際に何かしらの処理時間がかかっているのではないかと思います。

 

計測ファイル書き込むExpress VIは、前回もご説明しましたが、処理時間が長いためお勧めできません。使用する目的がExcelでファイルを開けるようにするためでしたら、カンマ区切りのCSVファイルをお勧めします。

 

アナログ出力を連続サンプルにすると非常に遅くなるとのことですが、アップデートするレートやサンプル数の調整はおこなっていますか?同じ環境ではありませんが、添付ファイルのように調整すればループは以前より速く回るように思います。

 

 

 

0 件の賞賛
メッセージ6/12
3,262件の閲覧回数

すみません。知識不足で申し訳ありませんが、アップデートするレートやサンプル数の件に関しては、どのように調整すればいいのか理解できていません。添付ファイルにあるネームバンドルで調整されているということでしょうか?

あと、ケースストラクチャにおける設定電圧の部分を変更してみました。比較関数を用いて、false・trueを選択できるようにし、設定電圧5v流れた際に電気刺激が流れるプログラムで組んでみました(添付ファイル)。計測ファイル書き込むExpress VIは、excelで出力したかったことが意図にあります。

 

0 件の賞賛
メッセージ7/12
3,235件の閲覧回数

アナログ出力を行うDAQアシスタントExpress VIをダブルクリックして構成を確認したところ、波形のタイミングを使用チェックボックスにチェックがはいっていたため、方形波形関数のサンプリング情報を基に生成しておりました。そのため、その入力端子にアナログ入力と同じレートとサンプル数にしてみました。

 

ファイルI/Oですが、どうしても.xlsx形式が必要でしたら、.csv形式を一時ファイルとしてストリーミング保存し、ループ停止後にファイルからデータを一括読み取りして、そのデータを計測ファイル書き込みExpress VIで一括書き込みすれば、ループ内での処理時間が大幅に削減できるかと思います。

0 件の賞賛
メッセージ8/12
3,227件の閲覧回数

平素より大変お世話になっております。

実験室にしばらく行けなかった為、試すことができませんでした。本日、使用してみたところ、添付ファイルのような表示となってしまいます。

0 件の賞賛
メッセージ9/12
3,194件の閲覧回数

エラー-200279に関しては、下記のページをご参照ください。

 

0 件の賞賛
メッセージ10/12
3,189件の閲覧回数