TR6143-bas

Togotech (토론 | 기여)님의 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