Agilent4294A Precision Impedance Analyzer _Fr Test VBA程式設計及應用範例說明

1.系統要求
1.1.軟體
作業系統:Microsoft Window XP
VBA程式開發、執行軟體:Microsoft Excel 2007
介面驅動軟體:Agilent IO Libraries Suite 15.1
(Note:Agilent IO Libraries Suite Recommended Downloads網頁選擇下載)
1.2.硬體
儀器:Agilent 4294A Precision Impedance Analyzer
PCIBM compatible (需具有USB 及或Ethernet RJ45通訊介面)
連接裝置: 1).For GP-IB: Agilent 82357A USB/GPIB Interface,
2). For LAN: Cross over LAN cable (PC to PC RJ45)
2.連線準備:
2.1Agilent網站(www.home.agilent.com)搜尋下載 Agilent IO Libraries Suite 15.1並執行安裝於PC(有更新版,但需視Windows, Excel版本及PC能力選擇)
2.2.Agilent 4294A Precision Impedance Analyzer儀器設備位址設定:
1).GPIB:
a).[Local] 鍵螢幕旁即出現Local清單,再按螢幕ADDRESS: GPIB旁的按鍵即可輸入數字設定GPIB address (預設值17PC只接1台儀器如此即可)
           b).按螢幕ADDRESSABLE: ONLY旁的按鍵

3.EXCEL VBA 巨集程式的規劃
3.1.標示及顯示之物件
物件類別
物件名稱
作用/功能
TextBox
TextBox_ItemNo
提供TextBox_ItemNo.Text的內容為SaveFile_Click存檔時檔案名稱
Label
Label_Msg
各事件作動之物件作動時之訊息提示
Label
Label_DEG
提供Trigger_Click作動時儀器θ (=0) 堵取值的顯示
Label
Label_DataA
提供Trigger_Click作動時儀器(θ =0)Fr堵取值的顯示
Label
Label_DataB
提供Trigger_Click作動時儀器(θ =0)ESL堵取值的顯示
Label
Label_DataC
提供Trigger_Click作動時儀器(θ =0)Cs堵取值的顯示
Label
Label_1
文字’Msg’的標示
Label
Label_2
文字 θ的標示
Label
Label_Fr
文字 Fr的標示
Label
Label_ESL
文字 ESL的標示
Label
Label_Cs
文字 Cs的標示
3.2.事件作動之物件
CommandButton_MeasPara命令鍵(Caption: MeasPara)
物件類別: Command-Button
名稱: CommandButton_MeasPara
事件/程序/函式
作用/功能
Private Sub CommandButton_MeasPara_Click()
(使儀器依CBox_MPara量測參數切換)

變更Label_Msg提示及顏色
ConvParam2( )
呼叫ConvParam2()函式將CBox_MPara.TEXT的內容轉換成儀器命令參數
SetVisa ( )
呼叫SetVisa ( ) 函式建立與儀器GPIB的介面通訊層(Session)
CmdSet( )
呼叫CmdSet( ) 函式將儀器命令參數經由GPIB通訊層寫給(write)儀器
CmdGet( )
呼叫CmdGet( ) 函式將儀器詢問命令經由GPIB通訊層寫給(write)儀器並讀取(read)儀器回覆的資訊
GtLocal( )
呼叫GtLocal( ) 函式解除儀器被PC的控制,結束GPIB通訊層
事件/程序/函式程式碼:
Private Sub CommandButton_MeasPara_Click()
Dim strPara  As String
Dim Mpara As String
Dim ibAddr As String
Dim strMeas As String
Label_Msg.Caption = "Change to " & ComboBox_MPara.Text & " Display Screen"
Agilent4294A_FreqSweep.Label_Msg.ForeColor = RGB(0, 128, 64)
strPara = ComboBox_MPara.Text
Mpara = ConvParam2(strPara)
ibAddr = "GPIB0::17::INSTR"
‘ibAddr = "TCPIP0::100.100.10.11::5025::SOCKET"
SetVisa (ibAddr)
  CmdSet (Mpara)
  CmdSet ("TRAC A")
  CmdSet ("FMT LOGY")
  CmdSet ("AUTO")
  CmdSet ("TRAC B")
  CmdSet ("FMT LOGY")
  CmdSet ("AUTO")
