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

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

2020년 1월 16일 (목) 12:19 판

10  ! Advantest TR6143

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