LabVIEWの特徴について5(rendezvous)

今回はrendezvousについて記載してみようと思います。rendezvousとは「いくつかの独立して動作する並列処理において、タイミングを合わせた処理(同期処理)」を行う際に用いることができます。簡単にいうと、長縄跳びをするときの飛子のように決まった人数が揃ったら同時にジャンプするようなイメージです(長縄跳びの例:3個の同期処理を行うために縄を待っている)。

LabVIEWのrendezvousでは以下のようなviが用意されています。createでジャンプする人数の指定をしつつ確保したあと、それぞれの場所でwaitすると指定人数が揃ったタイミグでwait viが実行される(抜ける)ように機能します。

上図のブロックダイアグラムでは、同期ループ1側はタイムアウト付きで常にrendezvousをwait(待ちの1個目)、同期ループ0側のイベント(Fire!ボタンの押下)で2個目のwaitを実行することで両方のループにあるwait関数が同時に実行される(wait関数から抜ける)ようになります。この処理はWindowsで実行しているため、コア数、CPU負荷などに依存する場合があるのでusオーダーの同期は行うことは出来ませんが、使い方(CPUコアの割り当て)次第では1~5ms程度の同期は実現できると思いますのでお試しください。以前私は2台のGIGEカメラからIMAQdx Aquisiotionを用いてカメラの同期撮影を行ったことがありますが、1ms程度の同期精度で動くことを確認しています。

# 上のサンプルでは厳密にrendezvousしてはいない点(timeoutを用いている)には御注意ください