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

 
(같은 사용자의 중간 판 하나는 보이지 않습니다)
1번째 줄: 1번째 줄:
10    ! [[Advantest TR6143]] <pre>
+
[[Advantest TR6143]]  
20    ! 2020-01-10
+
<pre>
30    OPTION BASE 1
+
10    !
40    GOSUB Battery_select
+
20    ! 2020-01-17 배터리 충방전 프로그램
50    GOSUB Fileopen
+
30     ! 2020-01-26 PTC용 표준 VI 측정추가
60    GOSUB Inst_open
+
40     OPTION BASE 1
70    GOSUB Stimulus_select
+
50    INTEGER No_cycle  !충반전 실험 횟수
80    GOSUB Measure
+
60    INTEGER Size,Length,Btn
90    GOSUB Fileclose
+
70    DIM Msg$[25]
100    STOP
+
80    No_cycle=2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
110 Measure:  !
+
90    Wait=.1   !계측기 세팅을 한 후, 첫 측정에서 측정값이 0이 나오는 현상 때문에 잠시 대기 시간
120    INTEGER Count,I
+
100   GOSUB Dut_select
130    DIM Cmd$[25],A1$[14],A2$[14],Test$[1]
+
110   GOSUB Stimulus_select
140    OUTPUT @File1;"No.,Time[m],Volt[V],Curr[A]"
+
120   GOSUB Fileopen
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]"
+
130    GOSUB Inst6143_open
160   GOSUB Chart_var
+
140    GOSUB Measure
170    GOSUB Init_chart
+
150    GOSUB Fileclose
180    Wait=.001      !계측기 세팅을 한 후, 첫 측정에서 측정값이 0이 나오는 현상 때문에 잠시 대기 시간
+
160  ! PAUSE
190   Count=0
+
170    STOP
200   Time_zero=TIMEDATE
+
180 Dut_select:  !
210   FOR I=1 TO 100 !배터리 충방전실험을 5회 실시
+
190    INTEGER Dut_no
220      C_i_capa=0
+
200    Size=4
230      C_w_capa=0
+
210    Length=7
240      D_i_capa=0
+
220    ALLOCATE Dut$(Size)[Length]
250      D_w_capa=0
+
230   Dut$(1)="BATTERY"
260      GOSUB Cycle
+
240   Dut$(2)="EDLC"
270      OUTPUT @File2;I,C_time,C_i_capa,C_w_capa,D_time,-D_i_capa,-D_w_capa
+
250    Dut$(3)="PTC"
280   NEXT I
+
260    Dut$(4)="tau"
290   RETURN
+
270    Msg$="DUT 종류"
300 Cycle:  !
+
280    DIALOG "LIST",Msg$,Btn;SET("ITEMS":Dut$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Dut_no)
310  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
290   Dut_no=Dut_no+1
320  !충전. +부호 정전류, 전압제한(전압을 읽는다.)
+
300   SELECT Dut$(Dut_no)
330  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
310    CASE "BATTERY"
340   Test$="C"
+
320      GOSUB Battery_select
350   Cmd$="I4"   !2A range
+
330   CASE "EDLC"
360   Cmd$=Cmd$&" D"&VAL$(Ic)&"A"    !D1.0A
+
340      GOSUB Edlc_select
370   Cmd$=Cmd$&" D"&VAL$(Vc)&"V"     !D4.2V
+
350   CASE "PTC"
380    OUTPUT @Src;Cmd$  !"I4 D1A D4.2V"
+
360      GOSUB Ptc_select
390    OUTPUT @Src;"E"      !Operate ON
+
370    CASE "tau"
400    WAIT Wait
+
380     GOSUB Tau_select
410   C_start_time=TIMEDATE
+
390   END SELECT
420    Pre_v=0 !최초 측정 전압=0으로 가정한다.
+
400    RETURN
430    Pre_t=C_start_time
+
410 Battery_select:    !
440    Curr=Ic
+
420    INTEGER Battery_no
450    LOOP
+
430    Size=7
460     T=TIMEDATE
+
440    Length=8
470     Time_elapsed=(T-Time_zero)/60
+
450    ALLOCATE Battery$(Size)[Length]
480     GOSUB Reading
+
460   Battery$(1)="Li"
490     Volt=Data
+
470   Battery$(2)="NiCd"
500     IF Volt>Pre_v THEN  !충전 전압이 상승하면
+
480   Battery$(3)="3-NiCd"
510       GOSUB Data_process
+
490   Battery$(4)="    "
520        C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600)  !mAh = mA x hour
+
500   Battery$(5)="BAT"
530       C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600)     !Wh = A x V x hour
+
510   Battery$(6)="Li-S4"  !4개 직렬, 각셀을 34970A로 측정
540        Pre_t=T
+
520    Battery$(7)="GrandMax"
550      END IF
+
530   Msg$="배터리 종류"
560    EXIT IF Volt>=Vc  !측정 전압이 충전최고 전압에 도달하면
+
540    DIALOG "LIST",Msg$,Btn;SET("ITEMS":Battery$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Battery_no)
570   END LOOP
+
550    Battery_no=Battery_no+1
580    OUTPUT @Src;"H"      !Operate OFF
+
560    RETURN
590 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
570 Edlc_select:  !
600  !충전, 충전 최고전압에 도달하면. 정전압, 전류제한(전류를 읽는다.)
+
580    INTEGER Edlc_no
610  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
590   Size=4
620    Cmd$="V5"   !32V range
+
600    Length=10
630   Cmd$=Cmd$&" D"&VAL$(Vc)&"V"    !D4.2V
+
610    ALLOCATE Edlc$(Size)[Length]
640   Cmd$=Cmd$&" D"&VAL$(Ic)&"A"     !D1.0A
+
620    Edlc$(1)="2.7V 0~1F"
650   OUTPUT @Src;Cmd$   !"V5 D 4.2V D 1.0A"
+
630    Edlc$(2)="2.7V 1~10F"
660   OUTPUT @Src;"E"     !Operate ON
+
640    Edlc$(3)="5.5V 0~1F"
670   WAIT Wait
+
650    Edlc$(4)="5.5V 1~10F"
680   Pre_v=Ic  !충전 전류(Ic)를 초기값으로 기억한다.
+
660    Msg$="EDLC 종류"
690    Volt=Vc  !충전전압은 일정하다.
+
670    DIALOG "LIST",Msg$,Btn;SET("ITEMS":Edlc$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Edlc_no)
700   LOOP
+
680   Edlc_no=Edlc_no+1
710      T=TIMEDATE
+
690    RETURN
720      Time_elapsed=(T-Time_zero)/60
+
700 Ptc_select:  !
730      GOSUB Reading  !충전전압에 도달되었기 때문에, 서서히 줄어드는 충전 전류를 측정한다.
+
710    INTEGER Ptc_no
740      Curr=Data
+
720   Size=6
750      IF Curr<Pre_v THEN   !측정 전류가 서서히 낮아지면
+
730    Length=6
760        GOSUB Data_process
+
740    ALLOCATE Ptc$(Size)[Length]
770        C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600)  !mAh = mA x hour
+
750    Ptc$(1)="SPL1"
780        C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600)    !WA = A x V x hour
+
760   Ptc$(2)="   "
790        Pre_t=T
+
770   Ptc$(3)="   "
800      END IF
+
780   Msg$="PTC 종류"
810    EXIT IF Curr<=Ic_end  !현재 전류가 종료전류에 도달하면
+
790   DIALOG "LIST",Msg$,Btn;SET("ITEMS":Ptc$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Ptc_no)
820   END LOOP
+
800   Ptc_no=Ptc_no+1
830    C_time=(T-C_start_time)/60
+
810    RETURN
840   OUTPUT @Src;"H"      !Operate OFF
+
820 Tau_select:  !
850  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
830    INTEGER Tau_no
860  !방전 전류는 -로 표기한다.
+
840    Size=6
870  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
850    Length=25
880    Test$="D"
+
860    ALLOCATE Tau$(Size)[Length]
890    Cmd$="I4"  !2A range
+
870    Tau$(1)="V12T100"   !12V 100sec
900    Cmd$=Cmd$&" D"&VAL$(Id)&"A"      !D-1.0A
+
880    Tau$(2)="V12T10"
910    Cmd$=Cmd$&" D"&VAL$(Vc)&"V"    !D4.2V
+
890    Tau$(3)="    "
920    OUTPUT @Src;Cmd$  !"I4 D1A D4.2V"
+
900    Msg$="Tau(Time-Constant) 종류"
930    OUTPUT @Src;"E"      !Operate ON
+
910    DIALOG "LIST",Msg$,Btn;SET("ITEMS":Tau$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Tau_no)
940    WAIT Wait
+
920    Tau_no=Tau_no+1
950    Pre_v=Vc
+
930    RETURN
960    D_start_time=TIMEDATE
+
940 Stimulus_select: !
970    Pre_t=D_start_time
+
950   SELECT Dut$(Dut_no)
980    Curr=Id    !방전전류(-값을 갖는다.)는 일정하다.
+
960   CASE "BATTERY"
990    LOOP
+
970     SELECT Battery$(Battery_no)
1000    T=TIMEDATE
+
980      CASE "Li"
1010     Time_elapsed=(T-Time_zero)/60
+
990        Vc=4.2!4.2V 충전전압        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1020    GOSUB Reading  !일정 전류 방전      , 전압이 측정된다.
+
1000      Vd=3.2!3.2V 방전종료전압    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1030    Volt=Data
+
1010      Ic=2  !100mA 충전전류      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1040    IF Volt<Pre_v THEN  !측정전압이 서서히 낮아지면(방전이므로)
+
1020      Ic_end=.5  !충전 종료 전류  !!내부 저항 !!!!!!!!!!!!!!!!!!!!!!!!
1050      GOSUB Data_process
+
1030      Id=-2  !100mA 방전전류 음수  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1060      D_i_capa=D_i_capa+(Curr*1000)*((T-Pre_t)/3600)  !mAh = mA x hour
+
1040     CASE "GrandMax"
1070      D_w_capa=D_w_capa+Curr*Volt*((T-Pre_t)/3600)    !Wh = A x V x hour
+
1050      Vc=4.4!4.2V 충전전압        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1080      Pre_t=T
+
1060      Vd=3.2!3.2V 방전종료전압    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1090    END IF
+
1070      Ic=1  !1A 충전전류      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1100  EXIT IF Volt<=Vd  !현재 전압이 충전전압에 도달하면
+
1080      Ic_end=.2 !200mA 충전 종료 전류   !!내부 저항 !!!!!!!!!!!!!!!!!!!!!!!!
1110  END LOOP
+
1090      Id=-1  !1A 방전전류 음수  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1120  D_time=(T-D_start_time)/60
+
1100    CASE "NiCd"!표준 1.2V
1130  OUTPUT @Src;"H"      !Operate OFF
+
1110      Vc=1.3!1.5V 충전전압
1140  RETURN
+
1120      Vd=.9!0.9V 방전종료전압
1150 Data_process: !
+
1130      Ic=.001!100mA 충전전류
1160 ! Count=Count+1
+
1140      Ic_end=.0005!충전 종료 전류
1170  Y1=(Volt*2/Vc)*100-100    !전압 [%]
+
1150      Id=-.0001!100mA 방전전류 음수
1180  Y2=(Curr/Ic)*100    !전류 [%]
+
1160    CASE "3-NiCd"!표준 3.6V
1190  Y(1)=Y1
+
1170      Vc=4.7!4.1V 충전전압
1200  Y(2)=Y2
+
1180      Vd=1.5!3.1V 방전종료전압
1210   CONTROL @Strip;SET("POINT LOCATION":Time_elapsed,"VALUES":Y(*))
+
1190      Ic=.0005!100mA 충전전류
1220  PRINT "Count=";Count;", T=";PROUND(Time_elapsed,-4);"m, V=";Volt;"V, I=";Curr;"A"
+
1200      Ic_end=.00035!충전 종료 전류
1230  OUTPUT @File1;Count,PROUND(Time_elapsed,-4),Volt,Curr
+
1210      Id=-5.E-5!100mA 방전전류 음수
1240  Pre_v=Data
+
1220    CASE "BAT"!표준 3.6V
1250  RETURN
+
1230      Vc=3.5!4.1V 충전전압
1260 Reading: !
+
1240      Vd=2.5!1.V 방전종료전압
1270  LOOP
+
1250      Ic=.02!100mA 충전전류
1280    GOSUB Reading1
+
1260      Ic_end=.006!충전 종료 전류
1290  EXIT IF Data<>0
+
1270      Id=-.005!-10mA 방전전류 음수
1300  END LOOP
+
1280    CASE "Li-S4"
1310  RETURN
+
1290      Vc=16.8!4.2x4 충전전압        4.2x4=16.8    3.7x4=14.8 nominal
1320 Reading1: !
+
1300      Vd=12.8!3.2x4 방전종료전압    3.2x4=12.8
1330 ! 전압을 측정하면 나타나는 데이터 포맷
+
1310      Ic=2 !2A 충전전류
1340 ! 12345678901234
+
1320      Ic_end=1!충전 종료 전류
1350 !"DV +03.857E+0"  원래
+
1330      Id=-2 !-2A 방전전류 음수
1360 !" DV +03.857E+0"  앞에 공백이 하나 추가되어 나온 적이 있다.
+
1340    CASE ""
1370 ! 전압를 측정하면 나타나는 데이터 포맷
+
1350      Msg$="충전전류[A], 방전전류[A], 충전종료전류[A], "
1380 ! 12345678901234
+
1360    END SELECT
1390 !"DI +0.6310E+0"  원래
+
1370   CASE "EDLC"
1400  ENTER @Src;A1$
+
1380    SELECT Edlc$(Edlc_no)
1410  A2$=TRIM$(A1$)  !앞뒤 공백 모두 없앤다
+
1390    CASE "2.7V 0~1F"
1420  Data=VAL(A2$[3,13])
+
1400      Vc=2.7        ! 충전전압
1430 ! Data=PROUND(Data,-3)  !소수점 3자리. 0.1mA까지 측정되면 너무 많은 데이터가 획득되므로
+
1410      Ic=.1        ! 충전전류
1440  Data=DROUND(Data,3)  !유효수자 3자리
+
1420      Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5%
1450  RETURN
+
1430      Id=-.1       ! 100mA 방전전류 음수
1460 Fileopen: !
+
1440      Vd=Vc*.05    ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
1470  DIM Filename1$[20],Filename2$[20],Dhms$[8]
+
1450    CASE "2.7V 1~10F"
1480  T=TIMEDATE
+
1460      Vc=2.7        ! 충전전압
1490  Time$=TIME$(T)            !하루가 늦게 계산되므로 하루 추가 +24*3600
+
1470      Ic=.5        ! 충전전류
1500  Date$=DATE$(T)
+
1480      Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5%
1510  Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
+
1490      Id=-.5        ! 500mA 방전전류 음수
1520   Filename1$=Dhms$&".txt"
+
1500      Vd=Vc*.05     ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
1530  CREATE Filename1$,1
+
1510    CASE "5.5V 0~1F"
1540  ASSIGN @File1 TO Filename1$;FORMAT ON
+
1520      Vc=5.5        ! 충전전압
1550  T=T+1          !1초 늦게
+
1530      Ic=.1        ! 충전전류
1560  Time$=TIME$(T)            !하루가 늦게 계산되므로 하루 추가 +24*3600
+
1540      Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5%
1570  Date$=DATE$(T)
+
1550      Id=-.1       ! 100mA 방전전류 음수
1580  Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
+
1560      Vd=Vc*.05    ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
1590  Filename2$=Dhms$&".txt"
+
1570    CASE "5.5V 1~10F"
1600  CREATE Filename2$,1
+
1580      Vc=5.5        ! 충전전압
1610  ASSIGN @File2 TO Filename2$;FORMAT ON
+
1590      Ic=.5        ! 충전전류
1620  RETURN
+
1600      Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5%
1630 Fileclose:!
+
1610      Id=-.5        ! 500mA 방전전류 음수
1640  ASSIGN @File1 TO *
+
1620      Vd=Vc*.05    ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
1650  ASSIGN @File2 TO *
+
1630    END SELECT
1660  RETURN
+
1640  CASE "PTC"
1670 Battery_select:     !
+
1650    SELECT Ptc$(Ptc_no)
1680  DIM Msg$[25]
+
1660    CASE "SPL1"
1690  INTEGER Size,Length,Btn,Battery_no
+
1670      Wait=1
1700  Size=4
+
1680      Volt_start=0
1710  Length=6
+
1690      Volt_stop=12
1720  ALLOCATE Battery$(Size)[Length]
+
1700      Volt_step=.05
1730  Battery$(1)="Li"
+
1710      Limit=2      !2A
1740  Battery$(2)="NiCd"
+
1720    END SELECT
1750  Battery$(3)="3-NiCd"
+
1730   CASE "tau"
1760  Battery$(4)="EDLC"
+
1740    SELECT Tau$(Tau_no)
1770  Msg$="배터리 종류"
+
1750    CASE "V12T100"
1780  DIALOG "LIST",Msg$,Btn;SET("ITEMS":Battery$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Battery_no)
+
1760      Volt_set=12 !12V
1790  Battery_no=Battery_no+1
+
1770      Time_set=100 !100sec
1800  RETURN
+
1780      Limit=2      !2A
1810 Inst_open: !
+
1790    CASE "V12T10"
1820  ASSIGN @Src TO 714    !advantest TR6143
+
1800      Volt_set=12  !12V
1830   RETURN
+
1810      Time_set=10  !100sec
1840 Stimulus_select: !
+
1820      Limit=2      !2A
1850  SELECT Battery$(Battery_no)
+
1830    END SELECT
1860  CASE "Li"
+
1840  END SELECT
1870    Vc=4.2 !4.2V 충전전압        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
1850 !GOSUB Dialog_string3
1880     Vd=3.2  !3.2V 방전종료전압    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
1860  RETURN
1890    Ic=2     !100mA 충전전류      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
1870 Fileopen:!
1900    Ic_end=.5    !충전 종료 전류   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
1880   DIM Dhms$[8]
1910     Id=-2    !100mA 방전전류 음수  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
1890  DIM Filename1$[20],Filename2$[20],Filename3$[20]
1920  CASE "NiCd"  !표준 1.2V
+
1900  T=TIMEDATE
1930     Vc=1.3  !1.5V 충전전압
+
1910  Time$=TIME$(T) !하루 추가 +24*3600
1940     Vd=.9  !0.9V 방전종료전압
+
1920  Date$=DATE$(T)
1950     Ic=.001 !100mA 충전전류
+
1930  Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
1960     Ic_end=.0005  !충전 종료 전류
+
1940  Filename1$=Dhms$&".txt"
1970     Id=-.0001 !100mA 방전전류 음수
+
1950  CREATE Filename1$,1
1980  CASE "3-NiCd" !표준 3.6V
+
1960   ASSIGN @File1 TO Filename1$;FORMAT ON
1990    Vc=4.7  !4.1V 충전전압
+
1970  SELECT Dut$(Dut_no)
2000    Vd=1.5  !3.1V 방전종료전압
+
1980  CASE "BATTERY","EDLC"
2010    Ic=.0005 !100mA 충전전류
+
1990    T=T+1      !1초 늦게
2020    Ic_end=.00035 !충전 종료 전류
+
2000     Time$=TIME$(T)
2030    Id=-5.E-5 !100mA 방전전류 음수
+
2010    Date$=DATE$(T)
2040  CASE ""
+
2020    Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
2050    Msg$="충전전류[A], 방전전류[A], 충전종료전류[A], "
+
2030     Filename2$=Dhms$&".txt"
2060  END SELECT
+
2040     CREATE Filename2$,1
2070  !GOSUB Dialog_string3
+
2050     ASSIGN @File2 TO Filename2$;FORMAT ON
2080   RETURN
+
2060     SELECT Dut$(Dut_no)
2090 Chart_var:   !
+
2070     CASE "BATTERY"
2100   X_origin=0 !time=0
+
2080      IF Battery$(Battery_no)="Li-S4" THEN!직렬배터리 4개에 대한 각 셀별 전압 기록용
2110   X_range=.1*60        !1  hours *60min
+
2090        T=T+1  !1초 늦게
2120   X_axis_label$="Elapsed Time [Min]"
+
2100        Time$=TIME$(T)
2130  Y_origin=-110
+
2110        Date$=DATE$(T)
2140  Y_range=220
+
2120        Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
2150  Y_axis_label$="Volt & Current [%]"
+
2130        Filename3$=Dhms$&".txt"
2160  RETURN
+
2140        CREATE Filename3$,1
2170 Init_chart:  !
+
2150        ASSIGN @File3 TO Filename3$;FORMAT ON
2180   DIM X_axis_label$[25],Y_axis_label$[25]
+
2160      END IF
2190  INTEGER Trace_num
+
2170    END SELECT
2200   INTEGER Screen_dims(1:2),Gwindow_dims(1:4)
+
2180  END SELECT
2210   REAL Y(1:2)  !Y(1) Volt, Y(2) Current
+
2190   RETURN
2220   GESCAPE CRT,36;Screen_dims(*) ! Get screen width and height.
+
2200 Fileclose:!
2230  !
+
2210   ASSIGN @File1 TO *
2240  ! Set the dimensions of the graphics window using GESCAPE 33 so
+
2220   SELECT Dut$(Dut_no)
2250  ! that it is centered on the screen.
+
2230   CASE "BATTERY"
2260  !
+
2240    ASSIGN @File2 TO *
2270   Gwindow_dims(1)=Screen_dims(1)*.25 ! X of upper left.
+
2250    IF Battery$(Battery_no)="Li-S4" THEN
2280  Gwindow_dims(2)=Screen_dims(2)*.2  ! Y of upper left.
+
2260      ASSIGN @File3 TO *
2290   Gwindow_dims(3)=Screen_dims(1)*.7  ! Width.
+
2270    END IF
2300   Gwindow_dims(4)=Screen_dims(2)*.6  ! Height.
+
2280   CASE "EDLC"
2310   GESCAPE CRT,33;Gwindow_dims(*)    ! Set graphics window geometry.
+
2290    ASSIGN @File2 TO *
2320  !
+
2300   END SELECT
2330   GESCAPE CRT,35 ! Move the graphics window to the top.
+
2310   RETURN
2340  !
+
2320 Measure: !
2350  ! Create a stripchart.  Make it invisible until all changes are made.
+
2330   INTEGER I
2360  !
+
2340  DIM Cmd$[25],A1$[14],A2$[14],Test$[1]
2370   ASSIGN @Strip TO WIDGET "STRIPCHART";SET("VISIBLE":0)
+
2350  SELECT Dut$(Dut_no)
2380  !
+
2360  CASE "tau","EDLC"
2390  ! Set the overall attributes.
+
2370    OUTPUT @File1;"No.,Time[s],Volt[V],Curr[A]"
2400  !
+
2380   CASE ELSE
2410  CONTROL @Strip;SET("TITLE":"Data Logger")
+
2390    OUTPUT @File1;"No.,Time[m],Volt[V],Curr[A]"
2420   CONTROL @Strip;SET("MINIMUM SCROLL":2)
+
2400   END SELECT
2430  CONTROL @Strip;SET("MOVABLE":0)
+
2410  GOSUB Chart_var
2440  CONTROL @Strip;SET("MAXIMIZABLE":0)
+
2420  GOSUB Init_chart
2450   CONTROL @Strip;SET("X":0,"Y":0)
+
2430   Count=0
2460  !
+
2440   Time_zero=TIMEDATE
2470  ! Size the stripchart to exactly fill the graphics window.
+
2450  SELECT Dut$(Dut_no)
2480  !
+
2460  CASE "BATTERY"
2490  Vert_borders=26
+
2470     GOSUB Measure_battery
2500  Horiz_borders=8
+
2480   CASE "EDLC"
2510  Height=Gwindow_dims(4)-Vert_borders
+
2490    GOSUB Measure_edlc
2520  Width=Gwindow_dims(3)-Horiz_borders
+
2500   CASE "PTC"
2530   CONTROL @Strip;SET("WIDTH":Width,"HEIGHT":Height)
+
2510    GOSUB Measure_vi
2540  !
+
2520  CASE "tau"
2550  CONTROL @Strip;SET("CURRENT AXIS":"X")
+
2530    GOSUB Measure_tau
2560  CONTROL @Strip;SET("ORIGIN":X_origin,"RANGE":X_range)
+
2540  END SELECT
2570  CONTROL @Strip;SET("AXIS LABEL":X_axis_label$)
+
2550  RETURN
2580  !CONTROL @Strip;SET("DIGITS":5)
+
2560 Measure_battery: !
2590  !
+
2570   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]"
2600  CONTROL @Strip;SET("CURRENT AXIS":"Y")
+
2580   FOR I=1 TO No_cycle  !배터리 충방전실험을 5회 실시
2610  CONTROL @Strip;SET("ORIGIN":Y_origin,"RANGE":Y_range)
+
2590    C_i_capa=0
2620  CONTROL @Strip;SET("AXIS LABEL":Y_axis_label$)
+
2600    C_w_capa=0
2630  !
+
2610    D_i_capa=0
2640  CONTROL @Strip;SET("VISIBLE":1) ! Show the stripchart.
+
2620    D_w_capa=0
2650  !
+
2630    GOSUB Cycle
 +
