Program For Keithley 6485

 Visual Basic Ver.6
 GP-IB


By H. Abe


ケスレーのデジタルマルチメータ用のプログラムです。

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 Eoi As Long, e As Long, BaseColor As Long, errFLG As Integer
Dim ret As Long, talker As Long, stbyte As Long
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
Dim CmdR(31) As Long
Dim Pstb(31) As Long ' 返送されたステータスバイト配列
Dim temp As String * 100, t(50000) As Single, Tem(50000) As Single
Dim AdrComp As Integer, Adr6485 As Integer

Private Sub Form_Load()
 AdrComp = 0 ' Computer Address
 Adr6485 = 14 ' Keithley 6485 Address
 errFLG = 0
'---------------------------------------------------------------------------------------
 e = GpIni(): If e <> 0 Then errFLG = 1 ' GPIB 初期化
 e = GpIfc(1): If e <> 0 Then errFLG = 1 ' インターフェイスクリア (1×100μsec)
 e = GpRen(): If e <> 0 Then errFLG = 1 ' GPIB remote enable
 e = GpDelim(1, 1): If e <> 0 Then errFLG = 1 ' Delimiter [1: CR+LF / 1: EOI valid]
 e = GpTimeout(2000): If e <> 0 Then errFLG = 1 ' Timeout (2000×1msec)
 e = GpSdc(Adr6485): If e <> 0 Then errFLG = 1 ' SDC (Select Device Clear)
 If errFLG = 1 Then
  Text8.Text = "GP-IB Initialization Failed!"
 Else
  Text8.Text = "GP-IB Initialization OK"
 End If
'---------------------------------------------------------------
 Cmd(0) = 1 ' トーカ数
 Cmd(1) = Adr6485 ' トーカアドレス
 ret = GpPoll(Cmd(0), Pstb(0)) ' ポーリング
 talker = Cmd(Pstb(0)) '
 stbyte = Pstb(Pstb(0)) '

 Cmd(0) = 2 ' talker + listener
 Cmd(1) = AdrComp ' talker address (GPIB)
 Cmd(2) = Adr6485 ' listener address (6485)
'  e = GpTalk(Cmd(0), 2, "F5") ' 測定レンジ(温度℃)
'  e = GpTalk(Cmd(0), 2, "R0") ' 測定レンジ(Auto Range on 初期値)
'  e = GpTalk(Cmd(0), 2, "S2") ' Sampling Speed (Fast)
'-----------------------------------------------------
'  ret = GpGet(Adr6485) ' get
'  If ret = 0 Then
'   CmdR(0) = 2 ' talker + listener
'   CmdR(1) = Adr6485 ' talker address (6485)
'   CmdR(2) = AdrComp ' listener address (GPIB)
'   e = GpListen(CmdR(0), 20, temp)
'   Text5.Text = Val(Mid$(temp, 4, 11))
'  End If
'  e = GpResetren()
'-----------------------------------------------------
 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.Enabled = False
 Command3.Enabled = True
 Command2.BackColor = vbGreen
 Command3.BackColor = BaseColor
 Xmin = Val(Text6.Text)
 Xmax = Val(Text7.Text)
 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 Xmax <= Xmin Then
  Beep
  e = MsgBox("Xmin > Xmax", vbOKOnly, "警告")
  Exit Sub
 End If
 If Ymax <= Ymin Then
  Beep
  e = MsgBox("Ymin > Ymax", vbOKOnly, "警告")
  Exit Sub
 End If
 Picture1.Cls
