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
PC:IBM 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.1自Agilent網站(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 (預設值17,如PC只接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
‘(宣告RM為VisaComLib函數庫之全資源管理者(Global Resource Manager,即儀器與GPIB的介面通訊層(Session)) ResourceManager集合(Class)的成員。)
Public Chroma11022 As
VisaComLib.FormattedIO488
‘(宣告Agilent4294A為VisaComLib函數庫其(與儀器)標準格式溝通介面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
|
設定rm為VisaComLib函數庫之ResourceManager集合的物件
|
||
Set Agilent4294A = New VisaComLib.FormattedIO488
|
設定Agilent4294A為VisaComLib函數庫之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
|
宣告gpib為VisaComLib函數庫其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)
|
||
(將θ=0的Fr值讀入Label_DataA)
|
||
(將θ=0的ESL值讀入Label_DataB)
|
||
(將θ=0的Cs值讀入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通訊層。
|
|

沒有留言:
張貼留言