SUBROUTINE TYPE75 (TIME,XIN,OUT,T,DTDT,PAR,INFO,ICNTRL,*) C* SUBROUTINE PROPCONT (P,XInput,XSet,YOutput,ErrStat) C*********************************************************************** C* Copyright ASHRAE. Toolkit for HVAC System Energy Calculations C* Revised for TRNSYS by N.Blair and R.Schwarz C*********************************************************************** C* SUBROUTINE: PROPCONT C* C* LANGUAGE: FORTRAN 77 C* C* PURPOSE: Proportional controller that gives C* a contol output between 0 and 1 as a C* function of the difference between sensed C* variable and setpoint. C*********************************************************************** C* INPUT VARIABLES SAMPLE VALUES C* XInput Controller input variable (-) 12.0 C* XSet Setpoint for controller input (-) 13.0 C* C* OUTPUT VARIABLES C* YOutput Controller output variable (-) 8.0 C* ErrStat Error status indicator (=ok, 1=error) (-) 0.0 C* C* PARAMETERS C* Action Controller action (-) 1.0 C* Direct Acting: Action >= 0 C* Reverse Acting: Action < 0 C* ThrotRang Throttling range (-) 4.0 C* (defined as change in control variable to change C* controller output through full range) C* YMin Minimum value of controller output 4.0 C* YMax Maximum value of controller output 20.0 C*********************************************************************** C MAJOR RESTRICTIONS: None C C DEVELOPER: Inger Andresen C Michael J. Brandemuehl, PhD, PE C University of Colorado at Boulder C C DATE: January 1, 1992 C C INCLUDE FILES: None C SUBROUTINES CALLED: None C FUNCTIONS CALLED: None C C REVISION HISTORY: None C C REFERENCE: None C*********************************************************************** C INTERNAL VARIABLES: C xMin Lower limit for throttling range (-) C xMax Upper limit for throttling range (-) C*********************************************************************** DOUBLE PRECISION XIN, OUT INTEGER ErrStat DIMENSION XIN(2),OUT(1),PAR(4) INTEGER INFO(15),IOPT,NI,NP,ND CHARACTER*3 YCHECK(2),OCHECK(1) DATA YCHECK/'DM1','DM1'/ DATA OCHECK/'DM1'/ ACTION =PAR(1) THROTRANG =PAR(2) YMIN =PAR(3) YMAX =PAR(4) ErrStat = 0 IOPT = -1 NI = 2 !CORRECT NUMBER OF INPUTS NP = 4 !CORRECT NUMBER OF PARAMETERS ND = 0 !CORRECT NUMBER OF DERIVATIVES XINPUT =XIN(1) XSET =XIN(2) IF (INFO(7).EQ.-1) THEN CALL TYPECK(IOPT,INFO,NI,NP,ND) CALL RCHECK(INFO,YCHECK,OCHECK) ENDIF C1*** Calculate lower and upper limits of throttling range C2*** Setpoint is assumed to be in middle of throttling range xMin = XSet - 0.5*ThrotRang xMax = XSet + 0.5*ThrotRang C1*** Calculate proportional controller output for direct action IF ( XInput .LE. xMin ) THEN YOutput = YMin ELSE IF (XInput .GE. xMax ) THEN YOutput = YMax ELSE YOutput = YMin+(YMax-YMin)*(XInput-xMin)/ThrotRang ENDIF C1*** Adjust output signal if reverse acting controller IF( Action .LT. 0) YOutput = YMin + YMax - YOutput OUT(1)=YOUTPUT RETURN 1 END