データサンプリングの同時開始や、複数機器の初期化タイミング同期に最適
LabVIEWの強力な並列処理(マルチスレッド)環境において、「複数の独立したループの処理タイミングを、ある特定のポイントでピタッと一致させたい」という場面が多々あります。
例えば、3つの異なる測定器の初期化がすべて終わってから一斉に同時計測をスタートさせたい場合などです。各ループの処理速度が異なるため、単純に走らせると開始タイミングがズレてしまいます。これを最もスマートに解決する同期関数が**「ランデブー(Rendezvous)」**です。
ランデブーはその名の通り、並列タスク間における**「集合場所(待ち合わせスポット)」**です。「待ち合わせるタスクの個数(例: 3個)」をあらかじめ指定して作成します。集合場所に早く到着したループは、設定数に達するまでその場で自動的に待機(スリープ)し、最後のタスクが到着した瞬間に、すべてのループが一斉に再始動します。
・複数チャンネル、複数測定器の「同時計測開始」
・複数ステージや軸の「原点復帰・初期化完了」の同期
・並列計算処理において、全タスクのデータ処理結果が出揃ってから次のステージ(ステップ)へ進むフェーズ管理
LabVIEWの関数パレット「プログラミング > 同期 > ランデブー」に用意されているVIを使用し、以下の手順でプログラムを構成します。
「ランデブー作成」VIをプログラムの初期化処理(ループの外側)に配置します。このとき、最も重要なのが**「個数」端子に待ち合わせる正確なタスク数(ループ数)を入力すること**です。例えば、3つの並列ループを同期させたいなら3と入力します。
同期させたいそれぞれのWhileループ(または並列パス)の内部に、「ランデブーを待機」VIを配置します。 各ループがそれぞれの処理(例: 初期化や1サイクル分のデータ収集)を終えてこのVIに到達すると、設定された個数が揃うまで処理が一時停止します。
最後のタスクが「ランデブーを待機」VIに到達した瞬間にロックが解除され、すべてのタスクが同時に次のブロックの処理(例: 一斉データサンプリング)へ進みます。
アプリケーションの終了時に、全体の処理の外側で「ランデブー破棄」VIを実行し、割り当てられていたメモリリソースを解放します。
「複数の測定器やモーターステージを高精度に同期させて動かしたい」「並列ループを作ったがタイミングの制御が難しく、データがズレてしまう」「他社に外注したLabVIEWプログラムがたまにフリーズするので原因を突き止めてほしい」といったお悩みは、すべて測定代行株式会社にお任せください。
弊社は、元・横河電機のR&D出身エンジニアが代表を務めるLabVIEW受託開発のプロフェッショナル企業です。ランデブー、セマフォ、キュー、通知器、イベント構造などの同期関数を適材適所で組み合わせ、CPU負荷が極限まで低く、ミリ秒単位で正確に連動する安定した計測制御システムを具現化します。
明確な仕様書や設計図がない研究初期段階からのシステム構築や、既存VIの不具合改修など、どんなことでもお気軽にご相談ください。実務経験豊富なエンジニアが直接お話を伺い、課題をクリアにするシステムをご提案します。
お電話での受付:平日 9:00~18:00
048-291-8807
LabVIEW開発・自動化について無料相談する