2640    OUTPUT @File2;I,C_time,C_i_capa,C_w_capa,D_time,-D_i_capa,-D_w_capa
 +
2650   NEXT I
 
2660  RETURN
 
2660  RETURN
2670  END
+
2670 Measure_edlc: !
 +
2680  OUTPUT @File2;"Cycle,Charge Time[s],Charge i Capa[mAh],Charge W Capa[mWh], Discharge Time[s],Discharge i Capa[mAh], Discharge W Capa[mWh], Capacity[F]"
 +
2690  FOR I=1 TO No_cycle
 +
2700    C_i_capa=0
 +
2710    C_w_capa=0
 +
2720    D_i_capa=0
 +
2730    D_w_capa=0
 +
2740    Capacity=0
 +
2750    GOSUB Cycle
 +
2760    OUTPUT @File2;I,C_time*60,C_i_capa,C_w_capa*1000,D_time*60,-D_i_capa,-D_w_capa*1000,Capacity
 +
2770  NEXT I
 +
2780  RETURN
 +
2790 Measure_vi:  !
 +
2800  FOR Volt=Volt_start TO Volt_stop STEP Volt_step
 +
2810    Cmd$="V5" !32V
 +
2820    Cmd$=Cmd$&" D "&VAL$(Volt)&"V"  !D 2.0V
 +
