Program For NF 2340

 Visual Basic Ver.6
 GP-IB


By H. Abe


NF回路設計ブロックのLCRメータのプログラムです。

GP-IB の設定の仕方は、
「Visual Basic を用いたGP-IB制御」を参考にしてください。

コンテックのGP-IBボード
 GPIB通信ドライバ(API-PAC (W32)を使ってプログラムが作られています。
対応OS:Windows XP/2000/Me/98SE/98。
 特に、API-GPIB(98/PC) Ver.4.06 が、ホームページから無料でダウンロードできます!


Dim BaseColor As Long, Trans_Time As Single
Dim TimerCount As Single, FLG As Integer, nCycle As Integer
Dim ScaleH As Single, ScaleW As Single, FileName As String, Ans As Integer
Dim Xmin As Single, Xmax As Single, Ymin As Single, Ymax As Single
Dim Cmd(31) As Long, CmdR(31) As Long
Dim temp As String * 100, t(50000) As Single
Dim tm$(50000), sec(50000)
Dim Tem1(50000) As Single, Tem2(50000) As Single
Dim DA(50000) As Single, DB(50000) As Single, Freq(50000) As Single
Dim AdrComp As Integer, AdrVOAC As Integer, AdrF250 As Integer
Dim Adr2340 As Integer, nF As Integer
Dim MeasCond As String, Nyu As String * 20
Dim L As Long, FILEout As String * 50, CK As String * 5
Dim FF As String, FE As String, SP As String * 5, BV As String
 Private Sub Form_Load()
 Form2.Show
 Form3.Show
 AdrComp = 0 ' Computer Address
 AdrVOAC = 5 ' VOAC7413 Multimeter Address (Photo diode)
 AdrF250 = 2 ' F250 Address (Temperature Monitor1)
 Adr2340 = 9 ' CS-5370P Address (Transducer)
'----------------------------------------------------------------------
 e1 = GpIni() ' GPIB 初期化
 e2 = GpIfc(1) ' インターフェイスクリア (1×100μsec)
 e3 = GpDelim(1, 1) ' デリミタ (CR+LF, EOI on)
 e4 = GpRen() ' GPIB remote enable
 e5 = GpTimeout(2000) ' Timeout (2000×1msec)
 e6 = GpSdc(Adr5370): ' SDC (Select Device Clear)
 e7 = GpSdc(Adr2340): ' SDC (Select Device Clear)
 If e1 = 0 Then Form2.Text1.Text = "GP-IB Initialization OK" Else Form2.Text1.Text = "GP-IB Initialization Failed"
 If e2 = 0 Then Form2.Text2.Text = "Interface Clear OK" Else Form2.Text2.Text = "Interface Clear Failed"
 If e3 = 0 Then Form2.Text3.Text = "Delimiter OK" Else Form2.Text3.Text = "Delimiter Failed"
 If e4 = 0 Then Form2.Text4.Text = "GP-IB Remote Enable OK" Else Form2.Text4.Text = "GP-IB Remote Enable Failed"
 If e5 = 0 Then Form2.Text5.Text = "Timeout OK" Else Form2.Text5.Text = "Timeout Failed"
 If e6 = 0 Then Form2.Text6.Text = "Select Device Clear (F250) OK" Else Form2.Text6.Text = "Select Device Clear (F250) Failed"
 If e7 = 0 Then Form2.Text7.Text = "Select Device Clear (2340) OK" Else Form2.Text7.Text = "Select Device Clear (2340) Failed"
'------------------------------------------------------------
 Call T_MON1(0)
 Call T_MON2(0)
'-------------------------------------------------------------
 Text9.Text = "1000"
' LCZ meter
 MeasCond = "FR 1E3;VI 0;LV 1; RN 0;SP 1;TR 1;DL 0" 'FR: frequency
 L = Len(MeasCond) 'SP: 1 MED speed
 Cmd(0) = 2 ' talker + listener
 Cmd(1) = AdrComp ' talker address (GPIB)
 Cmd(2) = Adr2340 ' listener address (2340)
 e = GpTalk(Cmd(0), L, MeasCond) ' 測定条件

 MeasCond = "DA 1;DB 3;DE 0;CM 0;CK 2;TG" 'DA: display A (1: C)
 L = Len(MeasCond) 'DB: display B (3: G)
 Cmd(0) = 2 ' talker + listener
 Cmd(1) = AdrComp ' talker address (GPIB)
 Cmd(2) = Adr2340 ' listener address (2340)
 e = GpTalk(Cmd(0), L, MeasCond) ' 測定条件
 ret = GpGet(Adr2340) ' get
'--------------------------------------------------------------------------
 If ret = 0 Then
  CmdR(0) = 2 ' talker + listener
  CmdR(1) = Adr2340 ' talker address (2340)
  CmdR(2) = AdrComp ' listener address (GPIB)
  e = GpListen(CmdR(0), 23, temp)
  Text10.Text = Val(Left$(temp, 11))
  Text11.Text = Val(Mid$(temp, 13, 11))
  Freq(0) = 9
  DA(0) = Val(Left$(temp, 11))
 End If
'-----------------------------------------------------------------
 Form3.Check1.Value = 1
 Form3.Check2.Value = 1
 Form3.Check3.Value = 1
 Form3.Check4.Value = 1
 Form3.Check5.Value = 1
 Option1.Value = 1
'----------------------------------------------------------------
 e = GpResetren()
 Trans_Time = 0.22 ' (sec)
 Timer1.Interval = 100 ' (100 msec)
 Timer1.Enabled = False
 ScaleH = 100: ScaleW = 2000
 BaseColor = Command2.BackColor
 Command3.Enabled = False
End Sub

Private Sub Command2_Click()
 Command2.BackColor = vbGreen
 Command2.Enabled = False
 Command3.Enabled = True
 FLG = 0
 k = 0
 If Form3.Check1.Value = 1 Then
  Fs = Val(Form3.Text1.Text): FE = Val(Form3.Text2.Text)
  dF = Val(Form3.Text3.Text)
  Call ck_RG(1, Fs, FE, dF, k)
  If FLG = 1 Then Exit Sub
 End If
 If Form3.Check2.Value = 1 Then
  Fs = Val(Form3.Text4.Text): FE = Val(Form3.Text5.Text)
  dF = Val(Form3.Text6.Text)
  Call ck_RG(2, Fs, FE, dF, k)
  If FLG = 1 Then Exit Sub
 End If
 If Form3.Check3.Value = 1 Then
  Fs = Val(Form3.Text7.Text): FE = Val(Form3.Text8.Text)
  dF = Val(Form3.Text9.Text)
  Call ck_RG(3, Fs, FE, dF, k)
  If FLG = 1 Then Exit Sub
 End If
 If Form3.Check4.Value = 1 Then
  Fs = Val(Form3.Text10.Text): FE = Val(Form3.Text11.Text)
  dF = Val(Form3.Text12.Text)
  Call ck_RG(4, Fs, FE, dF, k)
  If FLG = 1 Then Exit Sub
 End If
 If Form3.Check5.Value = 1 Then
  Fs = Val(Form3.Text13.Text): FE = Val(Form3.Text14.Text)
  dF = Val(Form3.Text15.Text)
  Call ck_RG(5, Fs, FE, dF, k)
  If FLG = 1 Then Exit Sub
 End If
 nF = k
 Xmin = Freq(1)
 Xmax = Freq(nF)
 Text6.Text = Freq(1)
 Text7.Text = Freq(nF)
 Ymin = Val(Text3.Text)
 Ymax = Val(Text2.Text)
 e = GpRen() ' GPIB remote enable
 FLG = 0
 If Val(Text4.Text) <= 0 Then
  Beep
  e = MsgBox("Sampling time < 0", vbOKOnly, "警告")
  Exit Sub
 End If
 If Ymax <= Ymin Then
  Beep
  e = MsgBox("Ymin > Ymax", vbOKOnly, "警告")
  Exit Sub
 End If
 Picture1.Cls
 Call scale_log
'--------------------------------------------------
 nCycle = 1
 If Option1.Value = True Then
  FILEout = "A:\User\abe\project_VB\Transducer\dummy.dat"
  Call Meas
 Else
  Beep
  e = MsgBox("データを保存しますか?", vbYesNo, "確認")
  If e = 6 Then
   On Error Resume Next
   CommonDialog1.CancelError = True
   CommonDialog1.Filter = "データファイル(*.seq)|*.seq|" & "すべてのファイル(*.*)|*.*|"
   CommonDialog1.FilterIndex = 1
   CommonDialog1.DefaultExt = "SEQ"
   CommonDialog1.ShowSave
   FileName = CommonDialog1.FileName
   If Err.Number = cdlCancel Then
    Exit Sub
   Else
    If Dir(FileName) <> "" Then Ans = MsgBox("上書きしますか?", vbYesNo, "確認")
    If Ans = vbNo Then Exit Sub
   End If
  End If
' ---------------------------------
  t0 = 3600 * Val(Left$(Time$, 2)) + 60 * Val(Mid$(Time$, 4, 2)) + Val(Right$(Time$, 2))
  For nCycle = 1 To 999
   Text12.Text = nCycle
   Picture1.Cls
   Call scale_log
   L1 = Len(FileName)
   L2 = Len(Str$(nCycle)) - 1
   If L2 = 1 Then Scan = "00" + Right$(Str$(nCycle), L2)
   If L2 = 2 Then Scan = "0" + Right$(Str$(nCycle), L2)
   If L2 = 3 Then Scan = Right$(Str$(nCycle), L2)
   FILEout = Left$(FileName, L1 - 4) + "_" + Scan + ".seq"
   Call Meas
   Text1.Text = 3600 * Val(Left$(Time$, 2)) + 60 * Val(Mid$(Time$, 4, 2)) + Val(Right$(Time$, 2)) - t0
   Call delay(Val(Text4.Text)) ' Interval time
  Next nCycle
 End If
'---------------------------------------------------------------------
 e = GpResetren()
 Command2.Enabled = True
End Sub

Private Sub Command3_Click()
 FLG = 1
 Command3.BackColor = vbRed
 Command2.BackColor = BaseColor
 Beep
 e = MsgBox("データを保存しますか?", vbYesNo, "確認")
 If e = 6 Then
  On Error Resume Next
  CommonDialog1.CancelError = True
  CommonDialog1.Filter = "データファイル(*.dat)|*.dat|" & "すべてのファイル(*.*)|*.*|"
  CommonDialog1.FilterIndex = 1
  CommonDialog1.DefaultExt = "dat"
  CommonDialog1.ShowSave
  FileName = CommonDialog1.FileName
  L = Len(FileName)
  FF = Left$(FileName, L - 4)
  FE = Right$(FileName, 4)
  FileName = FF + CK + SP + FE

  If Err.Number = cdlCancel Then
   Exit Sub
  Else
   If Dir(FileName) <> "" Then Ans = MsgBox("上書きしますか?", vbYesNo, "確認")
   If Ans = vbNo Then Exit Sub
  End If

  Open FileName For Output As #1
   Print #1, Tem1(nCycle), Tem2(nCycle), "Bias="; BV; "[V]"
   For k = 1 To nF
    Print #1, Freq(k), DA(k), DB(k)
   Next k
   Beep
   MsgBox (FileName & " 保存しました")
  Close #1
 End If
 Command3.Enabled = False
 Command3.BackColor = BaseColor
End Sub

Private Sub Meas()
 If Combo1.Text = "AUTO" Then MeasCond = "CK 0": CK = "_auto"
 If Combo1.Text = "SERI" Then MeasCond = "CK 1": CK = "_seri" ' Serial
 If Combo1.Text = "PARA" Then MeasCond = "CK 2": CK = "_para" ' Pararel
 L = Len(MeasCond)
 Cmd(0) = 2 ' talker + listener
 Cmd(1) = AdrComp ' talker address (GPIB)
 Cmd(2) = Adr2340 ' listener address (2340)
 e = GpTalk(Cmd(0), L, MeasCond) ' 測定条件
'--------------------------------------------------------------
 If Combo2.Text = "FAST" Then MeasCond = "SP 0": SP = "_fast"
 If Combo2.Text = "MED" Then MeasCond = "SP 1": SP = "_med"
 If Combo2.Text = "SLOW" Then MeasCond = "SP 2": SP = "_slow"
 L = Len(MeasCond)
 Cmd(0) = 2 ' talker + listener
 Cmd(1) = AdrComp ' talker address (GPIB)
 Cmd(2) = Adr2340 ' listener address (2340)
 e = GpTalk(Cmd(0), L, MeasCond) ' 測定条件
'---------------------------------------------------------------
 BV = Text13.Text
 MeasCond = "BV " + BV
 L = Len(MeasCond)
 Cmd(0) = 2 ' talker + listener
 Cmd(1) = AdrComp ' talker address (GPIB)
 Cmd(2) = Adr2340 ' listener address (2340)
 e = GpTalk(Cmd(0), L, MeasCond) ' 測定条件
'----------------------------------
 Open FILEout For Output As #2
  Call T_MON1(nCycle)
  Call T_MON2(nCycle)
  Print #2, Date$, Time$
  Print #2, Tem1(nCycle), Tem2(nCycle), "Bias="; BV; "[V]"
  Min = 100000: Max = -100000
  For i = 1 To nF
   Text9.Text = Freq(i)
   LL = Len(Str$(Freq(i))) - 2
   f = Freq(i) / 10 ^ LL
   MM = Len(Str$(LL))
   Nyu = Mid$(Str$(f), 2, 3) + "E" + Right(Str$(LL), MM - 1)
   MeasCond = "FR " + Nyu
   L = Len(MeasCond)
   Cmd(0) = 2 ' talker + listener
   Cmd(1) = AdrComp ' talker address (GPIB)
   Cmd(2) = Adr2340 ' listener address (2340)
   e = GpTalk(Cmd(0), L, MeasCond) ' 測定条件
   ret = GpGet(Adr2340) ' get
   If ret = 0 Then
    CmdR(0) = 2 ' talker + listener
    CmdR(1) = Adr2340 ' talker address (2340)
    CmdR(2) = AdrComp ' listener address (GPIB)
    e = GpListen(CmdR(0), 23, temp)
    Text10.Text = Left$(temp, 11)
    Text11.Text = Mid$(temp, 13, 11)
    DA(i) = Val(Left$(temp, 11))
    DB(i) = Val(Mid$(temp, 13, 11))
    If Max < DA(i) Then Max = DA(i)
    If Min > DA(i) Then Min = DA(i)
    X = (Log(Freq(i)) - Log(Xmin)) / (Log(Xmax) - Log(Xmin)) * ScaleW
    Y = ScaleH - (DA(i) - Ymin) / (Ymax - Ymin) * ScaleH
    If Ymin <= DA(i) And DA(i) <= Ymax Then Picture1.Circle (X, Y), 6, RGB(255, 0, 0)
   End If
   Print #2, Freq(i), DA(i), DB(i)
  Next i
 Close #2
'--------------------------------
 Text3.Text = Min
 Text2.Text = Max
 Ymin = Min
 Ymax = Max
 If Ymin >= Ymax Then Ymax = 1
 Picture1.Cls
 Call scale_log
 For i = 1 To nF
  X = (Log(Freq(i)) - Log(Xmin)) / (Log(Xmax) - Log(Xmin)) * ScaleW
  Y = ScaleH - (DA(i) - Ymin) / (Ymax - Ymin) * ScaleH
 Picture1.Circle (X, Y), 6, RGB(255, 0, 0)
 Next i
End Sub

Private Sub T_MON1(n) ' Temperature Monitor 1
 Cmd(0) = 2 ' talker + listener
 Cmd(1) = AdrComp ' talker address (GPIB)
 Cmd(2) = AdrF250 ' listener address (F250)
 ret = GpTalk(Cmd(0), 1, "T") ' Reading
 If ret = 0 Then
  CmdR(0) = 2 ' talker + listener
  CmdR(1) = AdrF250 ' talker address (F250)
  CmdR(2) = AdrComp ' listener address (GPIB)
  e = GpListen(CmdR(0), 9, temp)
  Text5.Text = Val(Mid$(temp, 2, 7))
  Tem1(n) = Val(Mid$(temp, 2, 7))
 End If
End Sub

Private Sub T_MON2(n) ' Temperature Monitor 2
 Cmd(0) = 2 ' talker + listener
 Cmd(1) = AdrComp ' talker address (GPIB)
 Cmd(2) = AdrVOAC ' listener address (VOAC7413)
 e = GpTalk(Cmd(0), 2, "F5") ' 測定レンジ(温度℃)
'  e = GpTalk(Cmd(0), 2, "S2") ' Sampling Speed (Fast)
'  e = GpTalk(Cmd(0), 2, "S0") ' Sampling Speed (Slow)
 e = GpTalk(Cmd(0), 2, "S1") ' Sampling Speed (mid)
 ret = GpGet(AdrVOAC) ' get
 If ret = 0 Then
  CmdR(0) = 2 ' talker + listener
  CmdR(1) = AdrVOAC ' talker address (VOAC7413)
  CmdR(2) = AdrComp ' listener address (GPIB)
  e = GpListen(CmdR(0), 20, temp)
  Text8.Text = Val(Mid$(temp, 4, 11))
  Tem2(n) = Val(Mid$(temp, 4, 11))
 End If
End Sub

Private Sub ck_RG(nRG, Fs, FE, dF, k)
 If Fs <= 0 Then
  Beep
  e = MsgBox("Range" + Str$(nRG) + ": [Fs <0]", vbOKOnly, "警告")
  Command2.BackColor = BaseColor
  Command2.Enabled = True
  Command3.Enabled = False
  FLG = 1
  Exit Sub
 End If
 If Fs > FE Then
  Beep
  e = MsgBox("Range" + Str$(nRG) + ": [Fs > Fe]", vbOKOnly, "警告")
  Command2.BackColor = BaseColor
  Command2.Enabled = True
  Command3.Enabled = False
  FLG = 1
  Exit Sub
 End If
 If dF <= 0 Then
  Beep
  e = MsgBox("Range" + Str$(nRG) + ": [Step < 0]", vbOKOnly, "警告")
  Command2.BackColor = BaseColor
  Command2.Enabled = True
  Command3.Enabled = False
  FLG = 1
  Exit Sub
 End If
 nF = (FE - Fs) / dF + 1
 f = Fs
 For i = k + 1 To nF + k
  Freq(i) = f
  f = f + dF
 Next i
 k = k + nF
End Sub

Private Sub delay(TimeData)
 TimerCount = 0
 Timer1.Enabled = True
 Do While TimeData >= TimerCount
  DoEvents
 Loop
 Timer1.Enabled = False
End Sub

Private Sub scale_log()
 L = Len(Str$(Xmin))
 dx = 10 ^ (L - 2)
 X = Xmin
 Do
  For i = 1 To 9
   X1 = (Log(X) - Log(Xmin)) / (Log(Xmax) - Log(Xmin)) * ScaleW
   If i = 1 Then
    Picture1.Line (X1, 100)-(X1, 96), 6
    Picture1.Line (X1, 0)-(X1, 4), 6
   Else
    Picture1.Line (X1, 100)-(X1, 98), 6
    Picture1.Line (X1, 0)-(X1, 2), 6
   End If
   X = X + dx
  Next i
  dx = dx * 10
 Loop While X < Xmax
End Sub

Private Sub form_unload(cancel As Integer)
 Unload Form2
 Unload Form3
 e = GpResetren()
 e = GpExit()
End Sub

Private Sub Option1_Click()
 If Option1.Value = 1 Then
  Option1.Value = 0
  Option2.Value = 1
 End If
End Sub

Private Sub Option2_Click()
 If Option2.Value = 1 Then
  Option2.Value = 0
  Option1.Value = 1
 End If
End Sub

Private Sub Timer1_Timer()
 TimerCount = TimerCount + 0.1 ' (0.1 sec)
End Sub