06-05-2024 02:56 AM
LabVIEW初学者で分からない事が多く現在ぶつかっている壁の突破方法について教えてください。
DAQ Assistantで計測してWrite to Measurement FileでAppendでバンバン落とし込むだけのプログラムなんですがDAQ AssistantをN samplesモードで動かす分にはerror outを毎回出してくれるのでうまく回るので良いのですが、現在のタスクとしては高速でデータを表示もしないとならないのでグラフ表示をしたいのでDAQ AssistantをContinuous Samplesモードで動かしたいのですが当然error outが出ないのでWrite to Measurement Fileのタイミングが合わずエラーが出て止まってしまいます。
どのような方法で回避して行けば良いでしょうか?
06-05-2024 09:38 PM
収録条件などを知りたいので、VIを添付してください。
06-05-2024 09:41 PM
ありがとうございます。
こちらになります。
06-06-2024 04:12 AM
システムの性能を把握するために、添付のVIを実行してみてください。WindowsのLabVIEW2024で作ってあります。
・「有効なサンプル数/ch」表示器はバッファ内に溜まっているチャンネルあたりのデータポイント数です。実行中にこれが増えていくようだとそのうちバッファがあふれてエラーになります。
・「一度に読み取るサンプル数」はWhileループ一回で処理されるサンプル数です。これが1000でサンプリングレートが50000ならば、1秒間に50回処理が実行される計算です。1回あたり20ミリ秒ですね。
・「チャートを更新」のON/OFFでグラフの更新を制御できます。グラフの更新は重い処理なので、これが影響しているかどうか確認できます。
1) デフォルトのまま実行すると、すぐにエラーで止まると思います。
2)「チャートを更新?」をOFFにして実行します。だいぶ軽くはなると思いますが、エラーで止まるとすれば、1000ポイント×16チャンネル×8バイトのテキスト保存を20ミリ秒で回すこと自体が間に合っていないことになります。
3)「一度に読み取るサンプル数」を5000くらいにして実行します。まだダメなら10000とかに増やすとどうでしょうか?
4)「チャートを更新」をONに戻します。初めはいいかもしれませんがそのうちグラフの更新が遅くなってついには止まると思います。チャートの履歴数はデフォルトで1024です。スカラや配列ならいいのですが、波形データタイプ(ダイナミックデータもそう)を与えると数1000ポイントの波形を1024個つなげて表示しようとします。これは激重です。
5) チャートグラフ上でポップアップして「チャート履歴の長さ...」を選び、これを少なくして(10くらい?)実行します。チャートに表示される時間幅は希望を満足しますか?
うまく連続実行が続く組み合わせを探してください。
ちなみに、(2)のところでテキスト保存をバイナリやTDMSにすると改善されるかもしれません。ただし後で読み込むときの処理が少し面倒です。
テキストファイルの場合サイズが巨大になるとやはり後で困るので、適度に分割することをお勧めします。
06-06-2024 04:41 AM
とても勉強になるコメントを頂き大変感謝しております。
頂いたアドバイスを元に調整を行ってみます。
そもそもDAQで計測しつつチャートに表示をし続ける部分に無理が有るというのが根本原因になるのでしょうか?
同時にファイル操作を行わせることでアンマッチが現れると言うよりもチャート操作が重すぎる事が問題と理解したのですがその場合は解決方法が無い感じになりますでしょうか?
06-06-2024 05:42 AM
解決方法はありますが、何かとトレードオフになる場合もあります。
データをグラフに表示しながらファイルに保存するのはよくある使い方です。ほとんどの計測プログラムは、データの計測、処理、表示、保存を行います。
単位時間あたりに扱うデータ量が少ない場合はどんなコードでも問題は生じませんが、動作が重くなる(サンプリングレートが高い、チャンネル数が多い、データ処理が複雑、表示の更新頻度が高いなど)とコードの良し悪しが表面化します。
LabVIEWはかなりの部分を自動的に対処してくれます。たとえば全体の処理が間に合わなくなると、表示の更新を間引いてもデータの欠損が生じないように働きます。それにも限界があるのでプログラマのスキルが重要になってきます。
LabVIEWには様々なタイプのグラフがあります。それぞれ機能が違い、用途に合わせて選びますが、今回チャートを使ったのは何か意図があってのことでしょうか?
チャートはスカラデータの履歴をチャート表示するのが主な用途です。履歴の長さに応じたリングバッファを自動的に確保して処理してくれます。
波形データタイプを表示することもできますが前の投稿で説明した通りの注意点があり、履歴数を減らすことでバッファ処理を軽減したのです。
波形グラフはリングバッファなどを使わないので波形チャートより動作は軽いですが、一度に表示する時間幅は一度に渡すデータポイント数によって決まり、チャートのような履歴は見られません。
こいったことを取捨選択しながら目標とする機能・性能とユーザインタフェースを決めていきます。