"TR6143-bas"의 두 판 사이의 차이

14번째 줄: 14번째 줄:
 
140    GOSUB Stimulus_select
 
140    GOSUB Stimulus_select
 
150    GOSUB Measure
 
150    GOSUB Measure
160   GOSUB Inst_close
+
160 ! GOSUB Inst_close
 
170    GOSUB Fileclose
 
170    GOSUB Fileclose
 
180    STOP
 
180    STOP
23번째 줄: 23번째 줄:
 
230    GOSUB Chart_var
 
230    GOSUB Chart_var
 
240    GOSUB Init_chart
 
240    GOSUB Init_chart
250    Wait=.2        !계측기 세팅을 한 후, 첫 측정에서 측정값이 0이 나오는 현상 때문에 잠시 대기 시간
+
250    Wait=.001      !계측기 세팅을 한 후, 첫 측정에서 측정값이 0이 나오는 현상 때문에 잠시 대기 시간
 
260    T0=TIMEDATE
 
260    T0=TIMEDATE
 
270    Count=0
 
270    Count=0
280    FOR I=1 TO !배터리 충방전실험을 5회 실시
+
280    FOR I=1 TO 200 !배터리 충방전실험을 5회 실시
 
290      GOSUB Cycle
 
290      GOSUB Cycle
 
300    NEXT I
 
300    NEXT I
 
310    RETURN
 
310    RETURN
 
320 Cycle:  !
 
320 Cycle:  !
330   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
330 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
340   !충전. 정전류, 전압제한(전압을 읽는다.)
+
340 !충전. 정전류, 전압제한(전압을 읽는다.)
350   !전류 전압을 -로 표기한다.
+
350 !전류 전압을 +로 표기한다.
360   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
360 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
370    Test$="C"
 
370    Test$="C"
 
380    Cmd$="I4"  !2A range
 
380    Cmd$="I4"  !2A range
390    Cmd$=Cmd$&" D "&VAL$(Ic)&"A"    !D1.0A
+
390    Cmd$=Cmd$&" D"&VAL$(Ic)&"A"    !D1.0A
400    Cmd$=Cmd$&" D "&VAL$(Vc)&"V"    !D4.2V
+
400    Cmd$=Cmd$&" D"&VAL$(Vc)&"V"    !D4.2V
 
410    OUTPUT @Src;Cmd$  !"I4 D1A D4.2V"
 
410    OUTPUT @Src;Cmd$  !"I4 D1A D4.2V"
 
420    OUTPUT @Src;"E"      !Operate ON
 
420    OUTPUT @Src;"E"      !Operate ON
53번째 줄: 53번째 줄:
 
530    EXIT IF Volt>=Vc  !측정 전압이 충전최고 전압에 도달하면
 
530    EXIT IF Volt>=Vc  !측정 전압이 충전최고 전압에 도달하면
 
540    END LOOP  
 
