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

GPIB 機器制御 (標準版 DLL を使用した制御)

ドキュメント内 Microsoft Visual Studio .NET移行ガイド (ページ 51-56)

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 .NETCtrlRecvForm.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

ドキュメント内 Microsoft Visual Studio .NET移行ガイド (ページ 51-56)