待機(ms)関数と次のミリ秒倍数まで待機関数の違い

更新しました Nov 17, 2018

使用製品

Software

  • LabVIEW

問題

待機(ms)と次のミリ秒倍数まで待機関数を聞いたことがありますが、両方とも同じ動作のようにみえます。LabVIEWで待機(ms)と次のミリ秒倍数まで待機関数の違いは何ですか?

解決策

どちらの関数も、通常はループの実行速度を制御するために、指定された時間実行をブロックするために使用されます。違いは、待機(ms)関数はミリ秒単位で指定された時間が経過するまでブロックするだけに対して、次のミリ秒倍数まで待機関数は、システムのミリ秒クロックの現在値がミリ秒倍数で指定された値で均等に割り切れるまでブロックします。

下図は、両方の関数がそれぞれの入力として100として50ミリ秒で実行を開始した場合、実行がブロック解除されるタイミングを示しています。横軸は、システムのミリ秒クロックの値です。

次のコード例を使用して、実行の違いを確認することもできます。

待機(ms):
待機(ms)関数は、待機するミリ秒で指定された時間が経過するまで実行をブロックします。
  • 例1: 実行に5ミリ秒かかるコードを持つループを考えてみましょう。このループには、入力を待機するためにミリ秒に配線された10ミリ秒の待機(ms)関数も含まれています。Whileループは、5ミリ秒後にコードが終了してから5ミリ秒後に待機(ms)関数が終了するため、実行に合計10ミリ秒かかります。この場合、待機(ms)関数はコードと並行して実行されます。

 

この例では、ループタイミングは外部の待機(ms)関数によって設定されます。

 

 
  • 例2: ループは前の例と同じですが、コードの実行に15ミリ秒かかっています。外側の待機(ms)関数には、依然として10ミリ秒がミリ秒待機時間端子に配線され、入力を待機します。待機(ms)関数に配線された時間は、コードの実行に要する時間よりも短いため、コード終了後に遅延はなく、15ミリ秒経過するとすぐに次の繰り返しに移動します。

この例では、ループタイミングは待機(ms)関数で設定されていません。これは、ループ内のコードの全体的な実行時間によって設定されます。




次のミリ秒倍数まで待機:
次のミリ秒倍数まで待機関数を使用すると、別々のループをシステムのミリ秒クロックに同期させることができます。名前が示すように、ブロック解除される前に、ミリ秒単位の複数入力で指定されたミリ秒数の次の倍数まで待機します。
  • 例3: 実行するのに100ミリ秒かかるコードと、コードと並行して実行される次のミリ秒倍数まで待機関数があるループがあります。次のミリ秒倍数まで待機関数には、ミリ秒倍数入力に200ミリ秒の定数が配線されています。このループは、システムのミリ秒クロックの200ミリ秒ごとに実行されます。同じVIに2番目のループがあり、同様に200ミリ秒の定数が配線されています。2番目のループのコードは、並列実行に150ミリ秒かかります。2つのループは、システムクロックの200ミリ秒倍数が経過するたびに次の繰り返しに移動するように同期されます。この方法を使用すると、各ループが後続の反復を同時に開始することが保証されます。

追加情報

ループ内で次のミリ秒倍数まで待機関数を使用する場合、最初の反復遅延はミリ秒倍数入力に指定された時間と同じではないことに注意してください。 これは、次のミリ秒倍数まで待機関数がシステムのミリ秒クロックの現在値がミリ秒倍数入力で指定した値で均等に割り切れるまで待機するためです。したがって、初めて実行すると待機する時間は、システムのミリ秒クロックの絶対時間に依存します。それ以降の反復はすべてこの時間に合わせられ、ミリ秒単位で指定した適切な時間だけ待機します。

待機(ms)関数と同様に、ミリ秒倍数で指定された時間よりも長くかかるコードが並列に実行されている場合、ループ速度に影響を与えないことを留意してください。この場合では、コードの実行が終了した後で次のループが開始されます。

待機(ms)関数と次のミリ秒倍数まで待機関数の相違点の詳細については、次のLabVIEWヘルプ記事を参照してください。

この記事はお役に立ちましたか?

いいえ