540    END LOOP  
550    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
550    OUTPUT @Src;"H"      !Operate OFF
560    !충전, 충전 최고전압에 도달하면. 정전압, 전류제한(전류를 읽는다.)
+
560  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
570    !전류 전압을 -로 표기한다.
+
570  !충전, 충전 최고전압에 도달하면. 정전압, 전류제한(전류를 읽는다.)
580    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
580  !전류 전압을 +로 표기한다.
590   Test$="C"
+
590  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
600   Cmd$="V5"  !32V range
+
600   Test$="C"
610   Cmd$=Cmd$&" D "&VAL$(Vc)&"V"    !D4.2V
+
610   Cmd$="V5"  !32V range
620   Cmd$=Cmd$&" D "&VAL$(Ic)&"A"    !D1.0A
+
620   Cmd$=Cmd$&" D"&VAL$(Vc)&"V"    !D4.2V
630   OUTPUT @Src;Cmd$  !"V5 D 4.2V D 1.0A"
+
630   Cmd$=Cmd$&" D"&VAL$(Ic)&"A"    !D1.0A
640   OUTPUT @Src;"E"      !Operate ON
+
640   OUTPUT @Src;Cmd$  !"V5 D 4.2V D 1.0A"
650   WAIT Wait
+
650   OUTPUT @Src;"E"      !Operate ON
660   Pre_v=Curr
+
660   WAIT Wait
670   LOOP
+
670   Pre_v=Curr
680     Time=(TIMEDATE-T0)/60
+
680   LOOP
690     GOSUB Reading  !충전전압에 도달되어, 흐르는 전류를 측정한다.
+
690     Time=(TIMEDATE-T0)/60
700     Curr=Data
+
700     GOSUB Reading  !충전전압에 도달되어, 흐르는 전류를 측정한다.
710     Volt=Vc
+
710     Curr=Data
720     IF Data<Pre_v THEN  !측정값이 직전값보다 작으면
+
720     Volt=Vc
730       GOSUB Data_process
+
730     IF Data<Pre_v THEN  !측정값이 직전값보다 작으면
740     END IF  
+
740       GOSUB Data_process
750   EXIT IF Curr<Ic_end  !현재 전류가 종료전류에 도달하면
+
750     END IF  
760   END LOOP  
+
760   EXIT IF Curr<=Ic_end  !현재 전류가 종료전류에 도달하면
770   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
770   END LOOP  
780    !방전
+
780   OUTPUT @Src;"H"      !Operate OFF
790    !전류 전압을 +로 표기한다.
+
790  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
800    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
800  !방전 전류는 - 이다
810   !charge  volt limit=Vc
+
810  !전류 전압을 +로 표기한다.
820   Test$="D"
+
820  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
830   Cmd$="I4"  !2A range
+
830   !charge  volt limit=Vc
840   Cmd$=Cmd$&" D "&VAL$(-Id)&"A"     !D-1.0A
+
840   Test$="D"
850   Cmd$=Cmd$&" D "&VAL$(Vc)&"V"    !D4.2V
+
850   Cmd$="I4"  !2A range
860   OUTPUT @Src;Cmd$  !"I4 D1A D4.2V"
+
860   Cmd$=Cmd$&" D"&VAL$(Id)&"A"     !D-1.0A
870   OUTPUT @Src;"E"      !Operate ON
+
870   Cmd$=Cmd$&" D"&VAL$(Vc)&"V"    !D4.2V
880   WAIT Wait
+
880   OUTPUT @Src;Cmd$  !"I4 D1A D4.2V"
890   Pre_v=Vc
+
890   OUTPUT @Src;"E"      !Operate ON
900   LOOP
+
900   WAIT Wait
910     Time=(TIMEDATE-T0)/60
+
910   Pre_v=Vc
920     GOSUB Reading  !일정 전류 방전      , 전압이 측정된다.
+
920   LOOP
930     Volt=Data
+
930     Time=(TIMEDATE-T0)/60
940     Curr=Id
+
940     GOSUB Reading  !일정 전류 방전      , 전압이 측정된다.
950     IF Data<Pre_v THEN  !측정값이 직전값보다 작으면
+
950     Volt=Data
960       GOSUB Data_process
+
960     Curr=Id
970     END IF  
+
970     IF Data<Pre_v THEN  !측정값이 직전값보다 작으면
980    EXIT IF Volt<Vd  !현재 전압이 충전전압에 도달하면
+
980       GOSUB Data_process
990    END LOOP  
+
990     END IF  
1000   RETURN
+
1000  EXIT IF Volt<=Vd  !현재 전압이 충전전압에 도달하면
1010 Data_process: !
+
1010  END LOOP  
1020   Count=Count+1
+
1020   OUTPUT @Src;"H"      !Operate OFF
1030   Y1=(Volt/Vc)*100    !전압 [%]
+
1030  RETURN
1040   Y2=(Curr/Ic)*100    !전류 [%]
+
1040 Data_process: !
1050  IF Test$="C" THEN
+
1050   Count=Count+1
1060    Y(1)=-Y1
+
1060   Y1=(Volt/Vc)*100    !전압 [%]
1070    Y(2)=-Y2
+
1070   Y2=(Curr/Ic)*100    !전류 [%]
1080  ELSE  !"D"
+
1080  !IF Test$="C" THEN
1090     Y(1)=Y1
+
1090  !  Y(1)=-Y1
1100     Y(2)=Y2
+
1100  !  Y(2)=-Y2
1110  END IF  
+
1110  !ELSE  !"D"
1120   CONTROL @Strip;SET("POINT LOCATION":Time,"VALUES":Y(*))
+
1120     Y(1)=Y1
1130   PRINT "Count=";Count;", T=";PROUND(Time,-4);"m, V=";Volt;"V, I=";Curr;"A"
+
1130     Y(2)=Y2
1140   OUTPUT @File;Count,PROUND(Time,-4),Volt,Curr
+
1140  !END IF
1150   Pre_v=Data
+
1150   CONTROL @Strip;SET("POINT LOCATION":Time,"VALUES":Y(*))
1160   RETURN
+
1160   PRINT "Count=";Count;", T=";PROUND(Time,-4);"m, V=";Volt;"V, I=";Curr;"A"
1170 Reading: !
+
1170   OUTPUT @File;Count,PROUND(Time,-4),Volt,Curr
1180 ! 전압을 측정하면 나타나는 데이터 포맷
+
1180   Pre_v=Data
1190 ! 12345678901234
+
1190   RETURN
1200 !"DV +03.857E+0"   원래
+
1191 Reading: !
1210 !" DV +03.857E+0"  앞에 공백이 하나 추가되어 나온 적이 있다.
+
1192  LOOP
1220 ! 전압를 측정하면 나타나는 데이터 포맷
+
1193      GOSUB Reading1
1230 ! 12345678901234
+
1194      EXIT IF Data<>0
1240 !"DI +0.6310E+0"  원래
+
1195  END LOOP
1250   ENTER @Src;A1$
+
1196   RETURN
1260   A2$=TRIM$(A1$)  !앞뒤 공백 모두 없앤다
+
1200 Reading1: !
1270   Data=VAL(A2$[3,13])
+
1210 ! 전압을 측정하면 나타나는 데이터 포맷
1280  Data=PROUND(Data,-3)  !특히 mA단위까지만 나오도록, 0.1mA까지 측정되면 너무 많은 데이터가 획득되므로
+
1220 ! 12345678901234
1290   RETURN
+
1230 !"DV +03.857E+0"  원래
1300 Fileopen: !
+
1240 !" DV +03.857E+0"  앞에 공백이 하나 추가되어 나온 적이 있다.
1310   DIM Filename$[20],Dhms$[8]
+
1250 ! 전압를 측정하면 나타나는 데이터 포맷
1320   Time$=TIME$(TIMEDATE)            !하루가 늦게 계산되므로 하루 추가 +24*3600
+
1260 ! 12345678901234
1330   Date$=DATE$(TIMEDATE)
+
1270 !"DI +0.6310E+0"  원래
1340   Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
+
1280   ENTER @Src;A1$
1350   Filename$=Dhms$&".txt"
+
1290   A2$=TRIM$(A1$)  !앞뒤 공백 모두 없앤다
1360   CREATE Filename$,1
+
1300   Data=VAL(A2$[3,13])
1370   ASSIGN @File TO Filename$;FORMAT ON
+
1310 ! Data=PROUND(Data,-3)  !소수점 3자리. 0.1mA까지 측정되면 너무 많은 데이터가 획득되므로
1380   RETURN
+
1320  Data=DROUND(Data,3)  !유효수자 3자리
1390 Fileclose:!
+
1330   RETURN
1400   ASSIGN @File TO *
+
1340 Fileopen: !
1410   RETURN
+
1350   DIM Filename$[20],Dhms$[8]
1420 Battery_select:    !
+
1360   Time$=TIME$(TIMEDATE)            !하루가 늦게 계산되므로 하루 추가 +24*3600
1430   DIM Msg$[25]
+
1370   Date$=DATE$(TIMEDATE)
1440   INTEGER Size,Length,Btn,Battery_no
+
1380   Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
1450   Size=3
+
1390   Filename$=Dhms$&".txt"
1460   Length=4
+
1400   CREATE Filename$,1
1470   ALLOCATE Battery$(Size)[Length]
+
1410   ASSIGN @File TO Filename$;FORMAT ON
1480   Battery$(1)="Li"
+
1420   RETURN
1490   Battery$(2)="NiCd"
+
1430 Fileclose:!
1500   Battery$(3)="EDLC"
+
1440   ASSIGN @File TO *
1510   Msg$="배터리 종류"
+
1450   RETURN
1520   DIALOG "LIST",Msg$,Btn;SET("ITEMS":Battery$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Battery_no)
+
1460 Battery_select:    !
1530   Battery_no=Battery_no+1
+
1470   DIM Msg$[25]
1540   RETURN
+
1480   INTEGER Size,Length,Btn,Battery_no
1550 Inst_close:!
+
1490   Size=4
1560   OUTPUT @Src;"H"      !Operate OFF
+
1500   Length=6
1570   RETURN
+
1510   ALLOCATE Battery$(Size)[Length]
1580 Inst_open: !
+
1520   Battery$(1)="Li"
1590   ASSIGN @Src TO 714    !advantest TR6143
+
1530   Battery$(2)="NiCd"
1600   RETURN
+
1540   Battery$(3)="3-NiCd"
1610 Stimulus_select: !
+
1550  Battery$(4)="EDLC"
1620   SELECT Battery$(Battery_no)
+
1560   Msg$="배터리 종류"
1630   CASE "Li"
+
1570   DIALOG "LIST",Msg$,Btn;SET("ITEMS":Battery$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Battery_no)
1640     Vc=4.2  !4.2V 충전전압
+
1580   Battery_no=Battery_no+1
1650     Vd=3.2 !3.2V 방전종료전압
+
1590   RETURN
1660     Ic=2   !100mA 충전전류
+
1600 Inst_close:!
1670     Ic_end=.1   !충전 종료 전류
+
1610   OUTPUT @Src;"H"      !Operate OFF
1680     Id=2    !100mA 방전전류
+
1620   RETURN
1690   CASE "NiCd"
+
1630 Inst_open: !
1700     Vc=1.5 !1.5V 충전전압
+
1640   ASSIGN @Src TO 714    !advantest TR6143
1710     Vd=.9  !0.9V 방전종료전압
+
1650   RETURN
1720     Ic=.001 !100mA 충전전류
+
1660 Stimulus_select: !
1730     Ic_end=.0001 !충전 종료 전류
+
1670   SELECT Battery$(Battery_no)
1740     Id=.!100mA 방전전류
+
1680   CASE "Li"
1750   CASE ""
+
1690     Vc=4.2  !4.2V 충전전압
1760     Msg$="충전전류[A], 방전전류[A], 충전종료전류[A], "
+
1700     Vd=3.7 !3.2V 방전종료전압
1770  END SELECT
+
1710     Ic=2     !100mA 충전전류
1780 !GOSUB Dialog_string3
+
1720     Ic_end=1     !충전 종료 전류
1790  RETURN
+
1730     Id=-2    !100mA 방전전류 음수
1800 Chart_var:  !
+
1740   CASE "NiCd" !표준 1.2V
1810  X_origin=0 !time=0
+
1750     Vc=1.3 !1.5V 충전전압
1820  X_range=2*60  !24 hours
+
1760     Vd=.9  !0.9V 방전종료전압
1830   X_axis_label$="Elapsed Time [Min]"
+
1770     Ic=.001 !100mA 충전전류
1840   Y_origin=-110
+
1780     Ic_end=.0005 !충전 종료 전류
1850  Y_range=220
+
1790     Id=-.0001 !100mA 방전전류 음수
1860  Y_axis_label$="Volt & Current [%]"
+
1800   CASE "3-NiCd" !표준 3.6V
1870   RETURN
+
1810     Vc=4.7  !4.1V 충전전압
1880 Init_chart:  !
+
1820    Vd=1.5 !3.1V 방전종료전압
1890   DIM X_axis_label$[25],Y_axis_label$[25]
+
1830    Ic=.0005 !100mA 충전전류
1900   INTEGER Trace_num
+
1840    Ic_end=.00035 !충전 종료 전류
1910   INTEGER Screen_dims(1:2),Gwindow_dims(1:4)
+
1850    Id=-5.E-5 !100mA 방전전류 음수
1920   REAL Y(1:2)  !Y(1) Volt, Y(2) Current
+
1860   CASE ""
1930   GESCAPE CRT,36;Screen_dims(*) ! Get screen width and height.
+
1870    Msg$="충전전류[A], 방전전류[A], 충전종료전류[A], "
1940  !
+
1880   END SELECT
1950  ! Set the dimensions of the graphics window using GESCAPE 33 so
+
1890  !GOSUB Dialog_string3
1960  ! that it is centered on the screen.
+
1900   RETURN
1970  !
+
1910 Chart_var:  !
1980  Gwindow_dims(1)=Screen_dims(1)*.25 ! X of upper left.
+
1920  X_origin=0 !time=0
1990  Gwindow_dims(2)=Screen_dims(2)*.2  ! Y of upper left.
+
1930  X_range=12*60      !1  hours *60min
2000  Gwindow_dims(3)=Screen_dims(1)*.7  ! Width.
+
1940   X_axis_label$="Elapsed Time [Min]"
2010  Gwindow_dims(4)=Screen_dims(2)*.6  ! Height.
+
1950  Y_origin=-110
2020  GESCAPE CRT,33;Gwindow_dims(*)    ! Set graphics window geometry.
+
1960  Y_range=220
2030  !
+
1970  Y_axis_label$="Volt & Current [%]"
2040  GESCAPE CRT,35 ! Move the graphics window to the top.
+
1980   RETURN
 +
