CPU負荷を最小限に抑え、処理のタイミングを完全に同期させるプログラム設計
LabVIEWで「データ収集ループ」と「データ解析・画面描画ループ」など、複数の処理を並列で実行させる際、ループ間で『特定のイベントが今発生した』というタイミングを伝える必要があります。
このとき、ローカル変数やグローバル変数をWhileループ内でひたすら読み込んでチェックする構造(ポーリング)にすると、CPU使用率が100%に張り付き、システム全体のパフォーマンスが著しく低下します。これを極めてエレガントかつ低負荷で解決するのが**「ノーティファイア(Notifier)」関数**です。
ノーティファイアはいわば**「電子掲示板」や「ブロードキャスト(一斉放送)」**です。通知を受け取る側のループは、「通知が来るまで何もせず眠った状態(待機)」になり、通知を出す側がメッセージを書き込んだ瞬間に、一斉に目を覚まして処理を再開します。これにより、不要なCPU負荷をゼロに抑えることができます。
よく混同される「キュー」との最大の違いは、データの保持機能と通知対象の数です。キューはデータを「歴史(履歴)」として溜め込み、1つのデータは1つのタスクしか受け取れません。一方、ノーティファイアは常に「最新データのみ」を上書き保持し、複数のループに対して同時に一斉通知(ブロードキャスト)することが可能です。
| 項目 | ノーティファイア(Notifier) | キュー(Queue) |
|---|---|---|
| 主な目的 | タイミングの同期・最新状態の一斉通知 | データの受け渡し・バッファリング(履歴の保護) |
| 受信者の数 | 複数(一斉通知・ブロードキャストが可能) | 単一(1つのデータは1つのループしか取得できない) |
| データの挙動 | 新しい通知があると古いデータは消える(最新値のみ) | 読み取られるまでデータは順番に蓄積される(FIFO) |
LabVIEWのパレット「プログラミング > 同期 > ノーティファイア」に配置されている主要関数を用いて、以下の流れで設計します。
「ノーティファイア作成」関数を使用します。このとき、通知として送りたいデータの型(ボリオン、数値、文字列、クラスタなど)を入力端子に接続して定義します。
何かイベントが発生したタイミング(例: 計測が完了した、エラーが起きた、停止ボタンが押された)で、「通知を送信」関数を呼び出します。引数に定義したデータを載せて送ることで、受信側に状態を渡せます。
別スレッドで走るWhileループ内に「通知を待機」関数を配置します。通知が届くまでは、この関数部分でスレッドの実行が一時停止し、CPUリソースを一切消費しません。通知が送信されると即座にミリ秒単位の応答性で復帰し、後続の処理を行います。
アプリケーションの終了時に「ノーティファイア解放」関数を実行して、メモリリソースを適切にクリーンアップします。
「プログラムを作ってみたが、ループの同期がうまくいかずタイミングがズレる」「複数のループ間でデータを安全にやり取りしたいが、キュー、ノーティファイア、セマフォのどれを選ぶべきか分からない」といった技術的な課題でお困りではありませんか?
測定代行株式会社は、元・横河電機のR&D部門で光ファイバ strain 計測などの最先端機器開発に携わってきた技術者が率いる、LabVIEW受託開発・システム構築のプロ集団です。単に動くだけのプログラムではなく、CPU負荷が低く、将来の拡張やメンテナンスが容易に行える「美しいアーキテクチャ」でのVI作成を提供します。
仕様書や設計図がない研究開発初期フェーズからの具現化、既存システムのバグ修正や最適化など、経験豊富なエンジニアが直接ヒアリングを行い、最適な計測制御システムを構築いたします。
お電話での受付:平日 9:00~18:00
048-291-8807
LabVIEW開発・自動化について無料相談する