ivi 計測器ドライバ プログラミング・ガイド (labwindows/cvi...labwindows/cvi...
TRANSCRIPT
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 1/17
IVI計測器ドライバ
プログラミング・ガイド
(LabWindows/CVI編) June 2012 Revision 2.1
1- 概要
1-1 IVI-Cドライバの推奨
LabWindows/CVIは C言語を前提にした(C++が利用できない)開発環境です。従って COM
DLLを扱うよりも関数ベースの DLL(C DLL)を使うほうが簡単です。また IVI-C計測器ドライ
バのアーキテクチャは、元々LabWindows/CVI計測器ドライバを拡張した VXI Plug&Play計
測器ドライバを更に拡張したものです。(ドライバ・アーキテクチャによる共通の要求仕様は
異なるが、ドライバの物理的構造は現在も LabWindows/CVI計測ドライバそのものである。)
従って本ガイドブックでは IVI-C計測器ドライバを使用することを推奨します。
Notes:
本ガイドブックでは、KikusuiPwx IVI計測器ドライバ(KIKUSUI PWXシリーズ直流電源)を使用す
る例を示します。他社メーカー及び他機種用の IVI計測器ドライバでも、ほぼ同様の手順で使用
できます。
本ガイドブックでは、LabWindows/CVI 2010を使用し、Windows7 (x64)上で動作する 32bit(x86)
プログラムを作成する場合を例に説明します。
1-2 IVI計測器クラス・インターフェース
IVI計測器ドライバを利用する場合、スペシフィック・インターフェースを利用する方法と
クラス・インターフェースを利用する方法の 2種類があります。前者は計測器ドライバの固
有インターフェースを利用するもので、使用する計測器の機能を最大限に利用する事ができ
ます。後者は IVI仕様書で定義されている計測器クラスのインターフェースを利用するもの
で、インターチェンジャビリティ機能を利用する事ができますが、機種固有の機能を使うこ
とは制限されます。
Notes:
計測器ドライバが所属する計測器クラスについては、ドライバ毎の Readme.txtに記載されていま
す。Readme文書は、StartAll ProgramsKikusuiKikusuiPwxメニューから開く事ができま
す。
計測器ドライバが如何なる計測器クラスにも属していない場合、クラス・インターフェースを利
用する事はできません。つまりこの場合、インターチェンジャビリティ機能を利用するアプリケ
ーションを作成する事は出来ません。
2- スペシフィック・インターフェースを使用するサンプル
ここでは、スペシフィック・インターフェースを使用したサンプルを示します。スペシフィ
ック・インターフェースを使用すると、計測器ドライバで提供される機能(即ち機種に依存し
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 2/17
た固有機能)を最大限に利用する事ができますが、インターチェンジャビリティを実現する事
はできません。
2-1 アプリケーション・プロジェクトの作成
LabWindows/CVI 2010を起動し、Welcome ページから New | Project を選択して新規プロ
ジェクト作成して下さい。Welcomeページが表示されずに既存プロジェクトが読み込まれて
しまう場合は、File | New | Project (*.prj)メニューを選択してください。このガイドブ
ックでは、新規アプリケーションで IVI-Cドライバを使う例を示しますが、既存のプロジェ
クトでも同様の手順が適用できます。
新規のプロジェクトを作成したら、まず File | Save Untitled.PRJ As…を選択して、先に
保存をしておく事を推奨します。この例では Ex01.prjとします。また、新規のプロジェクト
の作成直後には C言語のソース・ファイルがありません。File | New | Source (*.c)…メ
ニューでソース・ファイルを新規作成し、それを Ex01.cとして保存します。また、File |
Add Ex01.c to Project メニューを選択して、このソース・ファイルをプロジェクトに追加
します。
2-2 計測器ドライバのロード
Instrument| Load メニューを選択し、C:/Program Files (x86)/IVI
Foundation/IVI/Drivers/kipwx ディレクトリに置かれている kipwx.fp を選択します。
すると Instrument | KikusuiPwx...メニューが追加されているのが分かります。
Figure 2-1 Instrument Menu
2-3 コードの記述
関数コールの挿入
プロジェクトに追加された Cのソースコード(Ex01.c)を開きます。現時点では何も書かれて
いません。今度は Instrument | KikusuiPwx メニューを選択します。
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 3/17
Figure 2-2 Select Function Panel
Initialize With Options を選択して Select ボタンをクリックします。すると Initialize
With Options のファンクション・パネルが表示されます。
Figure 2-3 Initialize With Optionsファンクション
ここではファンクションの各パラメータを下記のように設定します。
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 4/17
Table 2-1 各パラメータの値
パラメータ 値
ResourceName "TCPIP::192.168.1.5::INSTR"
IdQuery On (関数コール記述では VI_TRUE)
Reset On (関数コール記述では VI_TRUE)
OptionString "QueryInstrStatus=1"
Vi &vi
Status vs
Notes:
この例では、計測器が LANインターフェースで接続され、IPアドレス 192.168.1.5であると仮定
します。
ResourceName と OptionString のパラメータは文字列なので、忘れずに引用符で囲んでくだ
さい。
入力した変数 vi は宣言が必要です。ファンクションパネル上のこのコントロールを選択し
た状態で Code | Declare Variable...メニュー(又は Ctrl+D)を選択して Declare Variable
ダイアログを開き、Execute declaration in Interactive Window と Add declaration to
top of target file "Ex01.c"の両方をチェックして OK をクリックして下さい。同様に変数
vs にも宣言が必要です。同様の手順でソースコードの先頭に宣言を追加します。
そして Code | Insert Function Call メニュー(又は Ctrl+I)を選択して、
kipwx_InitWithOptions 関数の呼び出しコードをソースコード(Ex01.c)に挿入します。
同様に Select Function Panel ダイアログから Close を選択して Closeファンクション・パネ
ルを表示します。ここではパラメータ Vi に vi とタイプし、Status には vs とタイプしま
す。そして Code | Insert Function Call メニューを選択して、kipwx_close 関数の呼び
出しコードをソースコード(Ex01.c)に挿入します。
Figure 2-4 Close Function Panel
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 5/17
この時点で Cソースコードは下記のようになっています。
static ViStatus vs; static ViSession vi; vs = kipwx_InitWithOptions ("TCPIP::192.168.1.5::INSTR", VI_TRUE, VI_TRUE, "QueryInstrStatus=1", &vi); vs = kipwx_close (vi);
しかしこれでは実行可能プログラムとしての形になっていないので、全体を main 関数で囲
み、更に計測器ドライバのインクルード・ファイルの読み込み指定を記述します。最後に、
InitWithOptions と close の呼び出しの間に、電圧や電流を設定する関数、更には出力
ON/OFF制御を行う関数呼び出しコードも追加してみます。ファンクションパネルを使って
挿入する方法のほかに、ソースコードをエディタに直接入力してもかまいません。
#include static ViStatus vs; static ViSession vi; void main() { vs = kipwx_InitWithOptions ("TCPIP::192.168.1.5::INSTR", VI_TRUE, VI_TRUE, "QueryInstrStatus=1", &vi); vs = kipwx_ConfigureVoltageLevel (vi, "", 20); vs = kipwx_ConfigureCurrentLimit (vi, "", KIPWX_VAL_CURRENT_REGULATE, 2.0); vs = kipwx_ConfigureOutputEnabled (vi, "", 1); vs = kipwx_close (vi); }
プロジェクトのビルド
Build | Create Debuggable Executable (Ctrl+M)メニューを選択し、プロジェクトをビル
ドしてみてください。特にエラーがなければ直ぐにビルドは完了します。
2-4 プログラムの実行
上記のサンプルは計測器ドライバ・セッションをオープンし、電圧、電流、出力を設定し、
すぐにクローズするものです。いきなり実行しても、プログラムが対話形式でないため、何
がどう実行されたのかわかりません。そこで kipwx_InitWithOptions の呼び出し行にブ
レークポイントを貼ります。ブレークポイントは Run | Toggle Breakpoint (又は F9)メニ
ューで設定することができます。
Run | Debug Ex01_dbg.exe メニューを選択するとプログラムが実行され、ブレークポイ
ントが設定されている kipwx_InitWithOptions 呼出しで停止します。Run | Step
Over メニューを選択(又は F10)すると、その行を実行します。
kipwx_InitWithOptions が呼び出された後の vs と vi に注目して下さい。計測器ドラ
イバのセッションをオープンできた場合には、vi にはセッションハンドル(通常 IVIハンド
ルとして 0x00000001以上)、vs にはエラーコード(成功した場合は 0x00000000、失敗した
場合は負の値)が格納されます。
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 6/17
更に F10を操作して kipwx_ConfigureVoltageLevel、
kipwx_ConfigureCurrentLimit 等を順に実行します。いずれの場合も戻り値 vs にはエ
ラーコードが格納されます。
vs が負の値の場合、関数の呼び出しによってエラーが発生した事を示しています。下記の
様なコードを必要に応じて追加すれば、エラーコードを読みやすい英文メッセージに変換す
ることもできます。
char buf[256]; ... kipwx_error_message (VI_NULL, vs, buf);
Note:
直流電源装置用の IVI計測器ドライバは通常多チャンネルを考慮した作りになっており、装置設
定ファンクションの多くは ChannelName パラメータを持っています。
チャンネル数が 1個のみの装置では、ChannelName にブランク文字列を指定する事ができます
が、複数チャンネルをサポートする場合は明示的に指定する必要があります。
ChannelName は多くの場合、"Output1"又は"Channel1"のような名前になっていますが、
IVIドライバ毎に異なる場合があります。また弊社製 PWXシリーズ直流電源はマルチドロップ(多
チャンネル運転)でのチャンネル名を 0番から振っているため、最初のチャンネルは"Output0"
となります。
3- 解説
3-1 計測器ドライバ・セッションの開始
ドライバ・セッションを開始するには kipwx_InitWithOptions 関数を使用します。関数
名に付く kipwx_というプレフィックスは計測器ドライバ毎に異なりますが、全ての IVI-C
計測器ドライバにはこのような名前ルールによる関数が用意されています。
vs = kipwx_InitWithOptions ("TCPIP::192.168.1.5::INSTR", VI_TRUE, VI_TRUE,
" QueryInstrStatus=1", &vi);
Notes:
IVI-C及び VXI Plug&Play計測器ドライバの専門用語としてという表記が良く使われま
す。これは各 instrument driverが固有に持つ識別用の名前で、本書の例では kipwxがそれに該当
します。例えば、_init()という一般的表現は、kipwx計測器ドライバでは
kipwx_init()関数の事を指します。
_init()及び_InitWithOptions()を除く全てのドライバ関数は、第 1パラメ
ータに ViSession が付き、戻り値は全て ViStatus になります。
_init()関数は VXI Plug&Playドライバ仕様との互換性の為に残されています。
OptionString パラメータを指定できない点を除き、_InitWithOptions()と同じ動
作をします。
ここで、kipwx_InitWithOptions 関数のパラメータについて説明しましょう。全ての
IVI計測器ドライバは、IVI仕様書で定義された_InitWithOptions 関数を持っ
ています。この関数には、以下のようなパラメータがあります。
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 7/17
Table 3-1 InitWithOptions関数のパラメータ
パラメータ タイプ 説明
ResourceName ViRsrc (const char*)
VISAリソース名の文字列。計測器が接続されている
I/Oインターフェース、アドレスなどによって決定され
る。例えば、"TCPIP::192.168.1.5::INSTR"の例では、IP
アドレス 192.168.1.5を持つ LAN接続の計測器で VXI-
11インターフェースを使用する事を意味する。
idQuery ViBoolean
VI_TRUE を指定した場合、計測器に対して IDクエリを
行う。
Reset ViBoolean VI_TRUE を指定した場合、計測器の設定をリセットす
る。
OptionString ViConstString (const char*)
RangeCheck Cache Simulate QueryInstrStatus RecordCoercions Interchange Check
に関する設定を、デフォルト以外に指定できる。更に、
計測器ドライバが DriverSetup 機能をサポートする
場合、その設定を行うことができる。
Vi ViSession* 計測器セッションを受け取るパラメータ(ポインタ渡
し)。
ResourceName には VISAアドレス(リソース名)を指定します。idQuery に VI_TRUEを指
定した場合は、計測器に対して"*IDN?"クエリなどを発行して機種情報を問い合わせます。
Reset に VI_TRUEを指定した場合は、"*RST"コマンドなどを発行して計測器の設定をリセ
ットします。
OptionString には、2つの機能があります。1つは RangeCheck, Cache, Simulate,
QueryInstrStatus, RecordCoercions, Interchange Check,などの IVI定義の動
作を設定します。もう 1つは、計測器ドライバ毎に独自に定義される DriverSetup を指定
します。OptionString は文字列パラメータなので、これらの設定は下のサンプルのよう
な書式でなければなりません。
QueryInstrStatus = TRUE , Cache = TRUE , DriverSetup=12345
設定したい機能の名称及び設定値はケース・インセンシティブ(大文字と小文字の区別なし)
です。設定値は ViBoolean型なので、VI_TRUE、VI_FALSE、1、0 の何れかが有効です。複
数の項目を設定する場合は、カンマで区切ります。optionString パラメータで特に設定
値を指定しない場合、IVI仕様書で定義されたデフォルト値が適用されます。IVI仕様書で定
義されたデフォルト値は、RangeCheck と Cache だけが VI_TRUEで、その他は全て
VI_FALSEです。
計測器ドライバによっては、DriverSetup パラメータが意味を持つ場合もあります。これ
は、IVI 仕様書では定義されない項目を InitWithOptions の呼び出し時に指定するもので、
利用目的や書式はドライバ依存です。従って DriverSetup の指定を行う場合、それは
OptionString の最後の項目として指定される必要があります。DriverSetup の指定内
容はドライバ毎に異なるので、ドライバの Readme文書又はオンライン・ヘルプなどを参照
してください。
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 8/17
3-2 チャンネルへのアクセス
IVI計測器ドライバでは一般に、電源装置やオシロスコープなどの計測器の場合、複数のチ
ャンネルが装備されている事を前提に設計されています。従って、計測器のパネル設定に関
する操作を行うドライバ関数は、第 2パラメータにチャンネルを指定するケースが多く見ら
れます。
例: vs = kipwx_ConfigureVoltageLevel( vi, "", 20.0);
この例では弊社製 PWXシリーズ直流電源装置を操作する KikusuiPwx (IVI-Cでは Prefix名
kipwx)ドライバを使用するので、チャンネル名はブランク(チャンネル数が 1個の場合)又は
明示的に"Output0"のような表現を使用します。チャンネル名はこの計測器ドライバによ
って個々に定義されているため、ドライバ毎に異なる命名法が使用されます。実際に使用で
きるチャンネル名の詳細は、各ドライバのオンライン・ヘルプなどを参照してください。
3-3 セッションのクローズ
計測器ドライバによるセッションをクローズするには、_close 関数を使います。
vs = kipwx_close (vi);
4- エラー処理
これまで示したサンプルでは、エラー処理を何も行っていませんでした。しかし実際には、
範囲外の値をパラメータに渡したり、サポートされていない機能を呼び出したりすると、計
測器ドライバがエラーを発生する事があります。また、どんなに堅牢に設計・実装されたア
プリケーションでも、計測器との I/O通信エラーは避けることが出来ません。
IVI-C計測器ドライバでは、計測器ドライバ内で発生したエラーは全て ViStatus 型の戻り
値としてクライアント・プログラムに伝えられます。
Table 4-1 ViStatusの大まかな分類
値の範囲 説明
vs=0 成功
vs >0 警告
vs
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 9/17
5- クラス・ドライバを使用するサンプル
ここでは、計測器クラス・ドライバを使用したサンプルを示します。計測器クラス・ドライ
バを使用すると、アプリケーションを再度コンパイル・リンクすることなく、計測器を交換
する事ができます。但しその場合、交換前後の両機種に対して IVI-C計測器ドライバが提供
されており、且つそれらのドライバが同じ計測器クラスに属している必要があります。異な
る計測器クラス間でのインターチェンジャビリティは実現できません。
5-1 仮想インストルメント
インターチェンジャビリティ機能を利用するアプリケーションの作成を行う前にやっておか
なければならない事は、仮想インストルメントの作成です。インターチェンジャビリティ機
能を実現するには、アプリケーション・コード内に特定の IVI-C計測器ドライバに依存した
記述(例えば kipwx_init 関数の直接コール)をしたり、
"TCPIP::192.168.1.5::INSTR"のような特定 VISAアドレス(リソース名)の記述などを
するべきではありません。これらの事柄をアプリケーション内に直接記述すると、インター
チェンジャビリティを損ないます。
その代わりに、IVI仕様では、計測器ドライバとアプリケーションの外部に IVIコンフィグレ
ーション・ストアを置く事によってインターチェンジャビリティを実現します。アプリケー
ションは特定機種用の計測器ドライバを直接使うのではなく、計測器クラス・ドライバと呼
ばれる特別な計測器ドライバを通じて計測器を制御します。その際、IVIコンフィグレーシ
ョン・ストアの内容に従って計測器ドライバ DLLの選択を行い、間接的にロードされた計測
器ドライバを特定機種に依存しないクラス・ドライバの関数を通じてアクセスします。
IVIコンフィグレーション・ストアは通常、C:/ProgramData/IVI Foundation/IVI/
IviConfigurationStore.xml ファイルで、IVI Configuration Server DLLを通じてアクセスさ
れます。この DLLを利用するのは、主に IVI計測器ドライバや一部の VISA/IVIコンフィグレ
ーション・ツールであって、アプリケーションからは通常は使いません。LabWindows/CVI
を使用する場合は National Instruments社製のソフトウェア NI-MAX (NI Measurement and
Automation Explorer)を使用して IVIドライバのコンフィグレーションを行います。
Driver Session の作成
NI-MAXを起動したら、IVI Drivers ノードの階層を参照して下さい。Driver Seesion の上
で右クリックして Create New (case-sensitive)...メニューを選択し、Driver Sessionの新
規作成を行います。名前を尋ねられるので、mySupply としておきましょう。画面右側の
General タブを選択すると下記のようになっています。
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 10/17
Figure 5-1 NI-MAX Generalタブ
Hardware Asset の作成
引き続き Hardware タブを選択すると、ハードウェア・アセットの管理画面になります。
ハードウェア・アセットとは、実際の計測器がどのような経路に接続されているかを示すも
のです。ここで Add ボタンをクリックして Hardware Asset を新規作成します。新しい名前
を尋ねられるのでここでも mySupply とし、更に Resource Descriptor として、実際の計
測器が接続されている VISAアドレス(この例では TCPIP::192.168.1.5::inst0::INSTR)を指定
します。
Figure 5-2 NI-MAX Hardwareタブ
Software Module のリンク設定
引き続き Software タブを選択すると、ソフトウェア・モジュールの管理画面になります。
ソフトウェア・モジュールとは計測器ドライバモジュール(DLL モジュール)の事を指します。
ここで Software Module のリストから kipwx を選択します。
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 11/17
Figure 5-3 NI-MAX Softwareタブ
Virtual Name の作成
引き続き Virtual Names タブを選択すると、仮想チャンネル名の管理画面になります。通
常、電源装置の計測器ドライバのようにチャンネルが関与する場合、有効なチャンネル名は
計測器ドライバによって異なります。従ってそれらのチャンネル名も仮想化してやる必要が
あります。Add ボタンをクリックしてバーチャル・ネームを追加し、Virtual Name に
Track_A と入力します。更に Physical Name リストから、実際の直流電源装置が稼動する
チャンネルが表示されます。リストには IviDcpwrChannel!!Output0 だけが表示されて
いるのでそれを選択するか、又は単に Output0 と入力します。
Notes:
ドライバの実装或いは多チャンネル電源装置での構成によっては必ずしも全てのチャンネル名が
表示されない場合があります。ドライバ毎の利用可能なチャンネル名については、ドライバの
Readme.txtやオンラインヘルプを参照して下さい。
Figure 5-4 NI-MAX Virtual Namesタブ
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 12/17
Logical Name の作成とリンク設定
最後にロジカル・ネームを作成します。ロジカル・ネームとは、NI-MAXで設定される仮想
計測器の名前に相当します。IVI Drivers ノードの階層を参照して下さい。Logical Name
の上で右クリックして Create New (case-sensitive)メニューを選択し、Logical Nameの
新規作成を行います。名前を尋ねられるので mySupply としておきましょう。更に、
Driver Session リストから mySupply を選択します。
Figure 5-5 NI-MAX Genaralタブ
コンフィグレーション作業を終えたら、NI-MAXのツールバー上にある Save IVI
Configuration ボタンをクリックして設定を保存します。
5-2 アプリケーションの作成
ここで LabWindows/CVIを起動します。
LabWindows/CVI統合環境を起動すると新規アプリケーションのプロジェクトが作成されま
す。起動時に既存プロジェクトが読み込まれてしまう場合は、File | New | Project
(*.prj)を選択してください。このガイドブックでは、新規アプリケーションで IVI-Cドライ
バを使う例を示しますが、既存のプロジェクトでも同様の手順が適用できます。
新規のプロジェクトを作成したら、まず File | Save Untitled.PRJ As…を選択して、先に
保存をしておく事を推奨します。この例では Ex02.prjとします。また、新規のプロジェクト
の作成直後には C言語のソース・ファイルがありません。File | New | Source (*.c)…メ
ニューでソース・ファイルを新規作成し、それを Ex02.cとして保存します。また、File |
Add Ex02.c to Project メニューを選択して、このソース・ファイルをプロジェクトに追加
します。
5-3 計測器ドライバのロード
Instrument| Load メニューを選択し、C:/Program Files (x86)/IVI
Foundation/IVI/Drivers/ividcpwr ディレクトリに置かれている IviDCPwr.fp を選択し
ます。すると Instrument | IviDCPwr Class Driver メニューが追加されます。
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 13/17
Figure 5-6 Instrument Menu
5-4 コードの記述
関数コールの挿入
プロジェクトに追加された Cのソースコード(Ex02.c)開きます。現時点では何も書かれてい
ません。今度は Instrument | IviDCPwr Class Driver メニューを選択します。
Figure 5-7 Select Function Panel
Initialize With Options を選択して Select ボタンをクリックします。すると Initialize
With Optionsのファンクション・パネルが表示されます。ここでは Instrument Handle に
&vi とタイプし、Status には vs とタイプします。
入力した変数 vi は宣言が必要です。ファンクションパネル上のこのコントロールを選択し
た状態で Code | Declare Variable...メニュー(又は Ctrl+D)を選択して Declare Variable
ダイアログを開き、Execute declaration in Interactive Window と Add declaration to
top of target file "Ex02.c"の両方をチェックして OK をクリックして下さい。同様に変数
vs にも宣言が必要です。同様の手順でソースコードの先頭に宣言を追加します。
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 14/17
Option String はデフォルトの状態です。Logical Name には先程の NI-MAXで設定した
"mySupply"を指定します。そして Code | Insert Function Call メニュー(又は Ctrl+I)選
択して、IviDCPwr_InitWithOptions 関数の呼び出しコードをソースコード(Ex02.c)に
挿入します。
Figure 5-8 Initialize With Options Function Panel
同様に Select Function Panel ダイアログから Close を選択して Closeファンクション・パネ
ルを表示します。ここでは Instrument Handle に vi とタイプし、Status には vs とタイ
プします。そして Code | Insert Function Call メニュー選択して、IviDCPwr_close 関
数の呼び出しコードをソースコード(Ex02.c)に挿入します。
Figure 5-9 Close Function Panel
この時点で Cソースコードは下記のようになっています。
static ViStatus vs;
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 15/17
static ViSession vi; vs = IviDCPwr_InitWithOptions ("mySupply", VI_TRUE, VI_TRUE, "Simulate=0,RangeCheck=1,QueryInstrStatus=0,Cache=1", &vi);
vs = IviDCPwr_close (vi);
しかしこれでは実行可能プログラムとしての形になっていないので、全体を main 関数で囲
み、クラス・ドライバのインクルード・ファイルの読み込み指定を記述します。更に vi と
vs の変数宣言を追加します。最後に InitWithOptions と close の呼び出しの間に、電
圧や電流を設定する関数と出力 ON/OFF制御を行う関数呼び出しコードも追加してみます。
ソースコードはソースコード・エディタに直接入力してもかまいません。
#include static ViSession vi = 0; static ViStatus vs = 0; void main() { vs = IviDCPwr_InitWithOptions ("mySupply", VI_TRUE, VI_TRUE, " Simulate=0,RangeCheck=1,QueryInstrStatus=0,Cache=1", &vi); vs = IviDCPwr_ConfigureVoltageLevel (vi, "Track_A", 20); vs = IviDCPwr_ConfigureCurrentLimit (vi, "Track_A", IVIDCPWR_VAL_CURRENT_REGULATE, 2.0); vs = IviDCPwr_ConfigureOutputEnabled (vi, "Track_A", 1); vs = IviDCPwr_close (vi);
}
プロジェクトのビルド
Build | Create Debuggable Executable メニューを選択し、プロジェクトをビルドして
みてください。特にエラーがなければ直ぐにビルドは完了します。
6- 解説
6-1 クラス・ドライバ・セッションの開始
IviDCPwrクラス・ドライバでのセッションの開始には IviDCPwr_InitWithOptions 関数
を使用します。関数名に付く IviDCPwr_というプレフィックスは IviDCPwrクラス・ドライ
バ固有のものです。クラス・ドライバを利用したこのプログラムには、kiwpx(弊社製 PWX
シリーズ直流電源)や AgN57xx(Agilent社製 N5700シリーズ直流電源)のような特定機種の計
測器ドライバへの依存が一切無い事に注意してください。
vs = IviDCPwr_InitWithOptions ("mySupply", VI_TRUE, VI_TRUE,
"Simulate=0,RangeCheck=1,QueryInstrStatus=1,Cache=1", &vi);
クラス・ドライバは通常の計測器ドライバとは異なり、IviDCPwr_InitWithOptions 関
数に直接 VISAアドレスを渡すことはできません。ここでは NI-MAXのロジカル・ネームに
指定した"mySupply"を指定します。クラス・ドライバはこのロジカル・ネームを頼りに適
切な計測器ドライバ DLL(Software Module)や VISAアドレス(Hardware Asset)を探し当て、最
終的に kipwx_InitWithOption を間接的に呼び出します。
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 16/17
OptionString パラメータに渡す内容(Cache、Range Check、Record Coercions、
Interchange Check、Query Instrument Status、及び Driver Setup文字列)はスペシフィッ
ク・ドライバを直接使用する場合と同じですが、省略された場合のデフォルト値が異なりま
す。スペシフィック・ドライバを直接使用する場合のデフォルトは IVI仕様によって定義さ
れた値になりますが、クラス・ドライバを使用する場合のデフォルトは IVIコンフィグレー
ション・ストアの Driver Session で指定された値です。何れの場合も、
InitWithOptions 関数の OptionString パラメータで明示的に指定されればそれが最優
先になります。
6-2 チャンネルへのアクセス
IVI計測器ドライバでは一般に、電源装置やオシロスコープなどの計測器の場合、複数のチ
ャンネルが装備されている事を前提に設計されています。従って、計測器のパネル設定に関
する操作を行うドライバ関数は、第 2パラメータにチャンネルを指定するケースが多く見ら
れます。
例: vs = IviDCPwr_ConfigureVoltageLevel( vi, "Output0", 20.0);
この例ではクラス・ドライバを使用していますが、チャンネル名には"Output0"という特
定の計測器ドライバ(この場合は kipwxドライバ)でのみ使用可能な名前を指定しています。
この指定方法でも計測器の制御を行うことはできますが、特定機種の計測器ドライバに依存
した名前を使用するとインターチェンジャビリティを損ないます。例えば AgN57xx計測器ド
ライバで有効なチャンネル名は"Output1"です。
先の NI-MAXによる IVIコンフィグレーションでは、バーチャル・ネームとして"Track_A"
という名前を追加し、それが"Output0"というフィジカルネームに変換されるように設定
しました。従ってここでは、チャンネル名にバーチャル・ネームを使うことができます。
vs = IviDCPwr_ConfigureVoltageLevel( vi, "Track_A", 20.0);
計測器ドライバを交換した場合は、DriverSessionで設定した Hardware(計測器の接続先
VISAアドレス)、Software(使用する計測器ドライバ)、Physical Names(仮想的なチャンネル
名のマップ先物理名)をアプリケーション自身ではなく IVIコンフィグレーションを変えるこ
とで動作を継続させることが出来ます。
Notes:
IVIコンフィグレーションの設定情報は、C:/ProgramData/IVI Foundation/IVI/
IviConfigurationStore.xmlに保存されています。この XMLファイルを手作業で編集しないで下さ
い。
IVIコンフィグレーションは、同一 PC内の全ての 32bit/64bit計測アプリ及び全てのログオンユー
ザで共有されます。
6-3 セッションのクローズ
計測器ドライバによるセッションをクローズするには、IviDCPwr_close 関数を使います。
vs = IviDCPwr_close (vi);
-
IVI 計測器ドライバ・プログラミング・ガイド
©2012 KIKUSUI ELECTRONICS CORP. All Rights Reserved. Page 17/17
6-4 計測器の交換
これまでの例では、仮想インストルメントのコンフィグレーションとして kipwx計測器ドラ
イバを使うように設定しましたが、ここで計測器を例えば AgN57xxドライバでホストされる
もの(Agilent N5700シリーズ直流電源)に交換するとどうなるでしょう。その場合には、アプ
リケーションを再度コンパイル・リンクする必要はありませんが、"mySupply"という IVIロ
ジカル・ネーム(仮想インストルメント)のコンフィグレーション内容を変更する必要があり
ます。
変更しなければならないコンフィグレーションは基本的には、
Driver Sessionタブにある Software Moduleの変更(kipwxAgN57xx)
Virtual Namesの展開先マップ変更(Output0Output1)
Hardware Assetタブにある IO Resource Descriptor の変更(交換後の接続先 VISAアドレ
スへ)
という具合になります。コンフィグレーションが正しく設定されれば、上記のサンプルは再
度コンパイル・リンクをせずにそのまま交換後の計測器でも動作します。
Notes:
IVIクラス・ドライバを利用したインターチェンジャビリティ機能は、計測器交換前後での動作を
保証するわけではありません。交換後のシステムが正常に機能するかどうか十分に検証してから
運用して下さい。
IVI計測器ドライバ・プログラミング・ガイド 本ガイドブックに登場する製品名・会社名等は各社の商標または登録商標です。 ©2012 Kikusui Electronics Corp. All Rights Reserved.