NIスキャンエンジンの使い方・リアルタイムI/O実装ガイド
LabVIEW Real-Timeシステムにおいて、FPGAプログラミングを行うことなくハードウェアI/Oへ迅速かつ決定論的にアクセスできる機能、それがNIスキャンエンジン(NI Scan Engine)です。
CompactRIOなどのシャーシに搭載されたCシリーズモジュールのデータを、ドラッグ&ドロップの手軽さでリアルタイムループ内に取り込むことができます。本ページでは、測定代行株式会社の開発実績をもとに、基本的な使い方と安定運用のための設定ステップを解説します。
1. NIスキャンエンジンを採用する3つのメリット
FPGAモードでの開発と比較した場合、スキャンエンジンには開発効率を劇的に高める特徴があります。
① FPGAのコンパイルが不要(即座にテスト可能)
通常、FPGAのコードを変更すると数十分から数時間のコンパイル待ちが発生しますが、スキャンエンジンモードであれば、プログラムの変更後すぐに実行して実機検証が行えます。
② 単一周期の決定論的タイミング
スキャンエンジンは内部で単一のタイマー(スキャンクロック)に同期してすべてのI/Oデータを一括で更新します。これにより、リアルタイムOS上での高度な同期制御や制御ループの構築が容易になります。
③ ネットワーク公開変数(Network-Published Variables)との親和性
取得したI/O変数をそのままネットワーク変数として公開できるため、タッチパネル(HMI)や遠隔のPC(ホストPC)とのデータ通信回路を最小限の手間で実装可能です。
2. 実装・設定の5ステップ
NIスキャンエンジンを正しく動作させるための、標準的な開発手順です。
-
プロジェクトへのハードウェア追加とモード選択
LabVIEWプロジェクトにCompactRIOなどのリアルタイムターゲットを追加します。シャーシのプロパティを開き、インテグレーションモードで「スキャンインターフェース(Scan Interface)」を選択します。これで各スロットのCシリーズモジュールが自動認識され、I/O変数が生成されます。
-
スキャン周期(スキャンレート)の設定
リアルタイムターゲットのプロパティから「スキャンエンジン」の設定を開き、スキャン周期(例:1ms = 1kHz)を指定します。この周期で全モジュールの入力データが読み込まれ、出力データが書き込まれます。
-
ブロックダイアグラムへのI/O変数配置
プロジェクトツリーに表示されている各モジュールのチャンネル(AI0、DO0など)を、そのままVIのブロックダイアグラムにドラッグ&ドロップします。これでデータの読み書きを行うインジケータ/制御器が作成されます。
-
時間設定ループ(Timed Loop)との同期
スキャンエンジンのタイミングと完全に同期した制御ループを作るため、ブロックダイアグラムに「時間設定ループ(Timed Loop)」を配置します。ループのタイミングソースとして「Synchronize to Scan Engine(スキャンエンジンに同期)」を選択します。
-
エラークラスタによる例外処理
I/O変数にはそれぞれエラー端子が含まれています。モジュールの切断や通信エラーを検知できるよう、各変数からエラークラスタを配線し、システムの緊急停止やログ記録を行う例外処理回路を必ず実装します。
3. 安定運用のための注意点と限界
- サンプリングレートの限界: NIスキャンエンジンの推奨スキャンレートは通常最高で1kHz~2kHz程度です。それ以上の超高速サンプリング(数十kHz以上)や、キロヘルツ帯での厳密な波形集録・高精度なPWM制御が必要な場合は、スキャンエンジンではなく「FPGAインターフェースモード」を選択する必要があります。
- CPU負荷(ジッタ)の管理: ループ内の処理(計算やファイル保存など)が重く、設定したスキャン周期を超えてしまうと、「スキャン見逃し(Missed Scan)」が発生し、リアルタイム性が損なわれます。重い処理は通常の並列ループへ移管するアーキテクチャが必須です。
リアルタイム制御・CompactRIOシステム開発は測定代行株式会社へ
「 cRIOを導入したいが、スキャンエンジンとFPGAモードのどちらで組むべきか迷っている」「スキャンエンジンを使ってリアルタイム制御を組んだが、ジッタが大きくて安定しない」といったお悩みはありませんか?
測定代行株式会社は、長年のLabVIEWシステム開発で培った知見を活かし、リアルタイムOSの最適化からハードウェアの選定、確実な同期システムの構築までをサポートいたします。実験装置の自動化や計測ベンチの構築など、LabVIEWに関することは何でもお気軽にご相談ください。