2830    Cmd$=Cmd$&" D "&VAL$(Limit)&"A"  !D 2.0A
 +
2840    OUTPUT @Src;Cmd$  !"V5 D 1V D 2A"
 +
2850    OUTPUT @Src;"E"    !Operate ON
 +
2860    T=TIMEDATE
 +
2870    Time_elapsed=(T-Time_zero)/60
 +
2880    GOSUB Reading
 +
2890    Curr=Data
 +
2900    GOSUB Data_process
 +
2910    WAIT Wait
 +
2920  NEXT Volt
 +
2930  OUTPUT @Src;"H"      !Operate OFF
 +
2940  RETURN
 +
2950 Measure_tau:  !
 +
2960  Volt=Volt_set
 +
2970  Cmd$="V5"  !32V
 +
2980  Cmd$=Cmd$&" D "&VAL$(Volt)&"V"    !D 12V
 +
2990  Cmd$=Cmd$&" D "&VAL$(Limit)&"A"    !D 2.0A
 +
3000  OUTPUT @Src;Cmd$    !"V5 D 1V D 2A"
 +
3010  OUTPUT @Src;"E"      !Operate ON
 +
3020  Time_zero=TIMEDATE
 +
3030  LOOP
 +
3040    T=TIMEDATE
 +
3050    Time_elapsed=(T-Time_zero)  !second
 +