strMeas = CmdGet("MEAS?")
Label_Msg.Caption = strMeas
Agilent4294A_FreqSweep.Label_Msg.ForeColor = RGB(0, 0, 255)
GtLocal (ibAddr)
End Sub
Note:如以LAN方式連接,則 ibAddr = "TCPIP0::100.100.10.11::5025::SOCKET"
Function ConvParam2(strType As String) As String
 ConvParam2 = vbNullString
    Select Case strType
        Case "|Z|-θ": ConvParam2 = "MEAS IMPH"
        Case "R-X": ConvParam2 = "MEAS IRIM"
        Case "Ls-Rs": ConvParam2 = "MEAS LSR"
        Case "Ls-Q": ConvParam2 = "MEAS LSQ"
        Case "Cs-R": ConvParam2 = "MEAS CSR"
        Case "Cs-Q": ConvParam2 = "MEAS CSQ"
        Case "Cs-D": ConvParam2 = "MEAS CSD"
        Case "|Y|-θ": ConvParam2 = "MEAS AMPH"
        Case "G-B": ConvParam2 = "MEAS ARIM"
        Case "Lp-G": ConvParam2 = "MEAS LPG"
        Case "Lp-Q": ConvParam2 = "MEAS LPQ"
        Case "Cp-G": ConvParam2 = "MEAS CPG"
        Case "Cp-Q": ConvParam2 = "MEAS CPQ"
        Case "Cp-D": ConvParam2 = "MEAS CPD"
        Case "Comp Z - Comp Y": ConvParam2 = "MEAS COMP"
        Case "|Z|-Ls": ConvParam2 = "MEAS IMLS"
        Case "|Z|-Cs": ConvParam2 = "MEAS IMCS"
        Case "|Z|-Lp": ConvParam2 = "MEAS IMLP"
        Case "|Z|-Cp": ConvParam2 = "MEAS IMCP"
        Case "|Z|-Rs": ConvParam2 = "MEAS IMRS"
        Case "|Z|-Q": ConvParam2 = "MEAS IMQ"
        Case "|Z|-D": ConvParam2 = "MEAS IMD"
        Case "Lp-Rp": ConvParam2 = "MEAS LPR"
        Case "Cp-Rp": ConvParam2 = "MEAS CPR"
        Case Else: ConvParam2 = "ERROR-ERROR"
    End Select
End Function
以下位於模組 Module1
Option Explicit

Public RM As VisaComLib.ResourceManager
Public Agilent4294A As VisaComLib.FormattedIO488

Function SetVisa(ibAddr As String) As Boolean
    Dim setAddr As String
    setAddr = vbNullString
    SetVisa = False
    Set RM = New VisaComLib.ResourceManager
    Set Agilent4294A = New VisaComLib.FormattedIO488
    Set Agilent4294A.IO = RM.Open(ibAddr)
    Agilent4294A.IO.timeout = 60000
    Agilent4294A.IO.TerminationCharacterEnabled = True
    SetVisa = True
    Exit Function
End Function

Function CmdSet(sCmd As String)
    Agilent4294A.WriteString sCmd
End Function

Function CmdGet(sCmd As String) As String
    Dim str  As String
    CmdGet = vbNullString
    str = vbNullString
    Agilent4294A.WriteString sCmd
    str = Agilent4294A.ReadString()
    CmdGet = Left(str, Len(str) - 1)
End Function

Function GtLocal(ibAddr As String)
    Dim gpib As IGpib
    Set gpib = RM.Open(ibAddr)
    gpib.ControlREN (GPIB_REN_GTL)
     gpib.Close
