Keysightの測定機をUSB接続しVB.netで制御するクラス

サンプルソースを元にクラス化してみました。

#使用イメージ
![SnapCrab_NoName_2015-11-19_16-40-3_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/10836/a8d1c942-3dff-768b-764b-a67e2d236d61.png)

例　*IDN?コマンドを送って応答を読む

#準備
1.IO Libraries Suite をダウンロード
以下よりダウンロードしインストールする。
http://www.keysight.com/ja/pd-1985909/io-libraries-suite?nid=-33330.977662.00&cc=JP&lc=jpn&cmpid=zzfindiolib
2.VB2010で新しいプロジェクトを作成し、「プロジェクト」-「参照の追加」でVISA COMを追加する。
![SnapCrab_NoName_2015-11-19_16-50-23_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/10836/d794dca6-b1bd-da31-c6b9-827a933fc3ae.png)

#クラスファイルのソース
以下のクラスをClsUSBDevという名前で追加する

```vbnet
''' <summary>
''' Keysightの測定機をUSBで操作するためのクラス
''' 要 IO Libraries Suite
''' 
''' </summary>
Public Class ClsUSBDev
    ' リソースの宣言
    Dim RM As Ivi.Visa.Interop.ResourceManager ' VISA COM リソースマネージャ
    Dim Dev As Ivi.Visa.Interop.FormattedIO488 ' VISA COM フォーマッテッドIO
    ''' <summary>
    ''' VISAアドレスを指定し測定機を開く
    ''' </summary>
    ''' <param name="VISAAddress">VISAアドレス</param>
    Public Sub open(VISAAddress As String)
        ' VISA リソースの作成
        ' VISA リソースの作成で例外が発生すると処理を抜ける
        Try
            RM = New Ivi.Visa.Interop.ResourceManager
            Dev = New Ivi.Visa.Interop.FormattedIO488
            Dev.IO = RM.Open(VISAAddress)  ' 測定機をオープン
            ' Dev.IO.Timeout = 10000  ' VISA タイムアウト 10秒に設定
            ' Dev.IO.TerminationCharacterEnabled = True  ' TCPソケットで接続する場合
        Catch ex As Exception
            MsgBox("ERROR: VISA COM オブジェクト作成失敗。 " & ex.Message)
            MsgBox("VISA COMオブジェクトの作成が失敗しました。" & ex.Message)
            Exit Sub
        End Try
        MsgBox("VISA COM オープン" & VISAAddress & " 成功")
    End Sub

    ''' <summary>
    ''' 測定機へコマンドを送信
    ''' </summary>
    ''' <param name="cmd">コマンド</param>
    Public Sub output(cmd As String)
        Dev.WriteString(cmd)
    End Sub

    ''' <summary>
    ''' 測定機からの応答を受信
    ''' </summary>
    Public Function input() As String
        Try
            Return Dev.ReadString()
        Catch ex As Exception
            MsgBox("ERROR: " & ex.Message)
            Return ""
            Exit Function
        End Try
    End Function

    ''' <summary>
    ''' 終了処理
    ''' </summary>
    Protected Overrides Sub Finalize()
        Dev.IO.Close()
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Dev)
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(RM)
    End Sub

End Class
```

#クラスの呼び出し側の例
Form1に以下を追加する。
1.Visaアドレス用にTxtVisaAddress　テキストボックスと BtnOpenボタンを置く
2.送信メッセージ用にTxtTxテキストボックスと BtnTxボタンを置く
3.受信メッセージ用にTxtRxテキストボックスと BtnRxボタンを置く
4.Form1の中のソースを以下に変更

```vb.net
Public Class Form1

    Dim FC1 As ClsUSBDev

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        FC1 = New ClsUSBDev
    End Sub

    Private Sub BtnOpen_Click(sender As System.Object, e As System.EventArgs) Handles BtnOpen.Click
        FC1.open(TxtVisaAddress.Text)
    End Sub

    Private Sub BtnTx_Click(sender As System.Object, e As System.EventArgs) Handles BtnTx.Click
        FC1.output(TxtTx.Text)
    End Sub

    Private Sub BtnRx_Click(sender As System.Object, e As System.EventArgs) Handles BtnRx.Click
        TxtRx.Text = TxtRx.Text & FC1.input & vbCrLf
    End Sub
End Class
```

#使い方
1.IO Libraries Suiteをインストールしたときに、「Keysight Connection Expert」というアプリがインストールされるので、それを起動する。
2.「測定機　例33220A」が表示されれば接続しているので、右側の「VISA Address」をコピーする 
　例　USB0::0x0957::0x0407::MY44034395::0::INSTR

![SnapCrab_NoName_2015-11-19_17-2-22_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/10836/2566f671-e988-3147-53a2-691d9ccd8a2e.png)

3.TxtVisaAddress　に上記のアドレス（USB0::0x0957::0x0407::MY44034395::0::INSTR）をコピーしBtnOpenをクリック
4.TxtTxに「*IDN?」を入れBtnTxをクリック
5.BtnRxをクリック。TxtRxに測定機からの応答が入ればOK。

![SnapCrab_NoName_2015-11-19_16-40-3_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/10836/a8d1c942-3dff-768b-764b-a67e2d236d61.png)