3060    GOSUB Reading
 +
3070    Curr=Data
 +
3080    GOSUB Data_process
 +
3090  EXIT IF Time_elapsed>Time_set
 +
3100  END LOOP
 +
3110  OUTPUT @Src;"H"      !Operate OFF
 +
3120  RETURN
 +
3130 Cycle: !
 +
3140  Pre_v=0 !최초 측정 전압=0으로 가정한다.
 +
3150  GOSUB Charge1
 +
3160  GOSUB Charge2
 +
3170  GOSUB Discharge
 +
3180  RETURN
 +
3190 Charge1: !
 +
3200 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 +
3210 !충전. +부호 정전류, 전압제한(전압을 읽는다.)
 +
3220 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 +
3230  Test$="C"
 +
3240  Cmd$="I4"  !2A range
 +
3250  Cmd$=Cmd$&" D "&VAL$(Ic)&"A"    !D 2.0A
 +
3260  Cmd$=Cmd$&" D "&VAL$(Vc)&"V"    !D 4.2V
 +
3270  OUTPUT @Src;Cmd$  !"I4 D 2A D 4.2V"
 +
3280  WAIT Wait
 +
3290  OUTPUT @Src;"E"      !Operate ON
 +
3300  WAIT Wait
 +
3310  C_start_time=TIMEDATE
 +
3320  Pre_t=C_start_time
 +
3330  Curr=Ic
 +
3340  LOOP
 +
3350    T=TIMEDATE
 +
3360    Time_elapsed=(T-Time_zero)/60
 +
3370    GOSUB Reading
 +
3380    Volt=Data
 +
3390  !  IF Volt>Pre_v THEN  !충전 전압이 상승하면
 +
3400    IF ABS(Volt-Pre_v)>=.01 THEN    !전압차가 0.01V 이상이면
 +
3410      GOSUB Data_process
 +
3420      C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600)  !mAh = mA x hour
 +
3430      C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600)    !Wh = A x V x hour
 +
3440      Pre_t=T
 +
3450    END IF
 +
3460  EXIT IF Volt>=(Vc-.001)    !측정 전압이 충전최고 전압에 도달하면
 +
3470  END LOOP
 +
3480  OUTPUT @Src;"H"      !Operate OFF
 +
3490  WAIT Wait
 +
3500  RETURN
 +
3510 Charge2:!
 +
3520 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 +
3530 !충전, 충전 최고전압에 도달하면. 정전압, 전류제한(전류를 읽는다.)
 +
3540 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 +
3550  Cmd$="V5"  !32V range
 +
3560  Cmd$=Cmd$&" D "&VAL$(Vc)&"V"    !D 4.2V
 +
3570  Cmd$=Cmd$&" D "&VAL$(Ic)&"A"    !D 2.0A
 +
3580  OUTPUT @Src;Cmd$  !"V5 D 4.2V D 2.0A"
 +
3590  WAIT Wait
 +
3600  OUTPUT @Src;"E"      !Operate ON
 +
3610  WAIT Wait
 +
3620  Pre_v=Ic  !충전 전류(Ic)를 초기값으로 기억한다.
 +
3630  Volt=Vc  !충전전압은 일정하다.
 +
3640  LOOP
 +
3650    T=TIMEDATE
 +
3660    Time_elapsed=(T-Time_zero)/60
 +
3670    GOSUB Reading  !충전전압에 도달되었기 때문에, 서서히 줄어드는 충전 전류를 측정한다.
 +
3680    Curr=Data
 +
3690  !  IF Curr<Pre_v THEN  !측정 전류가 서서히 낮아지면
 +
3700    IF ABS(Curr-Pre_v)>=.01 THEN    !전류차이가 .01A 이상이면
 +
3710      GOSUB Data_process
 +
3720      C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600)  !mAh = mA x hour
 +
3730      C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600)    !WA = A x V x hour
 +
3740      Pre_t=T
 +
3750    END IF
 +
3760  EXIT IF Curr<=Ic_end+.001  !현재 전류가 종료전류에 도달하면
 +
3770  END LOOP
 +
3780  C_time=(T-C_start_time)/60
 +
3790  OUTPUT @Src;"H"      !Operate OFF
 +
3800  WAIT Wait
 +
3810  RETURN
 +
3820 Discharge: !
 +
3830 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 +
3840 !방전 전류는 -로 표기한다.
 +
3850 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 +
3860  Test$="D"
 +
3870  Cmd$="I4"  !2A range
 +
3880  Cmd$=Cmd$&" D "&VAL$(Id)&"A"      !D -2.0A
 +
3890  Cmd$=Cmd$&" D "&VAL$(Vc)&"V"    !D 4.2V
 +
3900  OUTPUT @Src;Cmd$  !"I4 D -2A D 4.2V"
 +
3910  WAIT Wait
 +
3920  OUTPUT @Src;"E"      !Operate ON
 +
3930  WAIT Wait
 +
3940  Pre_v=Vc
 +
3950  D_start_time=TIMEDATE
 +
3960  Pre_t=D_start_time
 +
3970  Curr=Id    !방전전류(-값을 갖는다.)는 일정하다.
 +
3980  Set80=0
 +
3990  Set40=0
 +
4000  LOOP
 +
4010    T=TIMEDATE
 +
4020    Time_elapsed=(T-Time_zero)/60
 +
4030    GOSUB Reading  !일정 전류 방전      , 전압이 측정된다.
 +
4040    Volt=Data
 +
4050  ! IF Volt<Pre_v THEN  !측정전압이 서서히 낮아지면(방전이므로)
 +
4060    IF Set80=0 AND Volt<Vc*.8 THEN        !방전전압이 충전전압의 80%가 되면 한번만 수행
 +
4070      V80=Volt
 +
4080      T80=Time_elapsed*60
 +
4090      Set80=1
 +
4100    END IF
 +
4110    IF Set40=0 AND Volt<Vc*.4 THEN        !방전전압이 충전전압의 40%가 되면 한번만 수행
 +
4120      V40=Volt
 +
4130      T40=Time_elapsed*60
 +
4140      Set40=1
 +
4150    END IF
 +
4160    IF ABS(Volt-Pre_v)>=.01 THEN    !전압차가 0.01V 이상이면
 +
4170      GOSUB Data_process
 +
4180      D_i_capa=D_i_capa+(Curr*1000)*((T-Pre_t)/3600)  !mAh = mA x hour
 +
4190      D_w_capa=D_w_capa+Curr*Volt*((T-Pre_t)/3600)    !Wh = A x V x hour
 +
4200      Pre_t=T
 +
4210    END IF
 +
4220  EXIT IF Volt<=Vd+.001    !현재 전압이 방전 최저전압에 도달하면
 +
4230  END LOOP
 +
4240  D_time=(T-D_start_time)/60
 +
4250  Capacity=Id*(T80-T40)/(V80-V40)  !기울기가 -이므로
 +
4260  OUTPUT @Src;"H"      !Operate OFF
 +
4270  WAIT Wait
 +
4280  RETURN
 +
4290 Data_process: !
 +
4300  Count=Count+1
 +
4310  SELECT Dut$(Dut_no)
 +
4320  CASE "BATTERY","EDLC"
 +
4330    X1=Time_elapsed
 +
4340    Y1=(Volt*2/Vc)*100-100  !전압 [%]
 +
4350    Y2=(Curr/Ic)*100  !전류 [%]
 +