End Function
Note:於模組程式碼設計區頂端下拉式選單選擇 “(一般)”宣告輸入:
Option Explicit
‘(強制所有的變數都要宣告)
Public RM As VisaComLib.ResourceManager
‘(宣告RMVisaComLib函數庫之全資源管理者(Global Resource Manager即儀器與GPIB的介面通訊層(Session)) ResourceManager集合(Class)的成員。)
Public Chroma11022 As VisaComLib.FormattedIO488
‘(宣告Agilent4294AVisaComLib函數庫其(與儀器)標準格式溝通介面FormattedIO488集合(Class)的成員。)
Note:函式:
Function SetVisa(ibAddr As String) As Boolean
Function CmdSet(sCmd As String)
Function CmdGet(sCmd As String) As String
Function GtLocal(ibAddr As String)
就是用於通通GPIB ( LAN)通訊協定與儀器連接的主要4個共用驅動程式。
GPIB ( LAN)通訊協定驅動程式碼說明:
程式碼
說明
Set rm = New VisaComLib.ResourceManager
設定rmVisaComLib函數庫之ResourceManager集合的物件
Set Agilent4294A = New VisaComLib.FormattedIO488
設定Agilent4294AVisaComLib函數庫之FormattedIO488集合的物件。
Set Agilent4294A.IO = rm.Open(ibAddr)
rm物件建立、開啟的介面通訊層(Session) 資源指定給標準格式溝通介面Agilent4294A物件的IO屬性。
Agilent4294A.IO.timeout = 60000
設定介面通訊層(Session)逾時時間。
Agilent4294A.IO.TerminationCharacterEnabled = True
設定溝通標準格式的結束字元為實。
Agilent4294A.WriteString sCmd
透過Agilent4294A物件字串命令給儀器。
str = Agilent4294A.ReadString()
透過Agilent4294A物件讀取儀器回覆的字串。
Dim gpib As IGpib
宣告gpibVisaComLib函數庫其IGpib 集合(Class)的成員。
Set gpib = rm.Open(ibAddr)
rm物件建立、開啟的介面通訊層(Session) 資源指定給gpib
gpib.ControlREN (GPIB_REN_GTL)
解除儀器的遠端(remote)PC連線控制。
gpib.Close
將建立、開啟的介面通訊層(Session)資源結束、關閉。
Trigger命令鍵(Caption: Trigger (|Z|-θ))
物件類別: Command-Button
名稱: Trigger
事件/程序/函式
作用/功能
Private Sub Trigger_MouseDown()
變更Label_Msg提示及顏色
Private Sub Trigger_Click()
(觸發儀器執行量測參數|z|-θ之測量)

(θ=0θ測量值讀入Label_DEG)

(θ=0Fr值讀入Label_DataA)

(θ=0ESL值讀入Label_DataB)

(θ=0Cs值讀入Label_DataC)

變更Label_Msg提示及顏色
SetVisa ( )
呼叫SetVisa ( ) 函式建立與儀器GPIB的介面通訊層(Session)
CmdSet( )
呼叫CmdSet( ) 函式將儀器命令參數經由GPIB通訊層寫給(write)儀器
CmdGet( )
呼叫CmdGet( ) 函式將儀器詢問命令經由GPIB通訊層寫給(write)儀器並讀取(read)儀器回覆的資訊
GtLocal( )
呼叫GtLocal( ) 函式解除儀器被PC的控制,結束GPIB通訊層
事件/程序/函式程式碼:
Private Sub Trigger_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
 Label_Msg.Caption = "On Triger"
 Label_Msg.ForeColor = RGB(0, 128, 8)
