C***************************************************************** SUBROUTINE TYPE75(TIME,XIN,OUT,T,DTDT,PAR,INFO,ICNTRL,*) C version from: 12/22/89 C SAMPLE INPUT AND OUTPUT FOLLOW THE NOMENCLATURE C***************************************************************** C**** Subroutine represents a charge controller for a system including C**** PV-array, load and battery storage. C**** The controller represents a part of a shunt type controller: C**** the undervoltage and overvoltage protection C***************************************************************** C**** Variables: C IB -- battery current [amps] C SUV -- control signal: incoming C GUARD -- control signal: outgoing C IBMAX -- maximum battery current permitted C IBMIN -- minimum battery current permitted C FAIL -- message: =1 IBMIN is exceed C =2 IBMAX is exceed C IC -- current corresponding to VC [amps] C VC -- gassing voltage of the battery [volts] C VB -- battery voltage [volts] C IDISS -- dissipated current [amps] C VDISS -- voltage drop at dissipater [volts] C PDISS -- dissipated power [watts] C**************************************************************** C C SAMPLE INPUT AND OUTPUT VALUES C C INPUT SAMPLE VALUES C XIN(1) IB 67.0 C XIN(2) VB 225.7 C XIN(3) IC 61.6 C XIN(4) VC 234.6 C XIN(5) SUV 3.0 C C PARAMETERS C PAR(1) IBMAX 70.0 C PAR(2) IBMIN -40.0 C C OUTPUTS C OUT(1) IB 61.6 C OUT(2) GUARD 0.0 C OUT(3) PDISS 1267.0 C OUT(4) FAIL 0.0 C C************************************************************** IMPLICIT NONE DOUBLE PRECISION XIN,OUT INTEGER INFO REAL TIME,T,DTDT,ICNTRL,PAR REAL IB,SUV,GUARD,IBMAX,IBMIN,FAIL REAL IC,VC,VB,IDISS,VDISS,PDISS DIMENSION XIN(5),PAR(2),OUT(4),INFO(15) C*************************************************************** INFO(6)=4 INFO(9)=0 C**** PARAMETERS IBMAX=PAR(1) IBMIN=PAR(2) FAIL=0. C**** Set inputs IB=XIN(1) VB=XIN(2) IC=XIN(3) VC=XIN(4) SUV=XIN(5) IF(SUV.EQ.1.)THEN C**** undervoltage protection C**** check on IB IF(IB.LT.0.)THEN GUARD=1. IB=0. ELSE GUARD=0. ENDIF ELSEIF(SUV.EQ.2.)THEN C**** that is when battery SOC (upper limit) is exceeded C**** current gets shunted through dissipater IDISS=IB-0.1 VDISS=VB IF(IDISS.LT.0.)THEN IDISS=0. VDISS=0. ELSE IB=0.1 ENDIF ELSEIF(SUV.EQ.3.)THEN C**** trickle charge at constant charge rate IC IDISS=IB-IC VDISS=VC IF(IDISS.LT.0.)THEN IDISS=0. VDISS=0. ELSE IB=IC ENDIF ELSEIF(SUV.EQ.0.)THEN GUARD=0. ENDIF C**** check on discharge rate IF(IB.LT.IBMIN)THEN FAIL=1. ELSEIF(IB.GT.IBMAX)THEN FAIL=2. ENDIF PDISS=IDISS*VDISS C**** set outputs OUT(1)=IB OUT(2)=GUARD OUT(3)=PDISS OUT(4)=FAIL RETURN 1 END