03-20-2018 03:46 AM
いつもお世話になっております。
LabVIEW2014のタイミングストラクチャの遅延(タイミングがずれる)についての質問です。
Whileループとタイミングループの組み合わせのプログラムを作っています。
Whileループの中身はイベントストラクチャで、タイミングループの中身はGPIB(通信にかかっている時間は200ms前後)での測定と、測定データによるユーザイベント生成となっています。
タイミングは500msで回る設定(添付図:タイミング.png)にしているのですが、開始して10分を超えたあたりから時折タイミングが乱れます。
データイベントではチャート(3データ×6組×8000バッファ)の更新、データのログなどを行っています。
ローカル変数を多用していますが、取り込んだデータを明示的にメモリに蓄積するようなことはしていません。
チャート更新をコメントアウトしても現象は変わりませんでした。
タイミングを使用しないとGPIBの通信時間+@(数ミリ秒)で回ることがわかっています。
0.5秒のタイミングでデータが欲しいのですが、どのようにするべきかご教示いただければと思います。
解決済! 解決策の投稿を見る。
03-21-2018 08:56 PM
sanmai様
「次のミリ秒倍数まで待機」(プログラミング→タイミングの中にあります)Whileループでタイミングをとることができます。
計測処理(GPIB通信~ユーザイベント生成)の最後に「次のミリ秒倍数まで待機」に500を入れて実行させる。
計測処理時間が500m秒未満であれば、Whileループが500m秒周期で実行されるはずです。
(文章だけだと・・)処理を把握出来てない部分よくわからないこともありますが
計測処理時間が必ず最大で200m秒程度、タイミングループは500m秒で回らないのはおかしい気がします。
なにかあるような?
03-22-2018 03:22 AM
今回のアプリケーションは、Windows OS上で動かすものでしょうか?
su-sann0573さんの意見に賛成で、Timed loopよりWhile loopを使ったほうが良いかと思います。
「正確なループレートを実現したい」ためだけに、WindowsでTimed loopを使うことはほとんど意味がありません。それどころかTimed loopはWhile loopに比べてオーバーヘッドがあるなど、使用に慎重になる必要があります。
LabVIEW Timed Loop Slower than While Loop
もしRTアプリの開発という場合は、Timed loopの中にGPIB通信のようなタイミングが非確定的な処理を入れてはいけません。CPU負荷が大きくなるなどの可能性があります。
03-22-2018 06:41 AM
su-sann5073さま
Emboarさま
代表してsu-sann5073さまへの返信とさせていただきます。
アドバイスありがとうございます。
GPIB通信をWhileループにして、取り込んだデータをノーティフィケーション送信、
タイミングループでノーティファイアステータスとして参照し、ユーザーイベント発生させるようにしたら
遅延が無くなりました。
また皆様のアドバイスを参考にタイミングの使用をやめ、While+メトロノームで回すようにしました。
ありがとうございました。