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