From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

NI製品ディスカッション

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

プログラムがたまに止まる現象について

Whileループにシフトレジスタを設定し、この出力をWhileループ内に設定したケースストラクチャのセレクタ端子に接続し実行するケースを操作しています。

フロントパネルには プログラム実行中にどのケースを実行しているか判るように シフトレジスタからセレクタ端子に出力される値(数字)を表示しています。

Whileループには100msecのタイマーを設定しています。

通常は1秒に数回 出力される値(数字)が変化しますが たまに停止する時があります。 これはPCに何らかの割り込みが入る為でしょうか。

または、プログラムの作成に問題があるからでしょうか。

 

停止する時間は数秒(長い時で10秒近く)  また、停止する場所や間隔は決まっていないようです。

同時に実行させているviは10個程度ありdatasocketでデータのやり取りをしています。

尚、datasocketの読み取りで「値の更新を待機」は"F"にしています。

 

使用環境は下記の通りです。

PCは市販のディスクトップ

OSはWindows7  Professional 32bit

LabVIEWバージョン  2012

NI USB-6509を使用しています。

RS232Cで外部機器の制御をしています。

 

宜しく御願い致します。

 

以上

0 件の賞賛
メッセージ1/5
6,309件の閲覧回数

同時に実行している10個のVI はどういった処理をしているのでしょうか。

 

VI を見てないので詳しくは言えませんが、実行している処理にたいして

対応できるリソースが足りていないため、今回のWhileループの処理が不安定になっている気がします。

 

最近のパソコンはCPUのコアが4つ以上あるので、並列処理ができる処理も4つになりますが、

もしCPUのコアを4つ全て瞬時的にでも使用していたら、残りの6つの処理は待機状態になってしまいます。

勝手な予想ですが、10個の処理が同時に実行する必要がある可能性は少ないと思うので、

10個のVI を処理や優先順序に応じて順番付けしてみてはいかがでしょうか。

 

たとえば、最初の4つの処理が終了しない限り残りの処理が実行させない、

10個のVI それぞれの待機時間を少し多めに設定して他のVI が実行できる猶予を与える、

もしくは10個のVI を同時に実行していた時にそれぞれのVI 内の反復を順番に一回ずつ行うといった方法があるかと。

 

 

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

御教示有難うございました。

各viの実行が重ならない様 見直しをしてみます。

 

以上

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

LabVIEWの機能にプロファイルウィンドウというものがあります。ツール→パフォーマンスとメモリ

 

この機能を使えば、各VIの実行時間を一度に確認できます。時間がかかっているVIを特定できるかもしれません。

「開始」ボタンを押すとVIの監視を始めます。その後、VIを実行して、スナップショットボタンを押すと各実行済みVIの情報が確認できます。

TailOfGon
Certified LabVIEW Architect 2013
メッセージ4/5
6,213件の閲覧回数

御教示有難うございます。

御教え頂きまし方法で各viの実行スピードを

確認してみます。

以上

0 件の賞賛
メッセージ5/5
6,188件の閲覧回数