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