4360  CASE "PTC"
 +
4370    X1=Volt
 +
4380    Y1=Curr
 +
4390    Y2=0
 +
4400  CASE "tau"
 +
4410    X1=Time_elapsed
 +
4420    Y1=Curr
 +
4430    Y2=0
 +
4440  END SELECT
 +
4450  Y(1)=Y1
 +
4460  Y(2)=Y2
 +
4470  CONTROL @Strip;SET("POINT LOCATION":X1,"VALUES":Y(*))
 +
4480  PRINT "Count=";Count;", T=";PROUND(Time_elapsed,-5);"m, V=";Volt;"V, I=";Curr;"A"
 +
4490  OUTPUT @File1;Count,Time_elapsed,Volt,Curr
 +
4500  Pre_v=Data
 +
4510  SELECT Dut$(Dut_no)
 +
4520  CASE "BATTERY"
 +
4530    IF Battery$(Battery_no)="Li-S4" THEN
 +
4540      GOSUB Reading34970
 +
4550      OUTPUT @File3;Count,V(*)
 +
4560    END IF
 +
4570  END SELECT
 +
4580  RETURN
 +
4590 Reading: !
 +
4600  LOOP
 +
4610    GOSUB Reading1
 +
4620  EXIT IF Data<>0
 +
4630  END LOOP
 +
4640  RETURN
 +
4650 Reading1: !
 +
4660 ! 전압을 측정하면 나타나는 데이터 포맷
 +
4670 ! 12345678901234
 +
4680 !"DV +03.857E+0"  원래
 +
4690 !" DV +03.857E+0"  앞에 공백이 하나 추가되어 나온 적이 있다.
 +
4700 ! 전압를 측정하면 나타나는 데이터 포맷
 +
4710 ! 12345678901234
 +
4720 !"DI +0.6310E+0"  원래
 +
4730  ENTER @Src;A1$
 +
4740  A2$=TRIM$(A1$)  !앞뒤 공백 모두 없앤다
 +
4750  Data=VAL(A2$[3,13])
 +
4760  SELECT Dut$(Dut_no)
 +
4770  CASE "BATTERY"
 +
4780 ! Data=PROUND(Data,-3)  !소수점 3자리. 0.1mA까지 측정되면 너무 많은 데이터가 획득되므로
 +
4790    Data=DROUND(Data,3)!유효수자 3자리
 +
4800  CASE "tau"
 +
4810    WAIT .05  !이보다  빨리 측정못한다.
 +
4820  END SELECT
 +
4830  RETURN
 +
4840 Reading34970: !
 +
4850  OUTPUT @Sw;"MEAS:VOLT:DC? (@201:204)"
 +
4860  ENTER @Sw;V(*)
 +
4870  RETURN
 +
4880 Inst6143_open: !
 +
4890  ASSIGN @Src TO 714    !advantest TR6143
 +
4900  OUTPUT @Src;"C"      !initialize
 +
4910  OUTPUT @Src;"OM1"    !ascii, OM0=set value, OM1=meas value
 +
4920  SELECT Dut$(Dut_no)
 +
4930  CASE "BATTERY"
 +
4940    IF Battery$(Battery_no)="Li-S4" THEN
 +
4950      GOSUB Inst34970_open
 +
4960    END IF
 +
4970  END SELECT
 +
4980  RETURN
 +
4990 Inst34970_open: !
 +
5000  DIM V(4)      !4채널 전압
 +
5010  ASSIGN @Sw TO 709    !Agilent 34970A
 +
5020  ! OUTPUT @Sw;"CONF:VOLT:DC AUTO (@201:204)"
 +
5030  OUTPUT @Sw;"SENS:VOLT:DC:RANG:AUTO ON,(@201:204)"
 +
5040  OUTPUT @Sw;"SENS:VOLT:DC:NPLC 2,(@201:204)"
 +
5050  RETURN
 +
5060 Chart_var:  !
 +
5070  SELECT Dut$(Dut_no)
 +
5080  CASE "BATTERY"
 +
5090    X_origin=0!time=0
 +
5100    X_range=1*60        !1  hours *60min  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 +
5110    X_axis_label$="Elapsed Time [Min]"
 +
5120    Y_origin=-110
 +
5130    Y_range=220
 +
5140    Y_axis_label$="Volt & Current [%]"
 +
5150  CASE "EDLC"
 +
5160    X_origin=0!time=0
 +
5170    X_range=10          !10min  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 +
5180    X_axis_label$="Elapsed Time [Min]"
 +
5190    Y_origin=-110
 +
5200    Y_range=220
 +
5210    Y_axis_label$="Volt & Current [%]"
 +
5220  CASE "PTC"
 +
5230    X_origin=Volt_start
 +
5240    X_range=Volt_stop-Volt_start      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 +
5250    X_axis_label$="Applied Volt [V]"
 +
5260    Y_origin=0
 +
5270    Y_range=Limit
 +
5280    Y_axis_label$="Current [A]"
 +
5290  CASE "tau"
 +
5300    X_origin=0
 +
5310    X_range=Time_set                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 +
5320    X_axis_label$="Elapsed Time [m]"
 +
5330    Y_origin=0
 +
5340    Y_range=Limit
 +
5350    Y_axis_label$="Current [A]"
 +
5360  END SELECT
 +
5370  RETURN
 +
5380 Init_chart:  !
 +
5390  DIM X_axis_label$[25],Y_axis_label$[25]
 +
5400  INTEGER Trace_num
 +
5410  INTEGER Screen_dims(1:2),Gwindow_dims(1:4)
 +
5420  REAL Y(1:2)  !Y(1) Volt, Y(2) Current
 +
5430  GESCAPE CRT,36;Screen_dims(*) ! Get screen width and height.
 +
5440  !
 +
5450  ! Set the dimensions of the graphics window using GESCAPE 33 so
 +
5460  ! that it is centered on the screen.
 +
5470  !
 +
5480  Gwindow_dims(1)=Screen_dims(1)*.25 ! X of upper left.
 +
5490  Gwindow_dims(2)=Screen_dims(2)*.2  ! Y of upper left.
 +
5500  Gwindow_dims(3)=Screen_dims(1)*.7  ! Width.
 +
5510  Gwindow_dims(4)=Screen_dims(2)*.6  ! Height.
 +
5520  GESCAPE CRT,33;Gwindow_dims(*)    ! Set graphics window geometry.
 +
5530  !
 +
5540  GESCAPE CRT,35 ! Move the graphics window to the top.
 +
5550  !
 +
5560  ! Create a stripchart.  Make it invisible until all changes are made.
 +
5570  !
 +
5580  ASSIGN @Strip TO WIDGET "STRIPCHART";SET("VISIBLE":0)
 +
5590  !
 +
5600  ! Set the overall attributes.
 +
5610  !
 +
5620  CONTROL @Strip;SET("TITLE":"Data Logger")
 +
5630  CONTROL @Strip;SET("MINIMUM SCROLL":2)
 +
5640  CONTROL @Strip;SET("MOVABLE":0)
 +
5650  CONTROL @Strip;SET("MAXIMIZABLE":0)
 +
5660  CONTROL @Strip;SET("X":0,"Y":0)
 +
5670  !
 +
5680  ! Size the stripchart to exactly fill the graphics window.
 +
5690  !
 +
5700  Vert_borders=26
 +
5710  Horiz_borders=8
 +
5720  Height=Gwindow_dims(4)-Vert_borders
 +
5730  Width=Gwindow_dims(3)-Horiz_borders
 +
5740  CONTROL @Strip;SET("WIDTH":Width,"HEIGHT":Height)
 +
5750  !
 +
5760  CONTROL @Strip;SET("CURRENT AXIS":"X")
 +
5770  CONTROL @Strip;SET("ORIGIN":X_origin,"RANGE":X_range)
 +
5780  CONTROL @Strip;SET("AXIS LABEL":X_axis_label$)
 +
5790  !CONTROL @Strip;SET("DIGITS":5)
 +
5800  !
 +
5810  CONTROL @Strip;SET("CURRENT AXIS":"Y")
 +
5820  CONTROL @Strip;SET("ORIGIN":Y_origin,"RANGE":Y_range)
 +
5830  CONTROL @Strip;SET("AXIS LABEL":Y_axis_label$)
 +
5840  !
 +
5850  CONTROL @Strip;SET("VISIBLE":1) ! Show the stripchart.
 +
5860  !
 +
5870  RETURN
 +
5880   END
 +
</pre>

2020년 8월 20일 (목) 16:54 기준 최신판

Advantest TR6143