End Sub
Private Sub Trigger_Click()
Dim ibAddr As String
Dim strMeas1 As String
Dim strMeas1A As String
Dim strMeas1B As String
Dim strMeas2 As String
Dim strMeas3 As String
Dim strPara As String
Dim strCmd As String
Dim Buff$
 ibAddr = "GPIB0::17::INSTR"
 'ibAddr = "TCPIP0::100.100.10.11::5025::SOCKET"
  SetVisa (ibAddr)
  CmdSet ("MEAS IMPH")
  CmdSet ("TRGS INT")
  CmdSet ("SING")
  Buff$ = CmdGet("*OPC?")
  Label_Msg.Caption = Buff$
  Agilent4294A_FreqSweep.Label_Msg.ForeColor = RGB(0, 0, 255)
  CmdSet ("TRAC A")
  CmdSet ("AUTO")
  CmdSet ("TITL " & """" & "" & """")
  CmdSet ("TRAC B")
  CmdSet ("AUTO")
  CmdSet ("MKR ON")
  CmdSet ("TITL " & """" & "" & """")
  CmdSet ("SEATARG 0DEG")
  strMeas1 = CmdGet("MKRPRM?")
  Agilent4294A_FreqSweep.Label_DataA.Caption = strMeas1
  CmdSet ("TRAC B")
  strMeas1A = CmdGet("SEATARG?")
  strMeas1B = CSng(strMeas1A)
  Agilent4294A_FreqSweep.Label_DEG.Caption = strMeas1B
  Agilent4294A_FreqSweep.Label_DEG.ForeColor = RGB(0, 0, 255)
  CmdSet ("MEAS IMLS")
  CmdSet ("TRAC B")
  CmdSet ("MKR ON")
  strMeas2 = CmdGet("MKRVAL?")
  Agilent4294A_FreqSweep.Label_DataB.Caption = strMeas2
  CmdSet ("MEAS IMCS")
  CmdSet ("TRAC B")
  CmdSet ("MKR ON")
  strMeas3 = CmdGet("MKRVAL?")
  Agilent4294A_FreqSweep.Label_DataC.Caption = strMeas3
  CmdSet ("MEAS IMPH")
  GtLocal (ibAddr)

  Label_Msg.Caption = "Sweep Test Over"
  Label_Msg.ForeColor = RGB(0, 128, 8)

End Sub
如以|z|最小值之頻率為自共振頻率(Fr)Private Sub Trigger_Click()變更如下:
Private Sub Trigger_Click()
Dim ibAddr As String
Dim strMeas1,strMeas1B As String
Dim strMeas2, strMeas3 As String
Dim Buff$
 ibAddr = "GPIB0::17::INSTR"
'ibAddr = "TCPIP0::100.100.10.11::5025::SOCKET"
  SetVisa (ibAddr)
  CmdSet ("MEAS IMPH")
  CmdSet ("TRGS INT")
  CmdSet ("SING")
  Buff$ = CmdGet("*OPC?")
  Label_Msg.Caption = Buff$
  CmdSet ("TRAC A")
  CmdSet ("AUTO")
  CmdSet ("TRAC B")
  CmdSet ("AUTO")
  CmdSet ("TRAC A")
  CmdSet ("MKR ON")
  CmdSet ("SEAM MIN")
  strMeas1 = CmdGet("MKRPRM?")
  Agilent4294A_FreqSweep.Label_DataA.Caption = strMeas1
  CmdSet ("TRAC B")
  CmdSet ("MKR ON")
  strMeas1B = CmdGet("MKRVAL?")
  Agilent4294A_FreqSweep.Label_DEG.Caption = strMeas1B
  Agilent4294A_FreqSweep.Label_DEG.ForeColor = RGB(0, 0, 255)
  CmdSet ("MEAS IMLS")
  CmdSet ("TRAC B")
  CmdSet ("MKR ON")
  strMeas2 = CmdGet("MKRVAL?")
  Agilent4294A_FreqSweep.Label_DataB.Caption = strMeas2
  CmdSet ("MEAS IMCS")
  CmdSet ("TRAC B")
  CmdSet ("MKR ON")
  strMeas3 = CmdGet("MKRVAL?")
  Agilent4294A_FreqSweep.Label_DataC.Caption = strMeas3
  CmdSet ("MEAS IMPH")
 GtLocal (ibAddr)
   Label_Msg.Caption = "Sweep Test Over"
   Label_Msg.ForeColor = RGB(0, 128, 8)
End Sub
GPIB通訊驅動函式及命令碼(command code)
1). GPIB通訊驅動函式:SetVisa ( ), CmdSet( ), CmdGet( ), GtLocal( )
2).命令碼(command code) GPIB通訊驅動函式括弧()內的字串(string); 命令碼有2類,1類為GPIB通訊通訊協定的通用命令碼,另1類為儀器的命令碼。
GPIB通訊驅動函式程式碼
作用說明
SetVisa (ibAddr)
建立與儀器GPIB的介面通訊層(Session)
CmdSet ("TRGS INT")
設定觸發訊號的來源。
CmdSet ("SING")
設定執行單觸發掃頻。
CmdSet ("MEAS IMPH")
設定儀器切換至量測參數為|Z|-θ的狀態。
CmdSet ("MEAS IMLS")
設定儀器切換至量測參數為|Z|-Ls的狀態。
CmdSet ("MEAS IMCS")
設定儀器切換至量測參數為|Z|-Cs的狀態。
CmdSet ("TRAC A")
選擇儀器目前第1個量測參數(|Z|)的掃頻軌跡。
CmdSet ("TRAC B")
選擇儀器目前第2個量測參數(θ, Ls, Cs,…)的掃頻軌跡。
CmdSet ("MKR ON")
於選擇的掃頻軌跡啟動游標(Marker)
CmdSet ("TITL " & """" & "" & """")
設定儀器螢幕掃頻軌跡之名稱為空白(””)
CmdSet ("SEATARG 0DEG")
設定定位游標(Marker)θ掃頻軌跡上θ=0的位置。
CmdSet ("SEAM MIN")
設定游標(Marker)於掃頻軌跡尋找最小值。
CmdGet("MKRPRM?")
讀取游標(Marker)所在位置的掃測()參數值及頻率值
CmdGet("MKRVAL?")
讀取游標(Marker)所在位置量測參數的測量值。
CmdGet("*OPC?")
設定儀器在完成所有未決操作時,將ASCII 字元1 置入輸出佇列;*OPC? :GPIB通訊通訊協定的通用命令碼。
GtLocal (strAddr)
解除儀器被PC的控制,結束GPIB通訊層

沒有留言:

張貼留言