このドキュメントは、ドライバ開発者を対象に、LabVIEWプラグアンドプレイ計測器ドライバの規格および操作方法について記載し、VI構造、計測器I/O、スタイル、エラーレポートの基準について説明しています。また、計測器ドライバのコンポーネントおよびこれらの統合方法についても記載しています。さらに、このドキュメントでは、計測器ドライバの開発プロセスについても説明しています。
計測器ドライバ開発者が使用できるリソースには、計測器ドライバテンプレートおよび「計測器ドライバガイドライン」があり、両方ともNIの計測器ドライバネットワーク (ni.com/idnet) からご利用いただけます。
このドキュメントを利用するにあたり、計測器制御の基礎について理解があり、LabVIEWの操作に精通していることが前提条件となります。また、Virtual Instrument Software Architecture (VISA) のアプリケーションプログラミングインタフェース (API) についてもよく理解していることが必要です。
LabVIEWプラグアンドプレイ計測器ドライバとは、プログラム可能な計測器を制御するVIをセットにしたものです。各VIは、それぞれ構成、トリガ、測定読み取りなど計測器の操作に対応しています。計測器ドライバを使用することで、ユーザはコンピュータから計測器を簡単に使用することができ、各計測器に対するプログラミングプロトコルを学習する必要性がないため、開発時間を短縮してコストも削減することができます。きちんと文書化された、オープンソースの計測器ドライバがあれば、エンドユーザが操作をカスタマイズして性能を向上できます。モジュール式設計であるため、カスタマイズが容易に行えます。
LabVIEW計測器ドライバの標準アーキテクチャを使用すると、以下のような利点があります。
LabVIEW計測器ドライバネットワークには、GPIB、USB、TCP/IP、VXI、RS-232、PXI計測器などのさまざまなプログラミング可能な計測器用の計測器ドライバが含まれています。計測器ドライバは、直感的に扱えるフロントパネルがある高レベルVIを含むため、エンドユーザは計測器のリモート機能を迅速にテストおよび検証することができます。そして、低レベル計測器制御や計測器特有のコマンドおよび構文などを学ぶ必要はありません。ブロック図にサブVIを配置するように計測器ドライバVIを使用し構築することで、計測器制御アプリケーションを作成することができます。
プログラム可能な計測器の多くには、多数の関数とモードがあります。この複雑性を克服するためには、計測器制御アプリケーションを開発するエンドユーザとドライバ開発者の両者に有用な一貫した設計モデルを提供する必要があります。「LabVIEWプラグアンドプレイ計測器ドライバのモデル」には、「外部構造」ガイドラインと「内部構造」ガイドラインがあります。外部構造は、計測器ドライバがどのようにユーザやシステム内のソフトウェアコンポーネントと相互作用するかを説明しています。内部構造は、計測器ドライバにおけるソフトウェアモジュールの内部構造を説明しています。
計測器ドライバの外部構造
計測器ドライバは、ユーザが上位アプリケーションから呼び出すAPI VIで構成されています。下の図は、計測器ドライバがシステム内でどのように他の部分と相互作用するかを示しています。
図1:LabVIEW計測器ドライバの外部構造
外部構造は、計測器ドライバがどのように対話式インタフェースとプログラミングインタフェースの両方を担っているかを示します。アプリケーションプログラミングインタフェース (API) は、エンドユーザシステムで使用される、ユーザが呼び出し可能な計測器ドライバVIのセットです。使用例としては、計測器ドライバを呼び出してマルチメータまたはオシロスコープと通信するシステム製造者のテストシステムなどがあります。
エンドユーザは、計測器ドライバのフロントパネルからAPIについて学習できます。計測器ドライバVIのフロントパネルを対話的に実行することで、エンドユーザは各制御器がどのように計測器に影響を与えるかを理解することができます。それらを理解することで、エンドユーザは計測器ドライバVIをアプリケーションに組み込むことができるようになります。
仮想計測器ソフトウェアアーキテクチャ (VISA) I/Oインタフェースは、ドライバが計測器ハードウェアと通信するためのLabVIEW関数のセットです。VISAは、計測インタフェースとして規格化されたものであり、GPIB、USB、シリアル、その他の計測器バスを制御します。VISA関数と制御方法の詳細については、「LabVIEWヘルプ」を参照してください。
サポートVIは、エンドユーザが直接アクセスできないVIです。そのため、計測器ドライバのAPIには含まれません。たとえば、計測器ドライバはしばしば初期化中にデフォルト設定VIを呼び出して、他の計測器ドライバVIによる堅牢な計測器制御を可能にする状態に計測器を設定します。初期化VIとリセットVIのみがデフォルト設定VIをサブVIとして使用するため、これはサポートVIとみなされます。
計測器ドライバの内部構造
計測器ドライバの内部構造は、計測器ドライバVIの構造を定義します。すべてのユーザがアクセス可能なAPI VIは、計測器の機能に基づいてモジュール式階層にまとめられています。
下の図は、LabVIEW計測器ドライバの内部構造を示しています。エンドユーザが、アプリケーションで計測器を正しく制御できるように分類されています。たとえば、開始時にすべての計測器をいったん初期化し、複数の計測器を構成し、複数の計測器を同時にトリガすることができます。また、1つの計測器をいったん初期化および構成し、トリガや読み取りを複数回行うこともできます。
このモデルはエンドユーザに一貫した計測器ドライバモデルを提供します。ユーザは計測器ドライバを1つ理解すればその知識を他のLabVIEW計測器ドライバにも応用できるようになっています。
図2:LabVIEW計測器ドライバの内部構造
計測器ドライバAPI VI
計測器ドライバAPI VIは、次の6つのカテゴリに分類されます。
初期化―すべてのLabVIEW計測器ドライバに初期化VIが含まれています。このVIは、最初に呼び出す計測器ドライバVIで、計測器との通信を確立します。オプションで、VIは計測器認識クエリを実行したり操作をリセットしたりできます。また、計測器を電源投入状態にしたり、その他の状態にすることもできます。
構成―構成VIは、計測器が特定の動作を行うよう構成するソフトウェアルーチンを集結したものです。通常、計測器ドライバAPIには複数の構成VIが含まれています。計測器ドライバの構成VIの数は、計測器特有の機能に基づいて異なります。これらのVIを呼び出した後、計測器は計測の実行またはシステムのシミュレートの準備が完了します。
動作/ステータス―動作/ステータスVIには2つのタイプがあります。動作VIは、計測器にテストおよび測定の操作を開始または停止させます。これらの操作には、トリガのアーミングやテスト信号の生成が含まれます。これらのVIは、計測器設定を変更しないという点で構成VIとは異なります。その代わり、現在の構成に基づいて計測器が動作を実行するよう命令します。ステータスVIは、計測器の現在の状態または待機中の操作状態を取得します。ステータスVIは、通常他の関数で必要な場合に作成されます。
データ―計測器との間でデータの受け渡しを行います。例には、計測値または波形を読み取るVIと、波形またはデジタルパターンを信号発生器にダウンロードするVIが含まれています。このカテゴリ内の特定ルーチンは、計測器によって異なります。
ユーティリティ―ユーティリティVIは、リセットやセルフテストなどのさまざまな補助的操作を行い、キャリブレーションや計測器構成の保存や再呼び出しなどのカスタムルーチンも含まれています。
閉じる―閉じるVIは、ソフトウェアと計測器の通信を終了します。すべてのLabVIEW計測器ドライバには閉じるVIが含まれています。
初期化VIと閉じるVIを除くVIの各カテゴリには、複数のモジュールVIが含まれます。計測器ドライバの開発における重要な作業の多くは、初期設計と計測器ドライバAPI VIの構成にあります。
NIからテンプレートVIをダウンロードして、初期化、閉じる、リセット、セルフテスト、リビジョンクエリなど、ほとんどの計測器に共通する操作を実行することができます。テンプレートVIには、特定の計測に特定の計測器ドライバで使用できるように変更手順が含まれています。テンプレートVIのカスタマイズについては、「LabVIEW計測器ドライバのテンプレート」セクションを参照してください。
これらの共通関数に加えて、別のVIを追加して計測器固有の操作を行うこともできます。そのような独自のVIは、計測器特有の機能に基づいて異なります。ただし、できる限り、6つの計測器ドライバVIカテゴリに従ってください。
図2に示すような内部構造を使用して、エンドユーザは計測器ドライバVIを組み合わせてアプリケーションを作成できます。下の図のブロック図は、計測器ドライバAPI VIを使用してHP34970A集録システムをプログラミングで制御する方法を示しています。
図3:HP34970A電流計測サンプルVIのブロック図
図4は、計測器ドライバAPI VIの1つのブロック図を示しています。このAPI VIは、LabVIEWのビルドイン関数とVISA関数を使用してコマンド文字列を作成し、計測器に送信します。VISA関数はデバイス管理、標準の計測器I/O、エラー処理を行います。以下の図4の特定のVIは、文字列フォーマットの操作を組み合わせてコマンドを作成し、そのコマンドをVISA書き込み関数に書き込んでいます。VISA書き込み関数は、そのコマンド文字列を計測器に送信します。VISA読み取り関数は、計測器からの応答文字列を返します。応答文字列はその後、エンドユーザが使用できるよう数値配列の形式に変換します。応答文字列を再形式化することで、ユーザの希望する形式で応答データを扱うことができます。エラークエリVIは、エラーをチェックして、エラークラスタを更新します。
図4:コマンド文字列を作成する
計測器ドライバとともに配布されるその他のVI
内部構造で記述したAPI VIに加えて、計測器ドライバにはサンプルVIとVI Tree VIも含まれています。
計測器ドライバのサンプルVI
すべての計測器ドライバにサンプルVIが含まれています。これらのサンプルは、基本的なテストおよび計測器との測定を行うために計測器ドライバVIを結合する方法を示します。標準モードの操作、トリガ、測定を行うよう計測器が構成されており、テストや測定機能を実例を使って説明しています。また、サンプルVIを使用することで計測器との通信確認も行えます。これらのサンプルは、*.bin3ファイルを作成して、NI サンプルファインダに追加します。 下の図は、HP34970A電流測定サンプルVIのフロントパネルを示しています。
図5:HP34970A電流計測サンプルVIのフロントパネル
VIツリーVI
ほとんどのユーザは、LabVIEWの関数パレットから計測器ドライバVIにアクセスします。しかし、VI Tree VIを使用すると、エンドユーザは計測器ドライバの全体階層を一度に確認することができます。VI Tree VI自体は実行不可能なVIであり、下の図に示すように計測器ドライバの階層を示すものです。
図6:HP34970A VI Tree VIのブロック図
このセクションでは、LabVIEWプラグアンドプレイ計測器ドライバの開発手順について説明します。理想的なLabVIEW計測器ドライバは、計測器のすべての機能を制御できるものです。ただし、マルチメータ、カウンタ/タイマなど異なる計測器タイプに必要な機能を指定できないため、本セクションではすべてのドライバに対する設計上のガイドラインを中心に説明します。ここでの情報を使用してドライバを一貫して構成およびパッケージ化し、同時に計測器に特有の機能を実装することができます。
LabVIEW計測器ドライバの開発プロセスには、3つのステップがあります。ステップ1では、計測器ドライバの構造を設計します。ステップ2では、計測器ドライバプロジェクトウィザードを使用して、新規の計測器ドライバVIを作成します。ステップ3では、開発者が定義したVIを追加し、サンプルVIを作成します。
手順1.計測器ドライバ構造の設計
理想的な計測器ドライバはユーザのニーズに応えます。それ以上でもそれ以下でもありません。すべてのニーズに完全対応できるドライバ設計をすることは大変ですが、計測器をよく理解して制御器をモジュール式VIにグループ化することで、ほとんどのユーザのニーズに応えることができます。
計測器でプログラム可能な制御機能が多いほど、モジュール式計測器ドライバ設計に対する要求も増します。計測器のすべての機能を1つのVIに実装しようとしないでください。各VIが1つだけの機能しか制御しない計測器ドライバの設計も好ましくありません。 このアプローチでは、数百のVIを持つAPIとなる可能性があります。また、これによって、エンドユーザは計測器特有のコマンドの順番や対話のルールを理解する必要が生じる可能性があります。そのため、モジュール式設計にすることで、計測器制御に必要なプログラミングを簡素化することができます。
個々のVIを作成する前に、計測器ドライバの全体的な構造を設計してください。アプリケーションとエンドユーザを念頭に置いて計測器ドライバを設計します。
計測器について理解することが、設計プロセスにとって重要
以下の手順は、LabVIEW計測器ドライバの構造を開発する1つの方法を示します。
計測器のコマンドを体系化してドライバ構造を開発する
計測器ドライバの構成は、計測器ドライバコンポーネントVIの階層と全体的な関連を定義します。
計測器ドライバのAPI VIには、すべての計測器に共通するものと、計測器特有の機能を使用するものがあります。計測器ドライバテンプレートVIは、共通動作 (初期化、閉じる、リセット、リビジョンクエリ、エラークエリなど) を実行します。それに対してもう一方は、計測器ドライバの開発者が計測器特有の独自機能を持つVIを定義します。計測器ドライバによっては、スイッチ計測器に対応する「ルート」や「スキャン」などの追加カテゴリが定義されます。
共通VIと開発者定義のVIをカテゴリ別にグループ化します。カテゴリとは、類似した動作を行うVIを集めたグループのことです。最も一般的なVIのカテゴリは、構成、アクション/ステータス、データ、ユーティリティです。
次の表は、シンプルなオシロスコープの計測器ドライバ編成の例を示しています。階層の最上位に、テンプレートVI (「初期化」と「閉じる」) と標準のVIカテゴリがあります。
表1:簡単なオシロスコープの構成の例
VI階層 | タイプ |
---|---|
初期化VI | (テンプレート) |
サンプルVI 自動設定と波形の読み取りの例 | (開発者定義) |
構成VI 自動設定 垂直軸を構成 水平軸を構成 トリガを構成 集録モードを構成 | (開発者定義) (開発者定義) (開発者定義) (開発者定義) (開発者定義) |
データVI 波形の読み取り 測定値の読み取り 上級VI 開始 波形をフェッチ 測定値をフェッチ | (開発者定義) (開発者定義) (開発者定義) (開発者定義) (開発者定義) |
ユーティリティVI リセット セルフテスト リビジョンをクエリ エラークエリ | (テンプレート) (テンプレート) (テンプレート) (テンプレート) |
閉じるVI | (テンプレート) |
設計の例
ほとんどの計測器マニュアルにある編成に関する情報を参考にして、どのパラメータを計測器ドライバVIに追加するかを決定してください。特に、マニュアルのプログラミングセクションには、測定の構成、トリガ、測定の読み取りなどコマンドをグループ化したセクションがあります。これらのグループをドライバ階層のモデルとして使用します。ドライバ構造の開発に利用できる、シングルタスクや機能で同時に使用できる制御関数を探します。モジュール式ドライバには、各制御グループに対応した個別のVIが含まれています。
下の表では、シンプルなDMMの計測器コマンドがどのように開発者定義の計測器ドライバVIに対応しているか示しています。
表2:マニュアルのセクションとコマンドに対応する計測器ドライバVI
仮想計測器端子 | 計測器コマンド |
---|---|
IDクエリを初期化しますか? リセットしますか? | 入力/出力構成 *IDN? *RST |
測定を構成 測定機能 | 測定構成SENS:FUNC <機能選択> <関数選択>:RANGE; <関数選択>:RES; <関数選択>:NPLC; |
トリガ構成 トリガソース | トリガ操作 TRIG:SOUR TRIG:DEL TRIG:COUN SAMP:COUN |
測定を読み取る 読み取り値 | 測定読み取り値 以下のコマンドを使用して、測定値を取得します。 INIT; FETCH; |
計測器マニュアルには計測器ドライバの構成について多くの情報が記載されていますが、それだけに依存しないでください。計測器を使用して得た知識と経験を活かすとよいでしょう。多くの場合、複数の異なるコマンドグループのコマンドを単一のVIに配置する必要があります。場合によっては、コマンドの1つのグループをマニュアルから取得して、2つ以上のVIに分割する必要があります。計測器マニュアルでは、実際にトリガのアームや実行を行うコマンドとともにトリガ構成コマンドをどのようにグループ化するかを考えてみましょう。この例の場合、コマンドを1つはトリガを構成する、もう1つは計測器をアームまたはトリガする2つのVIに分割しています。
ステップ2.計測器ドライバプロジェクトウィザードを使用して新規計測器ドライバを作成する
LabVIEW計測器ドライバ構造を設計した後、計測器ドライバプロジェクトウィザードを使用して新規計測器ドライバを作成し、そのVIが計測器で動作するよう変更を加えます。
計測器ドライバウィザードを使用する
LabVIEW 8.x以降では、計測器ドライバプロジェクトウィザードを使用して新規の計測器ドライバプロジェクトを作成することができます。
以下の手順に従って、計測器ドライバウィザードを使用して計測器ドライバを作成します。
ステップ3.計測器ドライバAPI VIを追加する
計測器ドライバの機能を定義し、計測器独自の機能にアクセスする開発者定義のAPI VIを追加します。
計測器ドライバVIウィザードの使用
計測器ドライバVIウィザードを使用して、計測器がサポートする追加VIを作成します。 デジタルマルチメータテンプレートなどのクラステンプレートからドライバを作成した場合は、計測器はクラステンプレートが提供しない追加の機能をサポートする場合もあります。既存VIおよびストラクチャを参考にして、サポートされている各機能に対応する追加のVIの作成する必要があります。たとえば、オシロスコープは通常、多種類のトリガを持ちますが、オシロスコープテンプレートにはエッジトリガのサポートしか含まれていません。計測器が追加のトリガの種類をサポートする場合は、追加の計測器ドライバVIでこの機能を追加します。
以下の手順に従って、計測器ドライバウィザードを使用して計測器ドライバを作成します。
• VI:名前とプロパティ
• 制御器/表示器:命名とデータ表現
• VIフロントパネル
• アイコンペーンとコネクタペーン
• ブロック図
• ドキュメント化
各VIを変更したら、顧客が関数パレットから計測器ドライバをインストール、アクセス、使用できるように、関数パレットのメニューを作成します。一貫性を保つために、計測器ドライバが計測器ドライバVIサブパレットに表示されます。サブパレット内では、計測器VIは下の図に示すように内部設計モデルと同じ配置になっているはずです。
図7:FL45のサンプルサブパレット
フロントパネルスタイル
計測器の操作に必要な制御器に加えて、フロントパネルにはVISAリソース名制御器、VISAリソース名出力表示器、エラー入力制御器、エラー出力表示器が含まれます。VISAセッションハンドルについては、「ドライバサポートライブラリ」セクションを参照してください。LabVIEW 7.1以前のバージョンでは、エラー入力およびエラー出力パラメータについては、LabVIEWユーザマニュアル (リンクを下に記載) の第6章を参照してください。LabVIEW 8.0以降では、「LabVIEW ヘルプ」の「エラーを処理する」トピック (リンクを下に記載) を参照してください。
次のスタイルガイドラインを使用して、フロントパネルのデザインが他のLabVIEWのフロントパネルと統一されていることを確認してください。以下の制御器/表示器を参照してください。計測器ドライバのフロントパネル作成のための詳細な要件および推奨事項については、「計測器ドライバガイドライン」の「命名とデータ表現」および「フロントパネル」セクションを参照してください。
アイコンとコネクタペーン
コネクタペーンの左上の端子をVISAリソース名制御器に、右上の端子をVISAリソース名出力表示器に予約します。左下の端子はエラー入力制御器に、右下の端子はエラー出力表示器に予約し、後に続くエラー端子への配線を容易にします。後でコネクタぺーンに制御器や表示器を追加する場合があるので、制御器と表示器の数より端子の数が多いコネクタペーンのパターンを選択します。こうしておけば、パターンを変更したり、変更されたサブVIへの呼び出しのすべてのインスタンスを置き換えたりすることができなくなります。ブロック図では入力を左側に、また出力を右側配置して左から右へのデータフローを構築します。
各VIに分かりやすいアイコンを使用します。できる限り「アイコンライブラリ」にあるアイコンを使用します。また、他の計測器ドライバの類似するVIからアイコンを利用したり、labview\examples\instr\insticon.llbディレクトリにあるアイコンライブラリIcon256.viも使用できます。アイコンの一番上に計測器ドライバの頭辞語を付けて、ユーザがドライバAPIからVIを認識できるようにします。グリフとイメージを使用して、VIの機能を表すアイコンを作成します。下の図は、Icon256.viに含まれている構成アイコンのサンプルです。
図8:サンプルアイコン
分かりやすいアイコンの作成とコネクタぺーンの設計に関する特別な要件と推奨事項については、「計測器ドライバガイドライン」の「アイコンとコネクタペーン」セクションを参照してください。
ブロック図
フロントパネルを設計した後、ブロック図を作成します。文字列にフォーマット関数を使用して計測器コマンド文字列を作成します。この拡張可能な関数は、複数の値とデータタイプを1つの文字列にフォーマットします。関数をダブルクリックして文字列をフォーマットダイアログボックスからフォーマットコマンドを入力します。また、「True/False文字列を追加」関数および「行選択」関数を使用して文字列を操作します。たとえば、「True/False文字列を追加」関数を使用して、フロントパネルブールからのブール値を文字列に変換します。この関数は、適切な文字列を選択し、それを1ステップでコマンド文字列に連結させます。テキストリング値を文字列に変換するには、「行選択」機能を使用します。この関数は、ラベル値によって正しい文字列を選択し、それをコマンド文字列に連結します。これらの関数の説明については、「LabVIEWヘルプ」(下記にリンクを記載) を参照してください。下の図のブロック図は、推奨するコマンド文字列の構築方法を示しています。
図9:文字列を作成するテクニック
多くの計測器は、プログラマブル計測器用標準コマンド (SCPI) のプログラミングコマンドおよび構文に準拠しています。SCPIベースの計測器では、複数コマンドをまとめて1つのI/O書き込み操作として送信することが可能です。上記の文字列関数を利用することで、複数コマンドを含む文字列の構築が可能です。結合した文字列を「VISA書き込み」関数に配線します。
ブロック図はエンドユーザがVIの仕組みを学ぶ上で最良の方法であるため、できる限り読みやすくすることが重要です。計測器ドライバのブロック図に関する推奨事項は、すべてのLabVIEWアプリケーションで行われているベストプラクティスに類似しており、左から右へのレイアウト、配線ワイヤをなるべく曲げない、効率のよい一貫性のあるプログラミングテクニックを使用するなどがあります。計測器ドライバのブロック図作成に関する特別な要件と推奨事項については、「計測器ドライバガイドライン」の「ブロック図」セクションを参照してください。
下の図のブロック図は、「計測器ドライバガイドライン」に記載されている要件と推奨事項に準拠しています。
図10:スタイルガイドラインに沿った簡単なブロック図
LabVIEWの計測器ドライバ開発ツールには、ドライバ作成の手本となるテンプレートVIのライブラリ、それらのテンプレートをカスタマイズするドライバプロジェクトウィザード、計測器I/Oを実行するVISA関数、分かりやすいアイコンを作成するためのアイコンライブラリ、サポートファイルと関数が含まれます。このセクションではVISA関数と計測器ドライバテンプレートVIについて説明します。
VISA
VISA関数には、計測器ドライバがプログラム可能な計測器との通信に使用するI/Oインタフェースが含まれています。VISAは、VXI、GPIB、シリアル、TCP/IPなどのタイプを持つ計測器を制御するインタフェースライブラリの1つです。VISA関数と制御方法については、「LabVIEWヘルプ」(下記にリンクを記載) の「VISA VIおよび関数」トピックを参照してください。
ほとんどの計測器ドライバVIのフロントパネルにはVISAリソース名制御器とVISAリソース名出力表示器が含まれます。これらの制御器と表示器は計測器ドライバサブVI間でセッション情報を渡します。VISAリソース名はVIが操作しているリソースを識別します。また、計測器ドライバの異なるセッション間で差別化をはかります。
VISAリソース名は、デバイスI/Oセッションへの固有の識別子リファレンスです (初期化VIを除く)。VIと通信し、I/Oを実行するために必要なすべての構成情報を渡すデバイスを識別します。
VISAリソース名出力にはVISAリソース名と同じ識別子情報が含まれます。VIからのリファレンスを後に続く同じ計測器へアクセスする他のVIへ渡します。VISAリソース名を一緒に配線すると、データ依存が確立されます。
また、VISAリソース名をブロック図上のVISA関数間で渡します。
計測器ドライバテンプレートVI
instr.libフォルダにあるLabVIEW計測器ドライバのテンプレートには、ほとんどの計測器に共通するVIのセットが含まれています。NIでは、これらのテンプレートを定期的に更新し、更新されたテンプレートは最新バーションのLabVIEWに含まれます。これらのVIを計測器ドライバ開発の開始点として使用してください。テンプレートはシンプルで柔軟性のある構造なので、すべてのLabVIEWドライバの基本フォーマットとして使用できます。
テンプレートVIには、特定の計測器に対応するようVIをカスタマイズする手順も含まれています。テンプレートVIはメッセージベース計測器 (GPIB、VXI、シリアル) とVXIレジスタベース計測器の両方で使用できます。これらのテンプレートは、IEEE 488.2準拠の計測器用に設計されているため、IEEE 488.2準拠の計測器ではほとんど編集する必要がありません。その他の計測器には、テンプレートVIをシェルまたはパターンとして使用し、該当する計測器特有のコマンドと差し替えます。
VIのドキュメント化
情報が各計測器ドライバのLabVIEW詳細ヘルプウィンドウに表示されるように、作成するVIをドキュメント化します。VIのドキュメント化については、「LabVIEWヘルプ」(下記にリンクを記載) の「VIのドキュメント化」トピックを参照してください。
ヘルプ»詳細ヘルプを表示を選択して、詳細ヘルプウィンドウにアクセスします。カーソルをフロントパネルやブロック図のオブジェクトの上に置く、またはフロントパネルやブロック図の右上角にあるアイコン上に置くと、ドキュメントを含む詳細ヘルプウィンドウにオブジェクトの説明が表示されます。
また、ユーザがフロントパネルとブロック図上のフリーラベルを使用できるようにします。ブロック図では、すべての端子ラベル (標準テキスト) を表示し、境界に透明な色を付けます。ケースとシーケンスストラクチャに表示されるフリーラベルでは、テキストを太字にして目立つようにし、VIもすぐ理解できて編集しやすいようにします。
エラー通知
計測器ドライバのエラー通知は、他の多くのLabVIEWアプリケーションのエラー通知に似ています。VISA関数がエラー入力クラスタのブール状態をチェックし、前に実行されたVIまたは関数がエラーを生成したかどうか確認します。VIや関数がエラーを検知すると、VISA関数は通常の操作を実行しません。代わりに、エラー情報を変更せずにエラー出力クラスタへ渡します。VIや関数がエラーを検知しなかった場合、VISA関数が通常通り実行されて、エラーが生成されたかどうか確認します。エラーを検知した場合、関数が新規エラー情報をエラー出力クラスタに返します。エラーがなければ、関数はエラー入力情報をエラー出力クラスタに返します。最初のエラーにより、後続のVIが実行しない (またはユーザが定義したその他の動作をする) ようにトリガされ、エラーコードとエラーソースがフロントパネルの上部に表示されます。また、警告 (エラーコードとエラーブールがFALSEになっているソースメッセージ) はエラー動作をトリガせずに渡されます。
VISAエラーコードに加え、下の表に記載されたエラーコードと警告コードは計測器ドライバ用に使用されます。計測器ドライバVIは、適切な条件が発生するとこれらのコードを返します。古いバージョンの計測器ドライバや計測器ドライバテンプレートでは、-1300などの計測器独自のエラーに対応するコードがあります。できる限り、下の表にある計測器ドライバ規格に準拠したコードを使用してください。
表3:計測器ドライバのエラーコード (10進コード)
10進コード | 16進コード | 意味 |
---|---|---|
0 | 0 | エラーなし:呼び出しに成功 |
1073481728~1073483775 | 3FFC0800~ 3FFC0FFF | 警告:開発者定義の警告 |
-1074003951 | BFFC0011 | エラー:IDクエリに失敗しました |
-1074000000 | BFFC0F80 | エラー:計測器定義のエラー |
-1073999873 ~-1074001919 | BFFC0801~ BFFC0FFF | エラー:開発者定義のエラー |
初期化VIは「IDクエリに失敗しました」エラーを使用します。エラークエリVIは、「計測器定義のエラーコード」を使用します。
計測器ステータスをクエリ
ほとんどすべての計測器には、計測器定義のエラーを通知するメカニズムがあります。計測器定義のエラーには、コマンドエラー、実行エラー、クエリエラーが含まれます。最近製造された計測器の多くには、計測器エラーが発生したかどうか確認するクエリコマンドが含まれています。SCPI計測器では、計測器エラーを取得する標準コマンドは「SYST:ERR?」です。このコマンドに対する応答には、エラーコードとエラーメッセージが含まれます。エラーが発生しなかった場合、応答は「0」、「エラーなし」です。
計測器で「SYST:ERR?」コマンドはサポートしていないがIEEE 488.2ステータスレジスタはサポートしている場合、標準イベントステータスレジスタをクエリしてエラーが発生したか確認できます。
計測器ドライバVIの中の「エラークエリ」VIを使用して計測器エラーレポート機構を実装し、ユーザに計測器エラーをレポートできるようにします。計測器ドライバは、計測器ドライバ内で計測器エラーを再定義することはありません。その代わり、「エラークエリ」VIが計測器からレポートされたエラーコードと関連メッセージをレポートします。
計測器エラーのクエリに「エラークエリ」VIを使用しないと、「シンプルエラー処理」を使用していても、エンドユーザは計測器エラーが発生したことに気付かない場合があります。I/Oエラーを発生させずに計測器とのデータの送受信することは可能ですが、計測器エラーのエラーは必ずしもレポートされません。
ユーザが計測器エラー情報を適時取得できるよう、ほとんどのAPI VIではすべてのI/O操作の後に「エラークエリ」VIを呼び出します。計測器エラーが発生した場合、「シンプルエラー処理」VIを呼び出すなどのLabVIEW標準のエラー処理によってユーザに自動的にエラーを通知します。エラーが検出された場合、「エラークエリ」VIは、エラークラスタをエラーコード「コード-1074000000」(16進数: BFFC0F80) に更新し、計測器から返されたエラー情報をソースメッセージに追加します。LabVIEWのエラー処理VIは、このエラーコード (コード-1074000000) を計測器特定エラーとして認識し、対応するエラーメッセージを生成します。下の図は、「エラークエリ」VIのフロントパネルを示しています。
図11:エラークエリVIのフロントパネル
低レベルAPI VIは、「エラークエリ」VIを呼び出しません。低レベルAPI VIの多くは、主に計測器操作における性能の向上または制御の拡大を目的に設計されています。たとえば、オシロスコープ計測器ドライバは、「波形の読み取り」VIを使用してチャンネルごとの波形データを返します。上級ユーザが制御できるようにするには、開始VIとフェッチVIを実装する必要があります。低レベルの「開始」VIおよび「フェッチ」VIは操作が発生するタイミングをより詳細に制御できるようにするため、「エラークエリ」VIを呼び出しません。
計測器によってはエラーキューを持つものがあり、エラーやイベントが検知されるとこのキューに保管します。このキューは、先入れ先出し (FIFO) で、最低長は2つのメッセージです。オーバーフローが発生した場合、計測器は最新のエラー/イベントを保持し、最も古いエラー/イベントをキューオーバーフローメッセージに置き換えます。計測ドライバでこのキューを使用して、コマンド送信後に計測器をクエリすることで計測器エラーを検知およびレポートできます。「:SYST:ERR?」コマンドを発行すると、SCPI計測器はキューから1つのエントリを返します。このエントリは、エラー、オーバーフロー警告、またはメッセージ0、「エラーなし」のいずれかです。すべてのエラーキューを取得したいユーザもいるので、計測器ドライバの多くには「エラークエリ (複数)」VIも含まれています。このVIは、「:SYST:ERR?」コマンドを使用してエラーキューが空になるまで計測器をクエリします。
計測器ドライバプロジェクトウィザードによって生成されるコードには、「エラークエリ」VIが含まれます。
計測器ドライバVIは、通常入力パラメータで入力範囲確認は行いません。ユーザが不正な値を渡すと、計測器は計測器特有のエラーをレポートします。「エラークエリ」VIは、この計測器エラーを検知して、範囲外状態をユーザにレポートします。VIの入力範囲情報と制御ヘルプをドキュメント化して、ユーザが範囲外エラーに遭遇しないようにします。
その他のスタイルガイドライン
計測器ドライバごとに一貫性があることは、ユーザにとって有益です。簡単に理解できるレイアウトでシンプルなフロントパネルとブロック図を作成すると、エンドユーザは戸惑わずにコードを編集することができます。場合によっては、特別なニーズに対応するためコードを編集する必要がある場合もあります。スタイルガイドラインについては、「計測器ドライバガイドライン」を参照してください。
操作テスト
計測器ドライバの開発中にテストを行います。ほとんどのユーザはVIへの入力を決定するのに詳細ヘルプウィンドウを使用しますが、一部のエンドユーザはVIへの入力を決定するのに詳細ヘルプウィンドウを使用せず、VIに無効なデータを渡す場合があります。したがって、無効なデータ、境界条件と範囲、特殊な入力の組み合わせを使用してVIをテストしてください。サブVIが文字列や配列情報を要求する場合、空の配列や文字列をVI入力に配線します。
計測器ドライバの開発において、VIの構造を定義することが最も重要です。関連する計測器制御器をモジュール式VIにグループ化し、その各モジュールVIがフロントパネルから実際に計測器を使用するのと同じようにタスクを実行するようにします。このような構造にすると、各VIは特定の計測操作に対して実行すべき動作を明確に示せます。各VIでどのような制御を行うか決定することが計測器ドライバを開発する上で最も困難な課題です。
エンドユーザにとっては、論理構造、ドキュメント、エラーレポートが最も重要な計測器ドライバの特徴です。すべての説明ボックスに適切なコメントを入力し、ブロック図でコメント付きのコードにしてドキュメント化します。このドキュメントに記載されているテクニックを使用して、VIに適切なエラーレポートを組み込みます。すべてのVIをテストし、適切に動作することを確認します。
計測器ドライバ開発には、文字列を構築して計測器に送信する以上の作業が必要になります。計測器ドライバプロジェクトウィザードおよびNI計測器ドライバネットワーク (ni.com/idnet) で利用できる数千の計測器ドライバを使用します。テンプレートには、ほとんどの計測器に共通するVIが含まれており、計測器ドライバVIの希望するスタイルと構造を示します。既存の計測器ドライバを使用すると、独自の計測器ドライバを作成することができます。VIを作成する際は、内部設計構造に従い、API VIのカテゴリに留意してください。高品質の計測器ドライバを作成するには、ドライバ開発プロセス全体を通して「計測器ドライバガイドライン」を使用してください。これらのツールを使用すると、幅広いユーザ層で使用可能な計測器ドライバを設計することができます。