1990 Init_chart:  !
 +
2000  DIM X_axis_label$[25],Y_axis_label$[25]
 +
2010  INTEGER Trace_num
 +
2020   INTEGER Screen_dims(1:2),Gwindow_dims(1:4)
 +
2030   REAL Y(1:2)  !Y(1) Volt, Y(2) Current
 +
2040   GESCAPE CRT,36;Screen_dims(*) ! Get screen width and height.
 
2050  !
 
2050  !
2060  ! Create a stripchart.  Make it invisible until all changes are made.
+
2060 ! Set the dimensions of the graphics window using GESCAPE 33 so
2070 !
+
2070  ! that it is centered on the screen.
2080   ASSIGN @Strip TO WIDGET "STRIPCHART";SET("VISIBLE":0)
+
2080  !
2090 !
+
2090  Gwindow_dims(1)=Screen_dims(1)*.25 ! X of upper left.
2100 ! Set the overall attributes.
+
2100  Gwindow_dims(2)=Screen_dims(2)*.2  ! Y of upper left.
2110 !
+
2110  Gwindow_dims(3)=Screen_dims(1)*.7  ! Width.
2120   CONTROL @Strip;SET("TITLE":"Data Logger")
+
2120  Gwindow_dims(4)=Screen_dims(2)*.6  ! Height.
2130   CONTROL @Strip;SET("MINIMUM SCROLL":2)
+
2130  GESCAPE CRT,33;Gwindow_dims(*)    ! Set graphics window geometry.
2140   CONTROL @Strip;SET("MOVABLE":0)
+
2140  !
2150   CONTROL @Strip;SET("MAXIMIZABLE":0)
+
2150  GESCAPE CRT,35 ! Move the graphics window to the top.
2160   CONTROL @Strip;SET("X":0,"Y":0)
+
2160  !
2170 !
+
2170 ! Create a stripchart.  Make it invisible until all changes are made.
2180 ! Size the stripchart to exactly fill the graphics window.
+
2180 !
2190  !
+
2190   ASSIGN @Strip TO WIDGET "STRIPCHART";SET("VISIBLE":0)
2200  Vert_borders=26
+
2200 !
2210  Horiz_borders=8
+
2210 ! Set the overall attributes.
2220  Height=Gwindow_dims(4)-Vert_borders
+
2220 !
2230  Width=Gwindow_dims(3)-Horiz_borders
+
2230   CONTROL @Strip;SET("TITLE":"Data Logger")
2240  CONTROL @Strip;SET("WIDTH":Width,"HEIGHT":Height)
+
2240   CONTROL @Strip;SET("MINIMUM SCROLL":2)
2250  !
+
2250   CONTROL @Strip;SET("MOVABLE":0)
2260  CONTROL @Strip;SET("CURRENT AXIS":"X")
+
2260   CONTROL @Strip;SET("MAXIMIZABLE":0)
2270  CONTROL @Strip;SET("ORIGIN":X_origin,"RANGE":X_range)
+
2270   CONTROL @Strip;SET("X":0,"Y":0)
2280  CONTROL @Strip;SET("AXIS LABEL":X_axis_label$)
+
2280 !
2290  !CONTROL @Strip;SET("DIGITS":5)
+
2290 ! Size the stripchart to exactly fill the graphics window.
 