'--------------------------------------------------
 nCycle = 1
 Open "A:\User\dummy.dat" For Output As #2

 Do
  t(nCycle) = t(nCycle - 1) + Val(Text4.Text)
  Call Meas

  If t(nCycle) > Xmax * 0.95 Then
   Xmax = Xmax * 5#
   Text7.Text = Xmax
   Picture1.Cls
   For i = 1 To nCycle
    X1 = (t(i - 1) - Xmin) / (Xmax - Xmin) * ScaleW
    X2 = (t(i) - Xmin) / (Xmax - Xmin) * ScaleW
    Y1 = ScaleH - (Tem(i - 1) - Ymin) / (Ymax - Ymin) * ScaleH
    Y2 = ScaleH - (Tem(i) - Ymin) / (Ymax - Ymin) * ScaleH
    Picture1.Line (X1, Y1)-(X2, Y2), 6
   Next i
  End If
  If Tem(nCycle) > Ymax Then
   Ymax = Tem(nCycle)
   Text2.Text = Ymax
   Picture1.Cls
   For i = 1 To nCycle
     X1 = (t(i - 1) - Xmin) / (Xmax - Xmin) * ScaleW
     X2 = (t(i) - Xmin) / (Xmax - Xmin) * ScaleW
     Y1 = ScaleH - (Tem(i - 1) - Ymin) / (Ymax - Ymin) * ScaleH
     Y2 = ScaleH - (Tem(i) - Ymin) / (Ymax - Ymin) * ScaleH
     Picture1.Line (X1, Y1)-(X2, Y2), 6
   Next i
  End If
  If Tem(nCycle) < Ymin Then
   Ymin = Tem(nCycle)
   Text3.Text = Ymin
   Picture1.Cls
   For i = 1 To nCycle
    X1 = (t(i - 1) - Xmin) / (Xmax - Xmin) * ScaleW
    X2 = (t(i) - Xmin) / (Xmax - Xmin) * ScaleW
    Y1 = ScaleH - (Tem(i - 1) - Ymin) / (Ymax - Ymin) * ScaleH
    Y2 = ScaleH - (Tem(i) - Ymin) / (Ymax - Ymin) * ScaleH
    Picture1.Line (X1, Y1)-(X2, Y2), 6
   Next i
  End If

  nCycle = nCycle + 1
  If FLG = 1 Then Exit Do
 Loop
 Close #2
 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
  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
   For k = 1 To nCycle
    Print #1, t(k), Tem(k)
   Next k
   Beep
   MsgBox ("保存しました")
  Close #1
 End If
 Command3.Enabled = False
 Call Meas
End Sub
'***********************************
Private Sub Meas()
'***********************************
 ret = GpGet(Adr6485) ' get
 If ret = 0 Then
  CmdR(0) = 2 ' talker + listener
  CmdR(1) = Adr6485 ' talker address (6485)
  CmdR(2) = AdrComp ' listener address (GPIB)
  e = GpListen(CmdR(0), 20, temp)
  Text5.Text = Val(Mid$(temp, 4, 11))
  Text1.Text = t(nCycle)
  Tem(nCycle) = Val(Mid$(temp, 4, 11))
  Print #2, t(nCycle), Tem(nCycle)
  X1 = (t(nCycle - 1) - Xmin) / (Xmax - Xmin) * ScaleW
  X2 = (t(nCycle) - Xmin) / (Xmax - Xmin) * ScaleW
  Y1 = ScaleH - (Tem(nCycle - 1) - Ymin) / (Ymax - Ymin) * ScaleH
  Y2 = ScaleH - (Tem(nCycle) - Ymin) / (Ymax - Ymin) * ScaleH
  Picture1.Line (X1, Y1)-(X2, Y2), 6
 ElseIf ret >= 252 Then
  Text5.Text = "Error"
  e = GpResetren()
  e = GpExit()
  End
 End If
 Call delay(Val(Text4.Text)) ' Sampling time
End Sub
'*****************************
Private Sub delay(TimeData)
'*****************************
 TimerCount = 0
 Timer1.Enabled = True
 Do While TimeData >= TimerCount
  DoEvents
 Loop
 Timer1.Enabled = False
End Sub
'***************************************
Private Sub form_unload(cancel As Integer)
'***************************************
 e = GpResetren()
 e = GpExit()
End Sub
'**************************
Private Sub Timer1_Timer()
'**************************
 TimerCount = TimerCount + 0.1 ' (0.1 sec)
End Sub