10     !
20     ! 2020-01-17 배터리 충방전 프로그램
30     ! 2020-01-26 PTC용 표준 VI 측정추가
40     OPTION BASE 1
50     INTEGER No_cycle  !충반전 실험 횟수
60     INTEGER Size,Length,Btn
70     DIM Msg$[25]
80     No_cycle=2   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
90     Wait=.1    !계측기 세팅을 한 후, 첫 측정에서 측정값이 0이 나오는 현상 때문에 잠시 대기 시간
100    GOSUB Dut_select
110    GOSUB Stimulus_select
120    GOSUB Fileopen
130    GOSUB Inst6143_open
140    GOSUB Measure
150    GOSUB Fileclose
160  ! PAUSE
170    STOP
180 Dut_select:  !
190    INTEGER Dut_no
200    Size=4
210    Length=7
220    ALLOCATE Dut$(Size)[Length]
230    Dut$(1)="BATTERY"
240    Dut$(2)="EDLC"
250    Dut$(3)="PTC"
260    Dut$(4)="tau"
270    Msg$="DUT 종류"
280    DIALOG "LIST",Msg$,Btn;SET("ITEMS":Dut$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Dut_no)
290    Dut_no=Dut_no+1
300    SELECT Dut$(Dut_no)
310    CASE "BATTERY"
320      GOSUB Battery_select
330    CASE "EDLC"
340      GOSUB Edlc_select
350    CASE "PTC"
360      GOSUB Ptc_select
370    CASE "tau"
380      GOSUB Tau_select
390    END SELECT 
400    RETURN
410 Battery_select:     !
420    INTEGER Battery_no
430    Size=7
440    Length=8
450    ALLOCATE Battery$(Size)[Length]
460    Battery$(1)="Li"
470    Battery$(2)="NiCd"
480    Battery$(3)="3-NiCd"
490    Battery$(4)="    "
500    Battery$(5)="BAT"
510    Battery$(6)="Li-S4"  !4개 직렬, 각셀을 34970A로 측정
520    Battery$(7)="GrandMax"
530    Msg$="배터리 종류"
540    DIALOG "LIST",Msg$,Btn;SET("ITEMS":Battery$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Battery_no)
550    Battery_no=Battery_no+1
560    RETURN
570 Edlc_select:  !
580    INTEGER Edlc_no
590    Size=4
600    Length=10
610    ALLOCATE Edlc$(Size)[Length]
620    Edlc$(1)="2.7V 0~1F"
630    Edlc$(2)="2.7V 1~10F"
640    Edlc$(3)="5.5V 0~1F"
650    Edlc$(4)="5.5V 1~10F"
660    Msg$="EDLC 종류"
670    DIALOG "LIST",Msg$,Btn;SET("ITEMS":Edlc$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Edlc_no)
680    Edlc_no=Edlc_no+1
690    RETURN
700 Ptc_select:  !
710    INTEGER Ptc_no
720    Size=6
730    Length=6
740    ALLOCATE Ptc$(Size)[Length]
750    Ptc$(1)="SPL1"
760    Ptc$(2)="    "
770    Ptc$(3)="    "
780    Msg$="PTC 종류"
790    DIALOG "LIST",Msg$,Btn;SET("ITEMS":Ptc$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Ptc_no)
800    Ptc_no=Ptc_no+1
810    RETURN
820 Tau_select:  !
830    INTEGER Tau_no
840    Size=6
850    Length=25
860    ALLOCATE Tau$(Size)[Length]
870    Tau$(1)="V12T100"   !12V 100sec
880    Tau$(2)="V12T10"
890    Tau$(3)="    "
900    Msg$="Tau(Time-Constant) 종류"
910    DIALOG "LIST",Msg$,Btn;SET("ITEMS":Tau$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Tau_no)
920    Tau_no=Tau_no+1
930    RETURN
940 Stimulus_select: !
950    SELECT Dut$(Dut_no)
960    CASE "BATTERY"
970      SELECT Battery$(Battery_no)
980      CASE "Li"
990        Vc=4.2!4.2V 충전전압         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1000       Vd=3.2!3.2V 방전종료전압     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1010       Ic=2  !100mA 충전전류       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1020       Ic_end=.5  !충전 종료 전류   !!내부 저항 !!!!!!!!!!!!!!!!!!!!!!!!
1030       Id=-2  !100mA 방전전류 음수  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1040     CASE "GrandMax"
1050       Vc=4.4!4.2V 충전전압         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1060       Vd=3.2!3.2V 방전종료전압     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1070       Ic=1  !1A 충전전류       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1080       Ic_end=.2 !200mA 충전 종료 전류   !!내부 저항 !!!!!!!!!!!!!!!!!!!!!!!!
1090       Id=-1  !1A 방전전류 음수  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1100     CASE "NiCd"!표준 1.2V
1110       Vc=1.3!1.5V 충전전압
1120       Vd=.9!0.9V 방전종료전압
1130       Ic=.001!100mA 충전전류
1140       Ic_end=.0005!충전 종료 전류
1150       Id=-.0001!100mA 방전전류 음수
1160     CASE "3-NiCd"!표준 3.6V
1170       Vc=4.7!4.1V 충전전압
1180       Vd=1.5!3.1V 방전종료전압
1190       Ic=.0005!100mA 충전전류
1200       Ic_end=.00035!충전 종료 전류
1210       Id=-5.E-5!100mA 방전전류 음수
1220     CASE "BAT"!표준 3.6V
1230       Vc=3.5!4.1V 충전전압
1240       Vd=2.5!1.V 방전종료전압
1250       Ic=.02!100mA 충전전류
1260       Ic_end=.006!충전 종료 전류
1270       Id=-.005!-10mA 방전전류 음수
1280     CASE "Li-S4"
1290       Vc=16.8!4.2x4 충전전압         4.2x4=16.8     3.7x4=14.8 nominal
1300       Vd=12.8!3.2x4 방전종료전압     3.2x4=12.8
1310       Ic=2  !2A 충전전류
1320       Ic_end=1!충전 종료 전류
1330       Id=-2 !-2A 방전전류 음수
1340     CASE ""
1350       Msg$="충전전류[A], 방전전류[A], 충전종료전류[A], "
1360     END SELECT 
1370   CASE "EDLC"
1380     SELECT Edlc$(Edlc_no)
1390     CASE "2.7V 0~1F"
1400       Vc=2.7        ! 충전전압
1410       Ic=.1         ! 충전전류
1420       Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5%
1430       Id=-.1        ! 100mA 방전전류 음수
1440       Vd=Vc*.05     ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
1450     CASE "2.7V 1~10F"
1460       Vc=2.7        ! 충전전압
1470       Ic=.5         ! 충전전류
1480       Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5%
1490       Id=-.5        ! 500mA 방전전류 음수
1500       Vd=Vc*.05     ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
1510     CASE "5.5V 0~1F"
1520       Vc=5.5        ! 충전전압
1530       Ic=.1         ! 충전전류
1540       Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5%
1550       Id=-.1        ! 100mA 방전전류 음수
1560       Vd=Vc*.05     ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
1570     CASE "5.5V 1~10F"
1580       Vc=5.5        ! 충전전압
1590       Ic=.5         ! 충전전류
1600       Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5%
1610       Id=-.5        ! 500mA 방전전류 음수
1620       Vd=Vc*.05     ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
1630     END SELECT 
1640   CASE "PTC"
1650     SELECT Ptc$(Ptc_no)
1660     CASE "SPL1"
1670       Wait=1
1680       Volt_start=0
1690       Volt_stop=12
1700       Volt_step=.05
1710       Limit=2      !2A
1720     END SELECT 
1730   CASE "tau"
1740     SELECT Tau$(Tau_no)
1750     CASE "V12T100"
1760       Volt_set=12  !12V
1770       Time_set=100 !100sec
1780       Limit=2      !2A
1790     CASE "V12T10"
1800       Volt_set=12  !12V
1810       Time_set=10  !100sec
1820       Limit=2      !2A
1830     END SELECT 
1840   END SELECT 
1850 !GOSUB Dialog_string3
1860   RETURN
1870 Fileopen:!
1880   DIM Dhms$[8]
1890   DIM Filename1$[20],Filename2$[20],Filename3$[20]
1900   T=TIMEDATE
1910   Time$=TIME$(T) !하루 추가 +24*3600
1920   Date$=DATE$(T)
1930   Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
1940   Filename1$=Dhms$&".txt"
1950   CREATE Filename1$,1
1960   ASSIGN @File1 TO Filename1$;FORMAT ON
1970   SELECT Dut$(Dut_no)
1980   CASE "BATTERY","EDLC"
1990     T=T+1       !1초 늦게
2000     Time$=TIME$(T)
2010     Date$=DATE$(T)
2020     Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
2030     Filename2$=Dhms$&".txt"
2040     CREATE Filename2$,1
2050     ASSIGN @File2 TO Filename2$;FORMAT ON
2060     SELECT Dut$(Dut_no)
2070     CASE "BATTERY"
2080       IF Battery$(Battery_no)="Li-S4" THEN!직렬배터리 4개에 대한 각 셀별 전압 기록용
2090         T=T+1   !1초 늦게
2100         Time$=TIME$(T)
2110         Date$=DATE$(T)
2120         Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
2130         Filename3$=Dhms$&".txt"
2140         CREATE Filename3$,1
2150         ASSIGN @File3 TO Filename3$;FORMAT ON
2160       END IF 
2170     END SELECT 
2180   END SELECT 
2190   RETURN
2200 Fileclose:!
2210   ASSIGN @File1 TO *
2220   SELECT Dut$(Dut_no)
2230   CASE "BATTERY"
2240     ASSIGN @File2 TO *
2250     IF Battery$(Battery_no)="Li-S4" THEN
2260       ASSIGN @File3 TO *
2270     END IF 
2280   CASE "EDLC"
2290     ASSIGN @File2 TO *
2300   END SELECT 
2310   RETURN
2320 Measure: !
2330   INTEGER I
2340   DIM Cmd$[25],A1$[14],A2$[14],Test$[1]
2350   SELECT Dut$(Dut_no)
2360   CASE "tau","EDLC"
2370     OUTPUT @File1;"No.,Time[s],Volt[V],Curr[A]"
2380   CASE ELSE 
2390     OUTPUT @File1;"No.,Time[m],Volt[V],Curr[A]"
2400   END SELECT 
2410   GOSUB Chart_var
2420   GOSUB Init_chart
2430   Count=0
2440   Time_zero=TIMEDATE
2450   SELECT Dut$(Dut_no)
2460   CASE "BATTERY"
2470     GOSUB Measure_battery
2480   CASE "EDLC"
2490     GOSUB Measure_edlc
2500   CASE "PTC"
2510     GOSUB Measure_vi
2520   CASE "tau"
2530     GOSUB Measure_tau
2540   END SELECT 
2550   RETURN
2560 Measure_battery: !
2570   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]"
2580   FOR I=1 TO No_cycle   !배터리 충방전실험을 5회 실시
2590     C_i_capa=0
2600     C_w_capa=0
2610     D_i_capa=0
2620     D_w_capa=0
2630     GOSUB Cycle
2640     OUTPUT @File2;I,C_time,C_i_capa,C_w_capa,D_time,-D_i_capa,-D_w_capa
2650   NEXT I
2660   RETURN
2670 Measure_edlc: !
2680   OUTPUT @File2;"Cycle,Charge Time[s],Charge i Capa[mAh],Charge W Capa[mWh], Discharge Time[s],Discharge i Capa[mAh], Discharge W Capa[mWh], Capacity[F]"
2690   FOR I=1 TO No_cycle
2700     C_i_capa=0
2710     C_w_capa=0
2720     D_i_capa=0
2730     D_w_capa=0
2740     Capacity=0
2750     GOSUB Cycle
2760     OUTPUT @File2;I,C_time*60,C_i_capa,C_w_capa*1000,D_time*60,-D_i_capa,-D_w_capa*1000,Capacity
2770   NEXT I
2780   RETURN
2790 Measure_vi:  !
2800   FOR Volt=Volt_start TO Volt_stop STEP Volt_step
2810     Cmd$="V5" !32V
2820     Cmd$=Cmd$&" D "&VAL$(Volt)&"V"   !D 2.0V
2830     Cmd$=Cmd$&" D "&VAL$(Limit)&"A"   !D 2.0A
2840     OUTPUT @Src;Cmd$   !"V5 D 1V D 2A"
2850     OUTPUT @Src;"E"    !Operate ON
2860     T=TIMEDATE
2870     Time_elapsed=(T-Time_zero)/60
2880     GOSUB Reading
2890     Curr=Data
2900     GOSUB Data_process
2910     WAIT Wait
2920   NEXT Volt
2930   OUTPUT @Src;"H"      !Operate OFF
2940   RETURN
2950 Measure_tau:  !
2960   Volt=Volt_set
2970   Cmd$="V5"   !32V
2980   Cmd$=Cmd$&" D "&VAL$(Volt)&"V"     !D 12V
2990   Cmd$=Cmd$&" D "&VAL$(Limit)&"A"     !D 2.0A
3000   OUTPUT @Src;Cmd$     !"V5 D 1V D 2A"
3010   OUTPUT @Src;"E"      !Operate ON
3020   Time_zero=TIMEDATE
3030   LOOP
3040     T=TIMEDATE
3050     Time_elapsed=(T-Time_zero)   !second
3060     GOSUB Reading
3070     Curr=Data
3080     GOSUB Data_process
3090   EXIT IF Time_elapsed>Time_set
3100   END LOOP 
3110   OUTPUT @Src;"H"      !Operate OFF
3120   RETURN
3130 Cycle: !
3140   Pre_v=0 !최초 측정 전압=0으로 가정한다.
3150   GOSUB Charge1
3160   GOSUB Charge2
3170   GOSUB Discharge
3180   RETURN
3190 Charge1: !
3200 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3210 !충전. +부호 정전류, 전압제한(전압을 읽는다.)
3220 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3230   Test$="C"
3240   Cmd$="I4"   !2A range
3250   Cmd$=Cmd$&" D "&VAL$(Ic)&"A"     !D 2.0A
3260   Cmd$=Cmd$&" D "&VAL$(Vc)&"V"     !D 4.2V
3270   OUTPUT @Src;Cmd$   !"I4 D 2A D 4.2V"
3280   WAIT Wait
3290   OUTPUT @Src;"E"      !Operate ON
3300   WAIT Wait
3310   C_start_time=TIMEDATE
3320   Pre_t=C_start_time
3330   Curr=Ic
3340   LOOP
3350     T=TIMEDATE
3360     Time_elapsed=(T-Time_zero)/60
3370     GOSUB Reading
3380     Volt=Data
3390  !  IF Volt>Pre_v THEN   !충전 전압이 상승하면
3400     IF ABS(Volt-Pre_v)>=.01 THEN     !전압차가 0.01V 이상이면
3410       GOSUB Data_process
3420       C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600)   !mAh = mA x hour
3430       C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600)     !Wh = A x V x hour
3440       Pre_t=T
3450     END IF 
3460   EXIT IF Volt>=(Vc-.001)    !측정 전압이 충전최고 전압에 도달하면
3470   END LOOP 
3480   OUTPUT @Src;"H"      !Operate OFF
3490   WAIT Wait
3500   RETURN
3510 Charge2:!
3520 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3530 !충전, 충전 최고전압에 도달하면. 정전압, 전류제한(전류를 읽는다.)
3540 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3550   Cmd$="V5"   !32V range
3560   Cmd$=Cmd$&" D "&VAL$(Vc)&"V"     !D 4.2V
3570   Cmd$=Cmd$&" D "&VAL$(Ic)&"A"     !D 2.0A
3580   OUTPUT @Src;Cmd$   !"V5 D 4.2V D 2.0A"
3590   WAIT Wait
3600   OUTPUT @Src;"E"      !Operate ON
3610   WAIT Wait
3620   Pre_v=Ic  !충전 전류(Ic)를 초기값으로 기억한다.
3630   Volt=Vc   !충전전압은 일정하다.
3640   LOOP
3650     T=TIMEDATE
3660     Time_elapsed=(T-Time_zero)/60
3670     GOSUB Reading   !충전전압에 도달되었기 때문에, 서서히 줄어드는 충전 전류를 측정한다.
3680     Curr=Data
3690  !  IF Curr<Pre_v THEN   !측정 전류가 서서히 낮아지면
3700     IF ABS(Curr-Pre_v)>=.01 THEN     !전류차이가 .01A 이상이면
3710       GOSUB Data_process
3720       C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600)   !mAh = mA x hour
3730       C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600)     !WA = A x V x hour
3740       Pre_t=T
3750     END IF 
3760   EXIT IF Curr<=Ic_end+.001   !현재 전류가 종료전류에 도달하면
3770   END LOOP 
3780   C_time=(T-C_start_time)/60
3790   OUTPUT @Src;"H"      !Operate OFF
3800   WAIT Wait
3810   RETURN
3820 Discharge: !
3830 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3840 !방전 전류는 -로 표기한다.
3850 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3860   Test$="D"
3870   Cmd$="I4"   !2A range
3880   Cmd$=Cmd$&" D "&VAL$(Id)&"A"      !D -2.0A
3890   Cmd$=Cmd$&" D "&VAL$(Vc)&"V"     !D 4.2V
3900   OUTPUT @Src;Cmd$   !"I4 D -2A D 4.2V"
3910   WAIT Wait
3920   OUTPUT @Src;"E"      !Operate ON
3930   WAIT Wait
3940   Pre_v=Vc
3950   D_start_time=TIMEDATE
3960   Pre_t=D_start_time
3970   Curr=Id    !방전전류(-값을 갖는다.)는 일정하다.
3980   Set80=0
3990   Set40=0
4000   LOOP
4010     T=TIMEDATE
4020     Time_elapsed=(T-Time_zero)/60
4030     GOSUB Reading   !일정 전류 방전      , 전압이 측정된다.
4040     Volt=Data
4050   ! IF Volt<Pre_v THEN   !측정전압이 서서히 낮아지면(방전이므로)
4060     IF Set80=0 AND Volt<Vc*.8 THEN        !방전전압이 충전전압의 80%가 되면 한번만 수행
4070       V80=Volt
4080       T80=Time_elapsed*60
4090       Set80=1
4100     END IF 
4110     IF Set40=0 AND Volt<Vc*.4 THEN        !방전전압이 충전전압의 40%가 되면 한번만 수행
4120       V40=Volt
4130       T40=Time_elapsed*60
4140       Set40=1
4150     END IF 
4160     IF ABS(Volt-Pre_v)>=.01 THEN     !전압차가 0.01V 이상이면
4170       GOSUB Data_process
4180       D_i_capa=D_i_capa+(Curr*1000)*((T-Pre_t)/3600)   !mAh = mA x hour
4190       D_w_capa=D_w_capa+Curr*Volt*((T-Pre_t)/3600)     !Wh = A x V x hour
4200       Pre_t=T
4210     END IF 
4220   EXIT IF Volt<=Vd+.001    !현재 전압이 방전 최저전압에 도달하면
4230   END LOOP 
4240   D_time=(T-D_start_time)/60
4250   Capacity=Id*(T80-T40)/(V80-V40)  !기울기가 -이므로
4260   OUTPUT @Src;"H"      !Operate OFF
4270   WAIT Wait
4280   RETURN
4290 Data_process: !
4300   Count=Count+1
4310   SELECT Dut$(Dut_no)
4320   CASE "BATTERY","EDLC"
4330     X1=Time_elapsed
4340     Y1=(Volt*2/Vc)*100-100  !전압 [%]
4350     Y2=(Curr/Ic)*100  !전류 [%]
4360   CASE "PTC"
4370     X1=Volt
4380     Y1=Curr
4390     Y2=0
4400   CASE "tau"
4410     X1=Time_elapsed
4420     Y1=Curr
4430     Y2=0
4440   END SELECT 
4450   Y(1)=Y1
4460   Y(2)=Y2
4470   CONTROL @Strip;SET("POINT LOCATION":X1,"VALUES":Y(*))
4480   PRINT "Count=";Count;", T=";PROUND(Time_elapsed,-5);"m, V=";Volt;"V, I=";Curr;"A"
4490   OUTPUT @File1;Count,Time_elapsed,Volt,Curr
4500   Pre_v=Data
4510   SELECT Dut$(Dut_no)
4520   CASE "BATTERY"
4530     IF Battery$(Battery_no)="Li-S4" THEN
4540       GOSUB Reading34970
4550       OUTPUT @File3;Count,V(*)
4560     END IF 
4570   END SELECT 
4580   RETURN
4590 Reading: !
4600   LOOP
4610     GOSUB Reading1
4620   EXIT IF Data<>0
4630   END LOOP 
4640   RETURN
4650 Reading1: !
4660 ! 전압을 측정하면 나타나는 데이터 포맷
4670 ! 12345678901234
4680 !"DV +03.857E+0"   원래
4690 !" DV +03.857E+0"  앞에 공백이 하나 추가되어 나온 적이 있다.
4700 ! 전압를 측정하면 나타나는 데이터 포맷
4710 ! 12345678901234
4720 !"DI +0.6310E+0"   원래
4730   ENTER @Src;A1$
4740   A2$=TRIM$(A1$)   !앞뒤 공백 모두 없앤다
4750   Data=VAL(A2$[3,13])
4760   SELECT Dut$(Dut_no)
4770   CASE "BATTERY"
4780 ! Data=PROUND(Data,-3)  !소수점 3자리. 0.1mA까지 측정되면 너무 많은 데이터가 획득되므로
4790     Data=DROUND(Data,3)!유효수자 3자리
4800   CASE "tau"
4810     WAIT .05  !이보다   빨리 측정못한다.
4820   END SELECT 
4830   RETURN
4840 Reading34970: !
4850   OUTPUT @Sw;"MEAS:VOLT:DC? (@201:204)"
4860   ENTER @Sw;V(*)
4870   RETURN
4880 Inst6143_open: !
4890   ASSIGN @Src TO 714    !advantest TR6143
4900   OUTPUT @Src;"C"       !initialize
4910   OUTPUT @Src;"OM1"     !ascii, OM0=set value, OM1=meas value
4920   SELECT Dut$(Dut_no)
4930   CASE "BATTERY"
4940     IF Battery$(Battery_no)="Li-S4" THEN
4950       GOSUB Inst34970_open
4960     END IF 
4970   END SELECT 
4980   RETURN
4990 Inst34970_open: !
5000   DIM V(4)      !4채널 전압
5010   ASSIGN @Sw TO 709     !Agilent 34970A
5020  ! OUTPUT @Sw;"CONF:VOLT:DC AUTO (@201:204)"
5030   OUTPUT @Sw;"SENS:VOLT:DC:RANG:AUTO ON,(@201:204)"
5040   OUTPUT @Sw;"SENS:VOLT:DC:NPLC 2,(@201:204)"
5050   RETURN
5060 Chart_var:   !
5070   SELECT Dut$(Dut_no)
5080   CASE "BATTERY"
5090     X_origin=0!time=0
5100     X_range=1*60        !1  hours *60min  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5110     X_axis_label$="Elapsed Time [Min]"
5120     Y_origin=-110
5130     Y_range=220
5140     Y_axis_label$="Volt & Current [%]"
5150   CASE "EDLC"
5160     X_origin=0!time=0
5170     X_range=10          !10min  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5180     X_axis_label$="Elapsed Time [Min]"
5190     Y_origin=-110
5200     Y_range=220
5210     Y_axis_label$="Volt & Current [%]"
5220   CASE "PTC"
5230     X_origin=Volt_start
5240     X_range=Volt_stop-Volt_start      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5250     X_axis_label$="Applied Volt [V]"
5260     Y_origin=0
5270     Y_range=Limit
5280     Y_axis_label$="Current [A]"
5290   CASE "tau"
5300     X_origin=0
5310     X_range=Time_set                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5320     X_axis_label$="Elapsed Time [m]"
5330     Y_origin=0
5340     Y_range=Limit
5350     Y_axis_label$="Current [A]"
5360   END SELECT 
5370   RETURN
5380 Init_chart:   !
5390   DIM X_axis_label$[25],Y_axis_label$[25]
5400   INTEGER Trace_num
5410   INTEGER Screen_dims(1:2),Gwindow_dims(1:4)
5420   REAL Y(1:2)   !Y(1) Volt, Y(2) Current
5430   GESCAPE CRT,36;Screen_dims(*) ! Get screen width and height.
5440  !
5450  ! Set the dimensions of the graphics window using GESCAPE 33 so
5460  ! that it is centered on the screen.
5470  !
5480   Gwindow_dims(1)=Screen_dims(1)*.25 ! X of upper left.
5490   Gwindow_dims(2)=Screen_dims(2)*.2  ! Y of upper left.
5500   Gwindow_dims(3)=Screen_dims(1)*.7  ! Width.
5510   Gwindow_dims(4)=Screen_dims(2)*.6  ! Height.
5520   GESCAPE CRT,33;Gwindow_dims(*)     ! Set graphics window geometry.
5530  !
5540   GESCAPE CRT,35 ! Move the graphics window to the top.
5550  !
5560  ! Create a stripchart.  Make it invisible until all changes are made.
5570  !
5580   ASSIGN @Strip TO WIDGET "STRIPCHART";SET("VISIBLE":0)
5590  !
5600  ! Set the overall attributes.
5610  !
5620   CONTROL @Strip;SET("TITLE":"Data Logger")
5630   CONTROL @Strip;SET("MINIMUM SCROLL":2)
5640   CONTROL @Strip;SET("MOVABLE":0)
5650   CONTROL @Strip;SET("MAXIMIZABLE":0)
5660   CONTROL @Strip;SET("X":0,"Y":0)
5670  !
5680  ! Size the stripchart to exactly fill the graphics window.
5690  !
5700   Vert_borders=26
5710   Horiz_borders=8
5720   Height=Gwindow_dims(4)-Vert_borders
5730   Width=Gwindow_dims(3)-Horiz_borders
5740   CONTROL @Strip;SET("WIDTH":Width,"HEIGHT":Height)
5750  !
5760   CONTROL @Strip;SET("CURRENT AXIS":"X")
5770   CONTROL @Strip;SET("ORIGIN":X_origin,"RANGE":X_range)
5780   CONTROL @Strip;SET("AXIS LABEL":X_axis_label$)
5790  !CONTROL @Strip;SET("DIGITS":5)
5800  !
5810   CONTROL @Strip;SET("CURRENT AXIS":"Y")
5820   CONTROL @Strip;SET("ORIGIN":Y_origin,"RANGE":Y_range)
5830   CONTROL @Strip;SET("AXIS LABEL":Y_axis_label$)
5840  !
5850   CONTROL @Strip;SET("VISIBLE":1) ! Show the stripchart.
5860  !
5870   RETURN
5880   END