NI製品ディスカッション

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

NI-Daqを用いたリアルタイム描画について

開発言語C++でオシロスコープの様なアプリを開発中です。

先ず、NI-Daqmxより複数チャンネルのアナログデータを取得してメモリマップドファイルに書き込み

溜まったデータを別スレッドで随時描画していくアプリを開発しています。

USBからのデータ取得なので若干の遅延があるのはしょうが無いと思うのですが

何とか描画されているのですが、スペックの問題なのか、別の端末で同アプリを動かすと明らかに描画速度が遅くなってしまいました。

(描きはじめは0.5秒ほど遅延しても良いけどその後は、1秒の幅をほぼ1秒で描画させたい)

 

ここで質問する内容と少しずれていると思いますが

いろいろと解決方法を探したのですが見つからず大変困っています。

端末のスペックに左右されないで描画する方法は何かありませんでしょうか?

 

ご助力をお願い致します。

0 件の賞賛
メッセージ1/7
2,610件の閲覧回数

C++NI-DAQmxのプログラムを作成する際に、サンプルプログラムがご参考になるかと思いますが、こちらはもう見てみられましたか?

テキストベースのプログラミング環境でNI-DAQmxを使用する

0 件の賞賛
メッセージ2/7
2,544件の閲覧回数

Tanabe様

 

ご確認ありがとうございます。

はい。サンプルプログラムは一通り確認しました。

データの取得はC-ANSIサンプルを複数チャンネルに変更して使用しています。

 

このデータを用いた描画方法について何か参考になる方法があれば教えて頂けないかと思い投稿いたしました。

DAQのタスクの中で取得したデータをメモリに随時追記していき

別タスクで溜まっているデータを随時ループして描画しているのですが

描画の速度がループ処理時間に左右されてしまい、端末のスペックによっては

もの凄く遅かったり早かったりしてしまうので一定にできないものかと模索しています。

 

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

端末のスペックによってループの繰り返し速度が一定ではないことが問題であるとの事で、例えばLabVIEWでは、「待機(ms)」関数という関数が用意されており、ソフトウェアタイミングでのループの繰り返し速度を制御することができます。「1秒の幅をほぼ1秒で描画させたい」と最初にお書きになっていらっしゃいましたが、ループに「待機(ms)」関数を置き、1000msを設定することで、PCのスペックに関わらず一秒に一回ループが繰り返される動きになります。

 

C++でプログラムをご構築中との事ですが、恐らくC++でもループの繰り返し速度を制御するような関数が用意されていると思いますので、そちらをご使用になられて繰り返し速度を一定にされていはいかがでしょうか。

 

0 件の賞賛
メッセージ4/7
2,520件の閲覧回数

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

 

待機関数=usleepみたいなものでしょうか?

処理開始からループ処理中の経過時間を測定して、処理が早すぎたら残りのデータ量から計算して待機させて1秒に調整するというやり方でしょうか?

ただ、それだとスペックが低いと遅くなってしまうので、できれば避けたいと考えております。

 

計算処理等いろいろ入れると逆に遅くなってしまうので何かいい方法が無いか未だに模索しています。

色々調べた結果私の考えていた方法(処理タイミングではなくて、処理の実行速度を調整する)では無理そうなので

別案できれいなリアルタイム描画をする方法を検討しています。

現実案では、一回に描画するデータ量を少なくして待機描画させてみようと考えています。

サンプル数を増やして0.1秒とか0.05秒以下のデータ分ずつで描画&反映処理をすれば、カクツキも気にならないかなぁ?っと。

0 件の賞賛
メッセージ5/7
2,509件の閲覧回数

LabVIEWの待機関数では、お書きになられました通り、「処理が早すぎたら残りのデータ量から計算して待機させて1秒に調整するというやり方」になります。PCのスペックが低くて1秒に間に合わなかった場合には、遅延が発生するかエラーが出ると思います。

1秒間のループの繰り返しが可能なスペックを持ったPCを用意するのが一番良いと思いますが、難しい場合には「現実案では、一回に描画するデータ量を少なくして待機描画」での対処となるかと思います。

 

 

0 件の賞賛
メッセージ6/7
2,502件の閲覧回数

I.Tanabe 様

 

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

やはり、その方法が一番現実的ですよね。

低スペック向けで作成して、処理が早いなら待機させてあげる方向で考えてみます。

 

ありがとうございました。

 
0 件の賞賛
メッセージ7/7
2,497件の閲覧回数