UNL
VC ¾ INT gp_myadr(void)
VB ¾ Function PCIGPIBAX.gpmyadr() As Long 書 式
VB.NET ¾ Function PCIGPIBAX.gpmyadr() As Integer
機 能 関数 gp_init(gpinit)で設定された REX-PCI20 の GPIB 機器アドレスを取得します。
プログラムで新たに REX-PCI20 の GPIB アドレスを知る必要が無い場合は、本関数を呼び 出す必要はありません。
引 数 なし
N 正常終了時、REX-PCI20 の GPIB 機器アドレスが返されます。
戻 値
-9 REX-PCI20 認識エラー
Page.38
その他の関数
VC ¾ VOID gp_wait(int WaitSecTime )
VB ¾ Sub PCIGPIBAX.gpwait(ByVal WaitSecTime As Long) 書 式
VB.NET ¾ Sub PCIGPIBAX.gpwait(ByVal WaitSecTime As Integer) 機 能 指定時間プログラムを停止させます。
引 数 WaitSecTime (IN) プログラムを停止する時間(秒単位で指定) 戻 値 なし
VC ¾ VOID gp_strtoflt(BYTE *bPoint, float *data) 書 式
VB ¾ Sub PCIGPIBAX.gpstrtoflt(ByVal bPoint As Integer, data As Single) VB.NET ¾ Sub PCIGPIBAX.gpstrtoflt(ByRef bPoint As Short, ByRef data As Single)
機 能 4 バイトのデータの格納するメモリへの BYTE 型ポインタを Single 型ポインタにキャスト します。(VC では、直接キャスト可能であるため、使用する必要はありません。)
bPoint (IN) 4 バイトデータを格納するポインタ 引 数
data (OUT) キャストした Single 型アドレス
戻 値 なし
補 足 (使用例)
VB: Dim Buf(4) As Integer Dim Data As Single
Buf(0)=&H52 Buf(1)=&H6 Buf(2)=&H9E Buf(3)=&H3F
Call PCIGPIBAX.gpstrtoflt(Buf(0), Data) ‘ 結果は Data =1.234568 となります。
VC ¾ VOID gp_strtodbl(BYTE *bPoint, double *data)
VB ¾ Sub PCIGPIBAX.gpstrtodbl(ByVal bPoint As Integer, data As Double) 書 式
VB.NET ¾ Sub PCIGPIBAX.gpstrtodbl(ByRef bPoint As Short, ByRef data As Double)
機 能 8 バイトのデータの格納するメモリへの BYTE 型ポインタを Double 型ポインタにキャスト します。(VC では、直接キャスト可能であるため、使用する必要はありません。)
bPoint (IN) 8 バイトデータを格納するポインタ 引 数
data (OUT) キャストした Double 型アドレス
戻 値 なし
補 足 (使用例)
VB: Dim Buf(8) As Integer Dim Data As Double
Buf(0)=&H1B Buf(1)=&HDE Buf(2)=&H83 Buf(3)=&H42 Buf(4)=&HCA Buf(5)=&HC0 Buf(6)=&HF3 Buf(7)=&H3F
Call PCIGPIBAX.gpstrtodbl(Buf(0), Data) ‘ 結果は Data =1.23456789 となります。
Page.40
補助関数
VC ¾ INT gp_srqCheck(void)
VB ¾ Function PCIGPIBAX.gpsrqCheck() As Long 書 式
VB.NET ¾ Function PCIGPIBAX.gpsrqCheck() As Integer 機 能 SRQ ラインの現在の状態を返します。
引 数 hUnit (IN) コンバータのハンドル(複数台接続時使用)
1 SRQ ラインが TRUE 0 SRQ ラインが FALSE 戻 値
-9 REX-PCI20 認識エラー
VC ¾ INT gp_findlstn(PCHAR adrs, INT adrsLen)
VB ¾ Function PCIGPIBAX.gpfindlstn(adrs As String, ByVal adrsLen As Long) As Long
書 式
VB.NET ¾ Function PCIGPIBAX.gpfindlstn(ByRef adrs As String, ByVal adrsLen As Integer) As Integer
機 能 GPIB バスに接続されているリスナ機器を検出し、GPIB アドレスを取得します。
adrs (OUT) GPIB アドレスを格納するバッファアドレス 引 数
adrsLen (IN) バッファのサイズ
0 リスナ未検出
-9 REX-PCI20 認識エラー 61 バッファオーバーフロー 戻 値
N リスナ検出台数
補 足 本関数では、取得した GPIB アドレスを ASCII データの形で adrs に格納します。取得した adrs を gp_wrt(), gp_red()等の第一引数でそのまま使用できます。
戻り値に 61 が返る場合は、確保するバッファ adrs を大きめに確保してください。
3-3. 製品付属サンプルプログラム解説
本製品には、GPIB インターフェースを持つ各種測定器の制御を行うアプリケーション作成の ためのサンプルプログラム(VisualC/C++, VisualBASIC)として、下記に掲げる測定器用のサンプ ルプログラムが付属しています。その他については、随時、弊社ホームページにて公開予定です。
■付属 CD-ROM
収録サンプルプログラムメーカー デバイス
岩通計測 デ ジ タ ル オ シ ロ ス コ ー プ (DS-8812) 、 ユ ニ バ ー サ ル カ ウ ン タ (SC-7201,SC-7205,SC-7206,SC-7207) 、 フ ァ ン ク シ ョ ン ジ ェ ネ レ ー タ (SG-4105,SG-4115) 、デジタルマルチメータ(VOAC-7520)
ヒューレットパッカード デジタルマルチメータ(HP3478A)、直流電圧源(E3631A)、ファンクションジ ェネレータ(33120A)
横河電機 デ ジ タ ル パ ワ ー メ ー タ (WT110E) 、 プ ロ グ ラ マ ブ ル 直 流 電 圧 ・ 電 流 源 (7651)、直流標準電圧・電流発生器(YEW2553)
アドバンテスト デジタルマルチメータ(R6552) アジレント・テクノロジー デジタルオシロスコープ(54846A) テクトロニクス デジタルオシロスコープ(TDS3054B) 菊水電子工業 電子負荷装置(PLZ164W)
鶴賀電機 抵抗計(3573/3574) 日置電機 パワーハイテスタ(3332)
※本製品に添付しますサンプルプログラムについてのご質問につきましては、弊社サポートセン ターまでお問い合わせください。なお、各機器の操作に関してのサポートは行うことはできません ので予めご了承ください。
Page.42
ここでは、代表例として
HP3478A
のサンプルプログラムについて説明します。その他のサンプ ルプログラムの詳細については、Readmeもしくはプログラムソースコードを参照ください。HP3478A
制御プログラムHP3478A
制御プログラムには、1)
ポーリングモード(割り込みを使用せず、SRQが来るのをポ ーリングしデータを取得するプログラム)と2)
割り込みモード(SRQの検知に割り込みを使用し、データを取得するプログラム)の
2
つを用意しています。1)
ポーリングモード① 最初に機器側で設定されている
GPIB
機器 アドレスをエディットボックスに入力しま す。(初期値は3)
② 初期化ボタンを押して
DLL
ライブラリの初 期化を行います。③ 計測開始ボタンを押して
10
秒間SRQ
を監 視し、SRQ 信号がきたときの計測データを 表示します。2)
割り込みモード① 最初に機器側で設定されている
GPIB
機器 アドレスをエディットボックスに入力しま す。(初期値は3)
② 初期化ボタンを押して
DLL
ライブラリの初 期化を行います。③ 計測開始ボタンを押して
SRQ
待ちになり、SRQ
信号がきたときに計測データを表示し ます。計測停止ボタンを押すと、SRQ 待ち を止めます。á VisualCサンプルプログラム抜粋(ポーリング/割り込みモード共通)
初期化ボタンを押したときの処理・・・GPIBコントローラの初期化を行った後、続けて
HP3478A
に対しクリアコマンド、測定用コマンドを送信します。void Cmd_OnCmdGpInit ( HWND hwnd ) {
INT GpStatus;
CHAR szCommand[] = "H0KM01";
// GPIBコントローラ初期化
GpStatus = gp_init( MyGPIBAdrs, 0, 0 );
if( GpStatus != 0 ) {
sprintf( szBuf, "gp_init()初期化エラー [ERROR:%d]", GpStatus );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
return;
}
// IFCラインをTRUEにする gp_cli();
// RENラインをTRUEにする gp_ren();
// HP3478Aで設定されているGPIB機器アドレス取得
GetDlgItemText( hwnd, IDE_3478GPIBADRS, szHP3478A, sizeof(szHP3478A) );
// GPIBバスタイムアウト時間を3秒に設定
gp_tmout(3);
// SDCコマンド送出
GpStatus = gp_clr( szHP3478A );
if ( GpStatus != 0 ) {
sprintf( szBuf, "gp_clr()エラー [ERROR:%d]", GpStatus );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
return;
}
// LLOコマンド送出 gp_llo();
// HP3478A GPIBコマンド送信
GpStatus = gp_wrt( szHP3478A, szCommand );
if ( GpStatus != 0 ) {
sprintf( szBuf, "gp_wrt()エラー [ERROR:%d]", GpStatus );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
return;
}
SetDlgItemText( hwnd, IDS_STATUS, "初期化正常終了" );
}
Page.44
á VisualCサンプルプログラム抜粋(ポーリングモード)
計測開始ボタンを押したときの処理・・・HP3478Aに対してトリガコマンドを送ることで測定が 開始され、SRQを指定時間待った後、シリアルポールを行い、測定データを読み込みます。
void Cmd_OnCmdStart ( HWND hwnd ) {
INT GpStatus;
char RcvData[256]; // 受信バッファ
BYTE StatusByte[16]; // ステータスバイト格納用バッファ // トリガーコマンド実行
GpStatus = gp_trg( szHP3478A );
if ( GpStatus != 0 ) {
sprintf( szBuf, "gp_trg()エラー [ERROR:%d]", GpStatus );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
return;
}
// 指定時間SRQを待つ GpStatus = gp_wsrq( 10 );
if ( GpStatus != 0 ) {
sprintf( szBuf, "gp_wsrq()エラー [ERROR:%d]", GpStatus );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
return;
}
// シリアルポールを実行しステータスバイトを受信
GpStatus = gp_rds( szHP3478A, StatusByte );
if( GpStatus != 0 ) {
sprintf( szBuf,"ステータスバイトリードgp_rds()エラー [ERROR:%d]", GpStatus );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
return;
}
sprintf( szBuf,"%x", StatusByte[0] );
SetDlgItemText( hwnd, IDS_SBYTE, szBuf );
// GPIBバスからデータをリード
memset( RcvData, 0x00, sizeof(RcvData) );
GpStatus = gp_red( szHP3478A, RcvData, sizeof(RcvData) );
if( GpStatus != 0 ) {
sprintf( szBuf,"gp_red()エラー [ERROR:%d]", GpStatus );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
return;
}
// 測定値を表示
SetDlgItemText( hwnd, IDS_READVAL, RcvData );
á VisualCサンプルプログラム抜粋(割り込みモード)
計測開始ボタンを押したときの処理・・・HP3478A からの
SRQ
検知に割り込みを使用します。SRQ
を検知した場合、ユーザ定義メッセージ(次頁)によってアプリケーションに知らされます。void Cmd_OnCmdStart ( HWND hwnd ) {
INT GpStatus;
// シリアルポール割り込み実行
GpStatus = gp_srq( hwnd, ENABLE_SRQ_INTERRUPT );
if ( GpStatus != 0 ) {
sprintf( szBuf,"gp_srq()...エラー [ERROR:%d]", GpStatus );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
return;
}
// トリガーコマンド実行
GpStatus = gp_trg( szHP3478A );
if ( GpStatus != 0 ) {
sprintf( szBuf, "gp_trg()エラー [ERROR:%d]", GpStatus );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
return;
} }
Page.46
á VisualCサンプルプログラム抜粋(割り込みモード)
ユーザ定義メッセージの処理・・・SRQを検知した場合、wParamにEVENT_INTERRUPTがセッ トされます。シリアルポール実行後、測定データを読み込みます。
void Dlg_OnUserDefineMessage (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
INT GpStatus;
char RcvData[256]; // 受信バッファ
BYTE StatusByte[16]; // ステータスバイト格納用バッファ switch(wParam)
{
case EVENT_INTERRUPT: // SRQ割り込みが発生した場合 sprintf( szBuf,"SRQイベント発生" );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
// シリアルポールを実行しステータスバイトを受信
GpStatus = gp_rds( szHP3478A, StatusByte );
if( GpStatus != 0 ) {
sprintf( szBuf,"ステータスバイトリードgp_rds()エラー [ERROR:%d]", GpStatus );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
return;
}
sprintf( szBuf,"%x", StatusByte[0] );
SetDlgItemText( hwnd, IDS_SBYTE, szBuf );
// GPIBバスからデータをリード
memset( RcvData, 0x00, sizeof(RcvData) );
GpStatus = gp_red( szHP3478A, RcvData, sizeof(RcvData) );
if( GpStatus != 0 ) {
sprintf( szBuf,"gp_red()エラー [ERROR:%d]", GpStatus );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
return;
}
// 測定値を表示
SetDlgItemText( hwnd, IDS_READVAL, RcvData );
gp_srq( hwnd, DISABLE_SRQ_INTERRUPT );
break;
case STOP_INTERRUPT: // SRQ待ち状態を終了する場合 sprintf( szBuf,"SRQ待ち終了" );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
break;
case ERROR_INTERRUPT: // 予期せぬエラー sprintf( szBuf,"予期せぬエラー" );
SetDlgItemText( hwnd, IDS_STATUS, szBuf );
break;
} // End of switch(wParam)
á VisualBASICサンプルプログラム抜粋(ポーリング/割り込みモード共通)
初期化ボタンを押したときの処理・・・GPIBコントローラの初期化を行った後、続けて
HP3478A
に対しクリアコマンド、測定用コマンドを送信します。Private Sub INIT_Click() GpAdrs = GpibAdrs.Text ' GPIBコントローラ初期化
Status = PCIGPIBAX.gpinit(MyGpibAdrs, 0, 0) If Status <> 0 Then
ERROR.Text = "PCIGPIBAX.gpinit()エラー :" & Status Exit Sub
End If
' IFCラインをTRUEにする PCIGPIBAX.gpcli
' RENラインをTRUEにする PCIGPIBAX.gpren
' セレクテッドデバイスクリアコマンド送出
Status = PCIGPIBAX.gpclr(GpAdrs) If Status <> 0 Then
ERROR.Text = "PCIGPIBAX.gpclr()エラー :" & Status Exit Sub
End If
Status = PCIGPIBAX.gpllo() If Status <> 0 Then
ERROR.Text = "PCIGPIBAX.gpllo()エラー :" & Status Exit Sub
End If
' HP3478A GPIBコマンド送信
Status = PCIGPIBAX.gpwrt(GpAdrs, "H0KM01") If Status <> 0 Then
ERROR.Text = "PCIGPIBAX.gpwrt()エラー :" & Status Exit Sub
End If
ERROR.Text = "初期化正常終了"
End Sub
Page.48
á VisualBASICサンプルプログラム抜粋(ポーリングモード)
計測開始ボタンを押したときの処理・・・HP3478Aに対してトリガコマンドを送ることで測定が 開始され、SRQを指定時間待った後、シリアルポールを行い、測定データを読み込みます。
Private Sub OK_Click() Dim Code(8) As Integer ' トリガーコマンド実行
Status = PCIGPIBAX.gptrg(GpAdrs) If Status <> 0 Then
ERROR.Text = "PCIGPIBAX.gptrg()エラー :" & Status Exit Sub
End If
' 指定時間SRQを待つ
Status = PCIGPIBAX.gpwsrq(10) If Status <> 0 Then
ERROR.Text = "PCIGPIBAX.gpwsrq()エラー :" & Status Exit Sub
End If
' シリアルポールを実行しステータスバイトを受信
Status = PCIGPIBAX.gprds(GpAdrs, Code(0)) If Status <> 0 Then
ERROR.Text = "PCIGPIBAX.gprds()エラー :" & Status Exit Sub
End If
SBYTE.Text = Hex(Code(0)) ' GPIBバスからデータをリード szBuf = String(256, &H0)
Status = PCIGPIBAX.gpred(GpAdrs, szBuf, Len(szBuf)) If Status <> 0 Then
ERROR.Text = "PCIGPIBAX.gpred()エラー :" & Status Exit Sub
End If
' 測定値を表示
READVAL.Text = szBuf End Sub
á VisualBASICサンプルプログラム抜粋(割り込みモード)
計測開始ボタンを押したときの処理・・・HP3478A からの
SRQ
検知に割り込みを使用します。SRQ
を検知した場合、ユーザ定義メッセージ(次頁)によってアプリケーションに知らされます。Private Sub OK_Click() ' シリアルポール割り込み実行
Status = PCIGPIBAX.gpsrq(0, ENABLE_SRQ_INTERRUPT) If Status <> 0 Then
ERROR.Text = "PCIGPIBAX.gpsrq()エラー :" & Status Exit Sub
End If
' トリガーコマンド実行
Status = PCIGPIBAX.gptrg(GpAdrs) If Status <> 0 Then
ERROR.Text = "PCIGPIBAX.gptrg()エラー :" & Status Exit Sub
End If End Sub
Page.50
á VisualBASICサンプルプログラム抜粋(割り込みモード)
ユーザ定義メッセージの処理・・・SRQを検知した場合、wParamにEVENT_INTERRUPTがセッ トされます。シリアルポール実行後、測定データを読み込みます。
Private Sub PCIGPIBAX_OnEventMsg(ByVal wParam As Long, ByVal lParam As Long) ' メッセージの判定
Select Case wParam
Case EVENT_INTERRUPT 'SRQ割り込みが発生した場合
ERROR.Text = "SRQイベント発生"
Data_Read ‘ データの読込み
Call PCIGPIBAX.gpsrq(0, DISABLE_SRQ_INTERRUPT) Case STOP_INTERRUPT 'SRQ待ち状態を終了する場合 ERROR.Text = "SRQ待ち終了"
Case ERROR_INTERRUPT GP_ERROR '予期しないエラー ERROR.Text = "予期しないエラー"
End Select End Sub
Sub Data_Read()
Dim Code(8) As Integer
Dim szBuf As String 'メッセージ格納用バッファ ' シリアルポールを実行しステータスバイトを受信
Status = PCIGPIBAX.gprds(GpAdrs, Code(0)) If Status <> 0 Then
ERROR.Text = "PCIGPIBAX.gprds()エラー :" & Status Exit Sub
End If
SBYTE.Text = Hex(Code(0)) ' GPIBバスからデータをリード szBuf = String(256, &H0)
Status = PCIGPIBAX.gpred(GpAdrs, szBuf, Len(szBuf)) If Status <> 0 Then
ERROR.Text = "PCIGPIBAX.gpred()エラー :" & Status Exit Sub
End If
' 測定値を表示
READVAL.Text = szBuf End Sub
製品付属
CD-ROM
のサンプルプログラムをハードディスクにコピーして使用する場合、ファイル 属性が「読み取り専用」になっています。ファイルの編集を行う場合には、ファイルのプロパティで「読み取り専用」となっている属性を解除してください。
サンプルプログラムの使用について
Page.52