2.2 サンプルプログラム
2.2.4 GPIB 機器制御 (標準版 DLL を使用した制御)
それでは、弊社GPIBボード (PCI-4302) のサンプルプログラムを確認していきま しょう。
本プログラムは、GPIBボード用ソフトウェアライブラリであるGPC-4301に格納さ れているサンプルプログラム (Visual Basic 6.0以前用) と同様の処理をVisual Basic .NET上で実現するものです。
本書ではGPIB機器制御の概要や、ボードの制御手順、外部機器との配線方法など の詳細手順は説明しません。
今回使用した環境は以下の通りです。
ボード PCI-4302
GPIBケーブル CAB-2220
GPIB接続機器 マルチメータ Agilent Technologies HP 34401A 他 Visual Basic 6.0 / GPIB機器制御
ソフトウェア GPC-4301 プロジェクト名 Ctrl_B2.vbp 格 納 先 フ ォ ル
ダ
<インストール先>
¥Interface¥GPC4301¥Smpl_DllStandard¥vb¥Ctrl_B2 Visual Basic .NET / GPIB機器制御
ソフトウェア BPC-0818 プロジェクト名 Ctrl_B2.vbproj 格納先フォルダ <インストール先>
¥Interface¥BPC0818¥ GPC4301¥samples_std¥vb¥Ctrl_B2 Visual Basic 6.0からVisual Basic .NETへの主な相違点は以下の通りです。
表 2-14 Visual Basic 6.0とVisual Basic .NETの主な相違点 Visual Basic 6.0 Visual Basic .NET 変数、関数 SetPrm、RecvBuffer、GpibSend関数、
GpibReceive関数。
変更点 固定長文字列を文字列型に変更。
送信処理変更。
受信処理変更。
詳細情報 なし ファイル名 Ctrl_B2.bas
CtrlSendForm.frm CtrlRecvForm.frm
Ctrl_B2.vb CtrlSendForm.vb CtrlRecvForm.vb ソースリスト List2-77,2-78,2-79 List2-78,2-80,2-82 1. Visual Studio .NETを起動します。
2. ファイル-開く-プロジェクトを選択し、プロジェクトファイルを開きます。
3. ソリューションエクスプローラから表2-14に示したファイル名を開きます。
4. 表2-14に示した各ソースリストにVisual Basic 6.0とVisual Basic .NETの違いを示 します。太字で記載した部分が変更点です。
固定長文字列を文字列String型に変更します。Visual Basic .NETは固定長文字列を サポートしません。
List 2-77 Visual Basic 6.0のCtrl_B2.bas内の固定長文字列定義 Public SetPrm As String * 128 ' パラメータ
Public RecvBuffer As String * 32 ' 受信バッファ
List 2-78 Visual Basic .NETのCtrl_B2.vb内の文字列定義 Public SetPrm As String ' パラメータ
Public RecvBuffer As String ' 受信バッファ
送信処理を次のように変更します。
送信データをString型のままGpibSend関数に指定します。
また、送信データを、コントロール配列で定義されたテキストボックスから取得 する処理を変更します。Visual Basic .NETは、コントロール配列をサポートしませ ん。
そのため、例では、TextBox型の配列TextBoxTblに、フォーム上の全てのTextBox コントロールを定義して、Forループ処理内で順番に処理しています。
List 2-79 Visual Basic 6.0のCtrlSendForm.frm内の送信処理 Private Sub CmdSend_Click()
Dim nRet As Long Dim szData As String Dim nLen As Long Dim i As Long
' 機器アドレステーブル設定 DevAdrsTbl(0) = DevAdrs DevAdrsTbl(1) = -1 ' データ送信 For i = 1 To 5
szData = TxtSendData(i).Text
szData = StrConv(szData, vbFromUnicode) nLen = LenB(szData)
If nLen = 0 Then Exit For
szData = StrConv(szData, vbUnicode)
nRet = GpibSend(nBoardNo, DevAdrsTbl(0), nLen, szData) If nRet Then Exit For
Next
List 2-80 Visual Basic .NETのCtrlSendForm.vb内の送信処理
Private Sub CmdSend_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdSend.Click
Dim nRet As Integer Dim szData As String Dim nLen As Integer Dim i As Integer
Dim TextBoxTbl() As TextBox = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5}
' 機器アドレステーブル設定 DevAdrsTbl(0) = DevAdrs DevAdrsTbl(1) = -1 ' データ送信
For i = 0 To (TextBoxTbl.Length - 1) szData = TextBoxTbl(i).Text nLen = szData.Length If nLen <> 0 Then
nRet = GpibSend(nBoardNo, DevAdrsTbl, nLen, szData) If nRet Then
Exit For End If End If Next
Call DsplyErrMessage(nRet) End Sub
受信処理を次のように変更します。
受信データを格納するString型の変数をGpibReceive関数に指定するように変更し ます。
GpibReceive関数の第2パラメータには、最大受信データ長を格納した変数を指定 します。
GpibReceive関数の第4パラメータ(受信データ格納先変数)にString型を指定し た場合、第2パラメータに指定されたデータ長分のByte配列を用意し、データ取 得後にString型へ変換されます。この処理の詳細については、GPC4301Std.vb内 のGpibReceive関数の定義をご確認ください。
List 2-81 Visual Basic 6.0のCtrlRecvForm.frm内の受信処理 Private Sub CmdRecv_Click()
Dim nRet As Long Dim nLen As Long
' 機器アドレステーブル設定 DevAdrsTbl(0) = DevAdrs DevAdrsTbl(1) = -1
' データ受信
Dim RecvLen As Long RecvLen = 64
nRet = GpibReceive(nBoardNo, DevAdrsTbl, RecvLen, RecvBuffer) If nRet Then
Call DsplyErrMessage(nRet) Unload CtrlRecvForm End If
Call DsplyErrMessage(nRet)
LblRecvData.Caption = Left(RecvBuffer, RecvLen) End Sub
List 2-82 Visual Basic .NETのCtrlRecvForm.vb内の受信処理
Private Sub CmdRecv_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdRecv.Click
Dim nRet As Integer Dim nLen As Integer
' 機器アドレステーブル設定 DevAdrsTbl(0) = DevAdrs DevAdrsTbl(1) = -1 ' データ受信
Dim RecvLen As Integer RecvLen = 64
nRet = GpibReceive(nBoardNo, DevAdrsTbl, RecvLen, RecvBuffer) If nRet Then
Call DsplyErrMessage(nRet) CtrlRecvForm.DefInstance.Close() End If
Call DsplyErrMessage(nRet) LblRecvData.Text = RecvBuffer End Sub