2300  !
 
2300  !
2310  CONTROL @Strip;SET("CURRENT AXIS":"Y")
+
2310  Vert_borders=26
2320  CONTROL @Strip;SET("ORIGIN":Y_origin,"RANGE":Y_range)
+
2320  Horiz_borders=8
2330  CONTROL @Strip;SET("AXIS LABEL":Y_axis_label$)
+
2330  Height=Gwindow_dims(4)-Vert_borders
2340 !
+
2340   Width=Gwindow_dims(3)-Horiz_borders
2350  CONTROL @Strip;SET("VISIBLE":1) ! Show the stripchart.
+
2350  CONTROL @Strip;SET("WIDTH":Width,"HEIGHT":Height)
 
2360  !
 
2360  !
2370  RETURN
+
2370   CONTROL @Strip;SET("CURRENT AXIS":"X")
2380   END
+
2380  CONTROL @Strip;SET("ORIGIN":X_origin,"RANGE":X_range)
 +
2390  CONTROL @Strip;SET("AXIS LABEL":X_axis_label$)
 +
2400  !CONTROL @Strip;SET("DIGITS":5)
 +
2410  !
 +
2420  CONTROL @Strip;SET("CURRENT AXIS":"Y")
 +
2430  CONTROL @Strip;SET("ORIGIN":Y_origin,"RANGE":Y_range)
 +
