GP-IBによるPCへの測定データ転送 (2006/08/21)
周波数領域の測定は,主にスペクトルアナライザAgilent 8564ECを用いますが,パソコンへのデータ転送にはGP-IBインターフェースを利用する必要があります.しかし,パソコンへ転送するためのGP-IBコントローラやそれを制御するソフトウェアは,ものによっては,合わせて十万円を越えることがあります.複数の測定機器を遠隔制御するには見合った価格になるかも知れませんが,今回はスペクトルアナライザの測定データの転送をしたいだけですので,そこまでの金額はかけられません.
GP-IBに関して取り扱っている掲示板などを見ていたら,GP-IBコントローラの製作キットが低価格でアクティブセルにて販売されていることが分かりました.さらに,Microsoft Visual Basicなどを用いて,このGP-IBキットを含めて各社のGPIBコントローラを共通のプログラムで記述できる共通化モジュールEasyGPIBがフリーで提供されていました.そこで,早速,GP-IBコントローラの製作キット"GP232+Uキット"(価格は約15,000円)を購入しました.また,購入することで最新のバージョンのEasyGPIBがダウンロードすることができるようになります.下の写真は,製作したGP-IBコントローラ"GP232"の写真です.
パソコンへのデータ転送のプログラムは,Microsoft Visual Basic 6.0を使用しました.プログラミングには,次の書籍を参考にしました.
すぐに役に立つVisual Basicを活用した計測制御入門, 熊谷秀樹 編著, 日刊工業新聞社今回の Visual Basic のプロジェクトファイルをまとめたアーカイブです [8564EC データ転送プログラム].使用していただくのは自由ですが,説明書はつけていませんし,全くメンテを行っていませんので,注意して下さい.なお,このプログラムを動かすためには,EasyGPIB共通化モジュールが必要です.一番下にこのプログラムのソースを貼り付けておきます.
ここで,下の写真のスペクトルアナライザAgilent 8564ECの基準信号(300MHz, -10dBmの正弦信号)をパソコンに転送してみます.
データを転送するまでの操作は全てスペクトルアナライザ側で行います.ここでは,中心周波数を300MHz,周波数スパンを100MHz,参照レベルを0dBm,周波数分解能(RBW)を1MHzとしています.さて,作成したプログラムのバイナリ"8564ec_transfer.exe"を実行しますと,次のウィンドウが立ち上がります.
機器側のGP-IBアドレスを指定して(デフォルトは18),"Card Open"をクリックすれば,測定機器と接続できます.接続すると,次のように,GP-IBコントローラの情報が表示されます.
ここで,"データ保存"をクリックして,ファイル名を指定して保存すれば,CSV形式で測定データを保存できます.ここでは,"cal_output.csv"として保存しています.
下は,"cal_output.csv"をMicrosoft Office Excelにて,表示したものです.測定条件の後に,測定した周波数と電力のデータ列があります.
転送した測定データから作成したグラフは次の通りです.
8564ec_transfer のソースです.
Option Explicit
' 最大の測定ポイント番号 MAX_PT
' 測定ポイントの範囲は,0 - MAX_PT.
Private Const MAX_PT As Integer = 600
' フォームイニシャライズ処理
Private Sub Form_Initialize()
Dim i As Integer
' 測定器のイニシャライズ
For i = 0 To 30
cmbEquipAddress.AddItem (i)
Next i
cmbEquipAddress.ListIndex = 18 ' 測定器アドレス 18
' エラープロパティのイニシャライズ
txtErrorNumber.Text = eg.ErrorNumber
txtErrorHold.Text = eg.ErrorHold
txtLocalErrorNumber = eg.LocalErrorNumber
' Enabled のイニシャライズ
Call CmdEnabledBeforeCardOpen
End Sub
' フォーム終了処理
Private Sub Form_Terminate()
If cmdCardClose.Enabled Then
eg.CardCLose
End If
End Sub
' カードオープンクリックイベント
Private Sub cmdCardOpen_Click()
Dim Addr As Integer
Addr = Val(cmbEquipAddress.Text)
' カードオープン
eg.CardOpen: Call ReadErrors
If eg.ErrorNumber <> 0 Then Exit Sub
' 測定器アドレスのチェック
If (Addr <= 0) Or (Addr > 30) Then
MsgBox "8564ECのアドレス設定が正しくありません"
Exit Sub
End If
' 測定器アドレスの設定
eg.ActiveAddress = Addr
Call ReadErrors
If eg.ErrorNumber <> 0 Then Exit Sub
' 測定器アドレスの表示
txtCardAddress.Text = eg.ActiveAddress
Call ReadErrors
If eg.ErrorNumber <> 0 Then Exit Sub
' デリミタの設定と表示
eg.Delimiter = eg.DELIMs.Eoi
Call ReadErrors
If eg.ErrorNumber <> 0 Then Exit Sub
txtCardDelimiter.Text = eg.Delimiter
Call ReadErrors
If eg.ErrorNumber <> 0 Then Exit Sub
' タイムアウトの設定と表示
eg.TimeOut = 5
Call ReadErrors
If eg.ErrorNumber <> 0 Then Exit Sub
txtCardTimeout.Text = eg.TimeOut
Call ReadErrors
If eg.ErrorNumber <> 0 Then Exit Sub
' EasyGPIB バージョンの表示
txtCardVersion.Text = eg.Version
Call ReadErrors
If eg.ErrorNumber <> 0 Then Exit Sub
' 正常終了
Call CmdEnabledAfterCardOpen
End Sub
' カードクローズクリックイベント
Private Sub cmdCardClose_Click()
eg.CardCLose
Call ReadErrors
If eg.ErrorNumber <> 0 Then Exit Sub
Call CmdEnabledBeforeCardOpen
End Sub
' データ保存クリックイベント
Private Sub cmdEquipSave_Click()
Dim Fa As Double ' 開始周波数 [Hz]
Dim Fb As Double ' 終了周波数 [Hz]
Dim Rl As Double ' 参照レベル [dBm]
Dim Rb As Double ' 分解能帯域幅 [Hz]
Dim Vb As Double ' ビデオ帯域幅 [Hz]
Dim Freq(MAX_PT) As String ' 測定周波数 [Hz]
Dim Pwr() As String ' パワー [dBm]
Dim FileName As String ' ファイル名
Dim Ans As Integer ' メッセージボックスの回答
Dim i As Integer
' 初期化
On Error Resume Next
Call CmdEnabledInSave
' データの読み取り
'eg.AsciiLine = "SNGLS; TS;" ' シングルスイープ
If eg.ErrorNumber <> 0 Then GoTo ErrHandler
eg.AsciiLine = "FA?;": Fa = eg.AsciiLine
eg.AsciiLine = "FB?;": Fb = eg.AsciiLine
eg.AsciiLine = "RL?;": Rl = eg.AsciiLine
eg.AsciiLine = "RB?;": Rb = eg.AsciiLine
eg.AsciiLine = "VB?;": Vb = eg.AsciiLine
If eg.ErrorNumber <> 0 Then GoTo ErrHandler
eg.AsciiLine = "TDF P; TRA?;"
If eg.ErrorNumber <> 0 Then GoTo ErrHandler
Pwr() = Split(eg.AsciiLine, ",")
If eg.ErrorNumber <> 0 Then GoTo ErrHandler
For i = 0 To MAX_PT
Freq(i) = Format(Fa + i * (Fb - Fa) / MAX_PT, "0.000000E+00")
Next i
' ファイルへの保存
With dialogEquipSave
.CancelError = True
.Filter = "CSVファイル(*.csv)|*.csv|" & "すべてのファイル(*.*)|*.*|"
.FilterIndex = 1
.DefaultExt = "csv"
.ShowSave
FileName = .FileName
End With
If Err.Number = cdlCancel Then GoTo ErrHandler
If Dir(FileName) <> "" Then Ans = MsgBox("上書きしますか?", vbYesNo, "確認")
If Ans = vbNo Then GoTo ErrHandler
Open FileName For Output As #1
Print #1, "# Start Frequency: " & Format(Fa, "0.00E+00") & " Hz"
Print #1, "# Stop Frequency: " & Format(Fb, "0.00E+00") & " Hz"
Print #1, "# Reference Level: " & Format(Rl, "0.00") & " dBm"
Print #1, "# Resolution Bandwidth: " & Format(Rb, "0.00E+00") & " Hz"
Print #1, "# Video Bandwidth: " & Format(Vb, "0.00E+00") & " Hz"
Print #1, "#1:Frequency [Hz] 2:Power [dBm]"
For i = 0 To MAX_PT
Print #1, Freq(i) & ", " & Pwr(i)
Next i
Close #1
' 正常終了
Call CmdEnabledOutSave
Exit Sub
ErrHandler:
Call ReadErrors
Call CmdEnabledOutSave
End Sub
' エラー更新クリックイベント
Private Sub cmdErrorReload_Click()
Call ReadErrors
End Sub
' エラークリアクリックイベント
Private Sub cmdErrorClear_Click()
eg.ErrorNumber = 0
eg.ErrorHold = 0
eg.LocalErrorNumber = 0
Call ReadErrors
End Sub
' エラープロパティを読み出してテキストボックスに書き込む
Private Sub ReadErrors()
txtErrorNumber.Text = eg.ErrorNumber
txtErrorHold.Text = eg.ErrorHold
txtErrorHoldText.Text = eg.ErrorHoldText
txtLocalErrorNumber.Text = eg.LocalErrorNumber
txtLocalErrorText.Text = eg.LocalErrorText
End Sub
' CardOpen 前の各コマンドの Enabled 属性
Private Sub CmdEnabledBeforeCardOpen()
cmdCardOpen.Enabled = True
cmdCardClose.Enabled = False
cmdEquipSave.Enabled = False
cmdErrorReload.Enabled = False
cmdErrorClear.Enabled = False
End Sub
' CardOpen 後の各コマンドの Enabled 属性
Private Sub CmdEnabledAfterCardOpen()
cmdCardOpen.Enabled = False
cmdCardClose.Enabled = True
cmdEquipSave.Enabled = True
cmdErrorReload.Enabled = True
cmdErrorClear.Enabled = True
End Sub
' データ保存中の Enabled 属性
Private Sub CmdEnabledInSave()
cmdCardClose.Enabled = False
cmdEquipSave.Enabled = False
cmdErrorReload.Enabled = False
cmdErrorClear.Enabled = False
End Sub
' データ保存後の Enabled 属性
Private Sub CmdEnabledOutSave()
cmdCardClose.Enabled = True
cmdEquipSave.Enabled = True
cmdErrorReload.Enabled = True
cmdErrorClear.Enabled = True
End Sub
梅原 大祐 / UMEHARA Daisuke umehara@kit.ac.jp Last modified: 2020/05/02 13:08