• 検索結果がありません。

GTLLA

ドキュメント内 REX-PCI20 ユーザーズマニュアル (ページ 43-58)

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

ドキュメント内 REX-PCI20 ユーザーズマニュアル (ページ 43-58)

関連したドキュメント