2440  CONTROL @Strip;SET("AXIS LABEL":Y_axis_label$)
 +
2450  !
 +
2460  CONTROL @Strip;SET("VISIBLE":1) ! Show the stripchart.
 +
2470  !
 +
2480   RETURN
 +
2490   END

2020년 1월 10일 (금) 09:25 판

10  ! Advantest TR6143

20     ! 2020-01-08
30     ! 기능 및 범위: V3,V4,V5,V6 = 320mV 3.2V 32V 110V(default)
40     !               I-1, I0, I1, I2, I3, I4 = 32uA 320uA 3.2mA 32mA 320mA 2A
50     ! 0.01mV~110V
60     ! 입력숫자: D + dddd unit, 예 D + 0500.0 MA
70     ! 출력 on/off E, H
80     ! response mode slow/fast RP0, PR1
90     ! integration time 10ms, 1PLC, 10PLC, 100PLC = IT2, IT3, IT4, IT5
100    OPTION BASE 1
110    GOSUB Battery_select
120    GOSUB Fileopen
130    GOSUB Inst_open
140    GOSUB Stimulus_select
150    GOSUB Measure
160  ! GOSUB Inst_close
170    GOSUB Fileclose
180    STOP
190 Measure:  !
200    INTEGER Count,I
210    DIM Cmd$[25],A1$[14],A2$[14],Test$[1]
220    OUTPUT @File;"No.,Time[m],Volt[V],Curr[A]"
230    GOSUB Chart_var
240    GOSUB Init_chart
250    Wait=.001      !계측기 세팅을 한 후, 첫 측정에서 측정값이 0이 나오는 현상 때문에 잠시 대기 시간
260    T0=TIMEDATE
270    Count=0
280    FOR I=1 TO 200 !배터리 충방전실험을 5회 실시
290      GOSUB Cycle
300    NEXT I
310    RETURN
320 Cycle:  !
330  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
340  !충전. 정전류, 전압제한(전압을 읽는다.)
350  !전류 전압을 +로 표기한다.
360  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
370    Test$="C"
380    Cmd$="I4"   !2A range
390    Cmd$=Cmd$&" D"&VAL$(Ic)&"A"     !D1.0A
400    Cmd$=Cmd$&" D"&VAL$(Vc)&"V"     !D4.2V
410    OUTPUT @Src;Cmd$   !"I4 D1A D4.2V"
420    OUTPUT @Src;"E"      !Operate ON
430    WAIT Wait
440    Pre_v=0
450    LOOP
460      Time=(TIMEDATE-T0)/60
470      GOSUB Reading
480      Volt=Data
490      Curr=Ic
500      IF Data>Pre_v THEN   !측정값이 직전값보다 크면
510        GOSUB Data_process
520      END IF 
530    EXIT IF Volt>=Vc   !측정 전압이 충전최고 전압에 도달하면
540    END LOOP 
550    OUTPUT @Src;"H"      !Operate OFF
560  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
570  !충전, 충전 최고전압에 도달하면. 정전압, 전류제한(전류를 읽는다.)
580  !전류 전압을 +로 표기한다.
590  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
600    Test$="C"
610    Cmd$="V5"   !32V range
620    Cmd$=Cmd$&" D"&VAL$(Vc)&"V"     !D4.2V
630    Cmd$=Cmd$&" D"&VAL$(Ic)&"A"     !D1.0A
640    OUTPUT @Src;Cmd$   !"V5 D 4.2V D 1.0A"
650    OUTPUT @Src;"E"      !Operate ON
660    WAIT Wait
670    Pre_v=Curr
680    LOOP
690      Time=(TIMEDATE-T0)/60
700      GOSUB Reading   !충전전압에 도달되어, 흐르는 전류를 측정한다.
710      Curr=Data
720      Volt=Vc
730      IF Data<Pre_v THEN   !측정값이 직전값보다 작으면
740        GOSUB Data_process
750      END IF 
760    EXIT IF Curr<=Ic_end   !현재 전류가 종료전류에 도달하면
770    END LOOP 
780    OUTPUT @Src;"H"      !Operate OFF
790  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
800  !방전 전류는 - 이다
810  !전류 전압을 +로 표기한다.
820  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
830    !charge  volt limit=Vc
840    Test$="D"
850    Cmd$="I4"   !2A range
860    Cmd$=Cmd$&" D"&VAL$(Id)&"A"      !D-1.0A
870    Cmd$=Cmd$&" D"&VAL$(Vc)&"V"     !D4.2V
880    OUTPUT @Src;Cmd$   !"I4 D1A D4.2V"
890    OUTPUT @Src;"E"      !Operate ON
900    WAIT Wait
910    Pre_v=Vc
920    LOOP
930      Time=(TIMEDATE-T0)/60
940      GOSUB Reading   !일정 전류 방전      , 전압이 측정된다.
950      Volt=Data
960      Curr=Id
970      IF Data<Pre_v THEN   !측정값이 직전값보다 작으면
980        GOSUB Data_process
990      END IF 
1000   EXIT IF Volt<=Vd   !현재 전압이 충전전압에 도달하면
1010   END LOOP 
1020   OUTPUT @Src;"H"      !Operate OFF
1030   RETURN
1040 Data_process: !
1050   Count=Count+1
1060   Y1=(Volt/Vc)*100     !전압 [%]
1070   Y2=(Curr/Ic)*100    !전류 [%]
1080  !IF Test$="C" THEN
1090  !  Y(1)=-Y1
1100  !  Y(2)=-Y2
1110  !ELSE   !"D"
1120     Y(1)=Y1
1130     Y(2)=Y2
1140  !END IF
1150   CONTROL @Strip;SET("POINT LOCATION":Time,"VALUES":Y(*))
1160   PRINT "Count=";Count;", T=";PROUND(Time,-4);"m, V=";Volt;"V, I=";Curr;"A"
1170   OUTPUT @File;Count,PROUND(Time,-4),Volt,Curr
1180   Pre_v=Data
1190   RETURN
1191 Reading: !
1192   LOOP
1193      GOSUB Reading1
1194      EXIT IF Data<>0
1195   END LOOP 
1196   RETURN
1200 Reading1: !
1210 ! 전압을 측정하면 나타나는 데이터 포맷
1220 ! 12345678901234
1230 !"DV +03.857E+0"   원래
1240 !" DV +03.857E+0"  앞에 공백이 하나 추가되어 나온 적이 있다.
1250 ! 전압를 측정하면 나타나는 데이터 포맷
1260 ! 12345678901234
1270 !"DI +0.6310E+0"   원래
1280   ENTER @Src;A1$
1290   A2$=TRIM$(A1$)   !앞뒤 공백 모두 없앤다
1300   Data=VAL(A2$[3,13])
1310 ! Data=PROUND(Data,-3)  !소수점 3자리. 0.1mA까지 측정되면 너무 많은 데이터가 획득되므로
1320   Data=DROUND(Data,3)  !유효수자 3자리
1330   RETURN
1340 Fileopen: !
1350   DIM Filename$[20],Dhms$[8]
1360   Time$=TIME$(TIMEDATE)             !하루가 늦게 계산되므로 하루 추가 +24*3600
1370   Date$=DATE$(TIMEDATE)
1380   Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
1390   Filename$=Dhms$&".txt"
1400   CREATE Filename$,1
1410   ASSIGN @File TO Filename$;FORMAT ON
1420   RETURN
1430 Fileclose:!
1440   ASSIGN @File TO *
1450   RETURN
1460 Battery_select:     !
1470   DIM Msg$[25]
1480   INTEGER Size,Length,Btn,Battery_no
1490   Size=4
1500   Length=6
1510   ALLOCATE Battery$(Size)[Length]
1520   Battery$(1)="Li"
1530   Battery$(2)="NiCd"
1540   Battery$(3)="3-NiCd"
1550   Battery$(4)="EDLC"
1560   Msg$="배터리 종류"
1570   DIALOG "LIST",Msg$,Btn;SET("ITEMS":Battery$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Battery_no)
1580   Battery_no=Battery_no+1
1590   RETURN
1600 Inst_close:!
1610   OUTPUT @Src;"H"       !Operate OFF
1620   RETURN
1630 Inst_open: !
1640   ASSIGN @Src TO 714    !advantest TR6143
1650   RETURN
1660 Stimulus_select: !
1670   SELECT Battery$(Battery_no)
1680   CASE "Li"
1690     Vc=4.2  !4.2V 충전전압
1700     Vd=3.7  !3.2V 방전종료전압
1710     Ic=2     !100mA 충전전류
1720     Ic_end=1     !충전 종료 전류
1730     Id=-2    !100mA 방전전류 음수
1740   CASE "NiCd"  !표준 1.2V
1750     Vc=1.3  !1.5V 충전전압
1760     Vd=.9   !0.9V 방전종료전압
1770     Ic=.001 !100mA 충전전류
1780     Ic_end=.0005  !충전 종료 전류
1790     Id=-.0001 !100mA 방전전류 음수
1800   CASE "3-NiCd"  !표준 3.6V
1810     Vc=4.7  !4.1V 충전전압
1820     Vd=1.5  !3.1V 방전종료전압
1830     Ic=.0005 !100mA 충전전류
1840     Ic_end=.00035 !충전 종료 전류
1850     Id=-5.E-5 !100mA 방전전류 음수
1860   CASE ""
1870     Msg$="충전전류[A], 방전전류[A], 충전종료전류[A], "
1880   END SELECT 
1890  !GOSUB Dialog_string3
1900   RETURN
1910 Chart_var:   !
1920   X_origin=0 !time=0
1930   X_range=12*60       !1  hours *60min
1940   X_axis_label$="Elapsed Time [Min]"
1950   Y_origin=-110
1960   Y_range=220
1970   Y_axis_label$="Volt & Current [%]"
1980   RETURN
1990 Init_chart:   !
2000   DIM X_axis_label$[25],Y_axis_label$[25]
2010   INTEGER Trace_num
2020   INTEGER Screen_dims(1:2),Gwindow_dims(1:4)
2030   REAL Y(1:2)   !Y(1) Volt, Y(2) Current
2040   GESCAPE CRT,36;Screen_dims(*) ! Get screen width and height.
2050  !
2060  ! Set the dimensions of the graphics window using GESCAPE 33 so
2070  ! that it is centered on the screen.
2080  !
2090   Gwindow_dims(1)=Screen_dims(1)*.25 ! X of upper left.
2100   Gwindow_dims(2)=Screen_dims(2)*.2  ! Y of upper left.
2110   Gwindow_dims(3)=Screen_dims(1)*.7  ! Width.
2120   Gwindow_dims(4)=Screen_dims(2)*.6  ! Height.
2130   GESCAPE CRT,33;Gwindow_dims(*)     ! Set graphics window geometry.
2140  !
2150   GESCAPE CRT,35 ! Move the graphics window to the top.
2160  !
2170  ! Create a stripchart.  Make it invisible until all changes are made.
2180  !
2190   ASSIGN @Strip TO WIDGET "STRIPCHART";SET("VISIBLE":0)
2200  !
2210  ! Set the overall attributes.
2220  !
2230   CONTROL @Strip;SET("TITLE":"Data Logger")
2240   CONTROL @Strip;SET("MINIMUM SCROLL":2)
2250   CONTROL @Strip;SET("MOVABLE":0)
2260   CONTROL @Strip;SET("MAXIMIZABLE":0)
2270   CONTROL @Strip;SET("X":0,"Y":0)
2280  !
2290  ! Size the stripchart to exactly fill the graphics window.
2300  !
2310   Vert_borders=26
2320   Horiz_borders=8
2330   Height=Gwindow_dims(4)-Vert_borders
2340   Width=Gwindow_dims(3)-Horiz_borders
2350   CONTROL @Strip;SET("WIDTH":Width,"HEIGHT":Height)
2360  !
2370   CONTROL @Strip;SET("CURRENT AXIS":"X")
2380   CONTROL @Strip;SET("ORIGIN":X_origin,"RANGE":X_range)
2390   CONTROL @Strip;SET("AXIS LABEL":X_axis_label$)
2400  !CONTROL @Strip;SET("DIGITS":5)
2410  !
2420   CONTROL @Strip;SET("CURRENT AXIS":"Y")
2430   CONTROL @Strip;SET("ORIGIN":Y_origin,"RANGE":Y_range)
2440   CONTROL @Strip;SET("AXIS LABEL":Y_axis_label$)
2450  !
2460   CONTROL @Strip;SET("VISIBLE":1) ! Show the stripchart.
2470  !
2480   RETURN
2490   END