NI製品ディスカッション

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

LabVIEWタイミングループの遅延について

解決済み
解決策を見る

いつもお世話になっております。

 

LabVIEW2014のタイミングストラクチャの遅延(タイミングがずれる)についての質問です。

Whileループとタイミングループの組み合わせのプログラムを作っています。

Whileループの中身はイベントストラクチャで、タイミングループの中身はGPIB(通信にかかっている時間は200ms前後)での測定と、測定データによるユーザイベント生成となっています。

 

タイミングは500msで回る設定(添付図:タイミング.png)にしているのですが、開始して10分を超えたあたりから時折タイミングが乱れます。

データイベントではチャート(3データ×6組×8000バッファ)の更新、データのログなどを行っています。

ローカル変数を多用していますが、取り込んだデータを明示的にメモリに蓄積するようなことはしていません。

チャート更新をコメントアウトしても現象は変わりませんでした。

 

タイミングを使用しないとGPIBの通信時間+@(数ミリ秒)で回ることがわかっています。

0.5秒のタイミングでデータが欲しいのですが、どのようにするべきかご教示いただければと思います。

 

0 件の賞賛
メッセージ1/4
4,204件の閲覧回数
解決策
トピック作成者sanmaiが受理

sanmai様

 

「次のミリ秒倍数まで待機」(プログラミング→タイミングの中にあります)Whileループでタイミングをとることができます。
計測処理(GPIB通信~ユーザイベント生成)の最後に「次のミリ秒倍数まで待機」に500を入れて実行させる。
計測処理時間が500m未満であれば、Whileループが500m周期で実行されるはずです。

 

(文章だけだと・・)処理を把握出来てない部分よくわからないこともありますが
計測処理時間が必ず最大で200m程度、タイミングループは500mで回らないのはおかしい気がします。
なにかあるような?

0 件の賞賛
メッセージ2/4
4,163件の閲覧回数
解決策
トピック作成者sanmaiが受理

今回のアプリケーションは、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負荷が大きくなるなどの可能性があります。

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

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

su-sann5073さま

Emboarさま

 

代表してsu-sann5073さまへの返信とさせていただきます。

アドバイスありがとうございます。

GPIB通信をWhileループにして、取り込んだデータをノーティフィケーション送信、

タイミングループでノーティファイアステータスとして参照し、ユーザーイベント発生させるようにしたら

遅延が無くなりました。

 

また皆様のアドバイスを参考にタイミングの使用をやめ、While+メトロノームで回すようにしました。

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

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