home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / h / house_ii.zip / FOR / TSTATD.FOR < prev    next >
Text File  |  1992-04-16  |  12KB  |  380 lines

  1.       SUBROUTINE TSTATD(ICODE,IAC,IBURN1,IBURN,IEFAN,IDBG)
  2. C
  3. C  DRIVER FOR MULTIZONE THERMOSTATS.
  4. C   ICODE  =1, TSTAT CALC; =2, TSTAT1 CALC; =3,TSTAT2 CALC;
  5. C          =4, TSTAT3 CALC; =5, TSTAT4 CALC; =6, TSTAT5 CALC;
  6. C          =7, TSTAT6 CALC(EXECUTED CONDITIONALLY FROM TSTAT5)
  7. C   ON-OFF INDICATORS - - - - -
  8. C     IAC   AIR CONDITIONER
  9. C     IBURN1  1ST STAGE  HEATING
  10. C     IBURN   1ST AND 2ND STAGE  HEATING
  11. C     IEFAN  BLOWER STATE (WILL BE CYCLED ON WITH AIR CONDITIONER)
  12. C
  13. CMDK NWL
  14. CMDK NZN
  15. CMDK NZW
  16. CMDK BIDRUN
  17. CMDK BLKTS1
  18. CMDK BLKTST
  19. CMDK ENCBK1
  20. CMDK HILIMB
  21. CMDK ITM
  22. CMDK TEMP1
  23. CMDK TIMEB
  24. CMDK TSTATC
  25. CMDK TSTB2
  26. CMDK TSTB3
  27. CMDK TSTB4
  28.       INTEGER  IACZP(NZN),IACZQ(NZN),IBRN1Z(NZN), 
  29.      +         IBRNP(NZN),IBRNQ(NZN),IACZPQ(NZN),IBRNPQ(NZN)
  30.       REAL TIMEOF(NZN),TIMEON(NZN),TIME0(NZN)
  31.      +,TSSH1L(NZN)
  32.       LOGICAL FIRST
  33.       DATA FIRST/.TRUE./,IDMP/0/,NPR/0/,NPRMAX/0/,IDMPMX/50/
  34.       DATA TIME0/NZN*0./,TIMEOF/NZN*0./TIMEON/NZN*0./
  35.       DATA TSSH1L/NZN*0./
  36.       DATA IDUMPQ/0/,IRESETBK/0/
  37. C
  38.       IDBGSV=IDBG
  39. C  FOR RUNNING 121486 BELOW!!!!!!!!!!!!!!
  40.       IF(IDRUN.EQ.'1214'.AND.IRESETBK.EQ.0)THEN
  41.         IF(TIME.GT.12.00)THEN
  42. C  SETBACK IN ZONES 1 AND 3 AFTER NOON OF 1ST DAY OF 121486 RUN!
  43.           IRESETBK=1
  44.           IDUMPZ(1)=0
  45.           IDUMPZ(3)=0
  46.           ICTRLZ(1)=0
  47.           ICTRLZ(3)=0
  48.           IBRN(1)=0
  49.           IBRN(3)=0
  50.           IBRNQ(1)=0
  51.           IBRNQ(3)=0
  52.           IBRNP(1)=0
  53.           IBRNP(3)=0
  54.           IBRNPQ(1)=0
  55.           IBRNPQ(3)=0
  56.           IACZ(1)=0
  57.           IACZ(3)=0
  58.           IACZQ(1)=0
  59.           IACZQ(3)=0
  60.           ITIM=0
  61.           ENDIF
  62.         ENDIF
  63. C     IF(TIME.GT.7.00)IDBG=1
  64. C     IF(TIME.GT.7.31)STOP 'TSTATD AT 7.31 HR'
  65. C  SEE IDBG SET AT LABEL 22 ALSO!!!!!!!!!!
  66. C
  67.       IF(ICODE.EQ.1)THEN
  68.         CALL TSTAT(IACZP,IBRN1Z,IBRNP,IEFAN,TI,TWALL,NRM)
  69. C  INITIAL VALUES OF ANTICIPATOR TEMPS ARE READ IN TSTAT ABOVE
  70.         GO TO 34
  71.         ENDIF
  72.       IF(ICODE.EQ.2)THEN
  73.         CALL TSTAT1(IACZP,IBRN1Z,IBRNP,IEFAN,TI,TWALL,NRM)
  74.         GO TO 34
  75.         ENDIF
  76. C  ICODE GT 2 BELOW
  77.       IF(FIRST)THEN
  78.         IF(IMODE.EQ.1)THEN
  79. C  COOLING OR HTG/COOLING
  80.           IAC=1
  81.           IACLS=IAC
  82.           IBURN1=0
  83.           IBURN=0
  84.           IBRNLS=IBURN
  85.           IEFAN=1
  86.           DO 2 I=1,NZN
  87.           IF(ICTRLZ(I).EQ.1)THEN
  88.             IACZ(I)=1
  89.             IACZP(I)=1
  90.             IACZPQ(I)=1
  91.           ELSE
  92.             IACZ(I)=0
  93.             IACZP(I)=0
  94.             IACZPQ(I)=0
  95.             ENDIF
  96.           IBRN(I)=0
  97.           IBRNP(I)=0
  98.    2      IBRNPQ(I)=0
  99.         ELSE IF(IMODE.EQ.2)THEN
  100. C  HEATING ONLY
  101.           IAC=0
  102.           IACLS=IAC
  103.           IBURN1=1
  104.           IBURN=1
  105.           IBRNLS=IBURN
  106.           IEFAN=0
  107.           DO 3 I=1,NZN
  108.           IACZ(I)=0
  109.           IACZP(I)=0
  110.           IACZPQ(I)=0
  111.           IF(ICTRLZ(I).EQ.1)THEN
  112.             IBRN(I)=1
  113.             IBRNP(I)=1
  114.             IBRNPQ(I)=1
  115.           ELSE
  116.             IBRN(I)=0
  117.             IBRNP(I)=0
  118.             IBRNPQ(I)=0
  119.             ENDIF
  120.    3      CONTINUE
  121.           ENDIF
  122.         ENDIF
  123. C
  124. C  - - - - - - - - - - - TOP OF ZONE LOOP HERE - - - - - - - - - - - - -
  125.       IF(ICODE.EQ.5)THEN
  126.         IACN=0
  127.         IBURNN=0
  128.         ENDIF
  129. C
  130.       DO 10 J=1,NROOMS
  131.       NRM=NRMA(J)
  132.       IF(ICTRLZ(NRM).EQ.0)GO TO 10
  133.       TIZ=TI(NRM)
  134.       TWZ=TWSTAT(NRM)
  135.       IF(ICODE.EQ.3)THEN
  136. C  SET INITIAL STATE OF ALL THERMOSTAT VARIABLES
  137. C    NOTE!!!IBRN IS USED TO SET DUCT DAMPERS TO ZONES
  138. C           IBRNP IS SAME AS IBRN EXCEPT IBRN MAY GET CHANGED BY DUMPING.
  139. C           SIMILARY WITH IACZ AND IACZP
  140.         CALL TSTAT2(IACZP,IBRN1Z,IBRNP,IEFAN,TIZ,TWZ,NRM)
  141.         IF(IDBG.NE.0)WRITE(60,501)NRM,IACZP(NRM),IBRN1Z(NRM),
  142.      +    IBRNP(NRM),IEFAN,TIZ,TWZ
  143.         IBRN(NRM)=IBRNP(NRM)
  144.         IACZ(NRM)=IACZP(NRM)
  145.         GO TO 10
  146.         ENDIF
  147. C
  148.       IF(ICODE.EQ.4)THEN
  149. C                 SET VALUES FOR TIME CONSTANTS
  150.         CALL TSTAT3(IACZP,IBRN1Z,IBRNP,IEFAN,TI,TWALL,NRM)
  151.         GO TO 10
  152.         ENDIF
  153. C        
  154.       IF(ICODE.EQ.5)THEN
  155. C                 SWITCH TSTAT IF NEEDED!      
  156.         CALL TSTAT4(IACZP,IBRN1Z,IBRNP,IEFAN,TIZ,TWZ,NRM)
  157.         IF(IDBG.NE.0)THEN
  158.           IF(NRM.EQ.1)THEN
  159.             WRITE(60,503)NRM,IBRNP(NRM),IBURNNZ(NRM),TIZ,TWZ
  160.           ELSE IF(NRM.EQ.2)THEN
  161.             WRITE(60,508)NRM,IBRNP(NRM),IBURNNZ(NRM),TIZ,TWZ
  162.           ELSE IF(NRM.EQ.3)THEN
  163.             WRITE(60,509)NRM,IBRNP(NRM),IBURNNZ(NRM),TIZ,TWZ
  164.             ENDIF
  165.           ENDIF
  166. C  TURN ON FURNACE OR A/C IF ANY ZONE TSTAT IS ON!          
  167. C  IBRNHI IS HILIMIT SWITCH CODE
  168.         IF(IBURNNZ(NRM).EQ.1.AND.IBRNHI.EQ.1)THEN
  169.           IBURNN=1
  170.         ENDIF
  171.         IF(IACNZ(NRM).EQ.1)IACN=1
  172. C  PRINT TIME AT SETPOINT CHANGES DURING HEATING
  173.         IF(TSSH1.NE.TSSH1L(NRM))THEN
  174.           TSSH1L(NRM)=TSSH1
  175.           TODP=(TIME/24.-INT(TIME/24.))*24.
  176.           IF(IDBG.NE.0)WRITE(60,513)TSSH1,NRM,TIME,TODP
  177.           ENDIF
  178.         GO TO 10
  179.         ENDIF
  180. C
  181.       IF(ICODE.EQ.6)THEN
  182. C  RESET VALUES
  183.         CALL TSTAT5(IACZP,IBRN1Z,IBRNP,IEFAN,TIZ,TWZ,NRM)
  184.         IF(IDBG.NE.0)WRITE(60,504)NRM,IACZP(NRM),IBRN1Z(NRM),
  185.      +    IBRNP(NRM),IEFAN
  186.         IACZ(NRM)=IACZP(NRM)
  187.         IBRN(NRM)=IBRNP(NRM)
  188.         GO TO 10
  189.         ENDIF
  190. C
  191.       IF(ICODE.EQ.7)THEN
  192. C  WRITE VALUES
  193.         CALL TSTAT6(IACZP,IBRN1Z,IBRNP,IEFAN,TIZ,TWZ,NRM)
  194.         ENDIF
  195.    10 CONTINUE
  196. C - - - - - - - - - BOTTOM OF ZONE LOOP HERE - - - - - - - - - -
  197.       IF(ICODE.LT.6.OR.ICODE.EQ.7)GO TO 30
  198. C  ICODE = 6 HERE !!!
  199. C  NOW SET IAC, IBRN1,IBURN,IEFAN IF NOT DUMPING RESIDUAL HEAT/COOL
  200.       IEB=0
  201.       IEQ=0
  202.       IAC=0
  203.       IBURN1=0
  204.       IBURN=0
  205.       DO 12 J=1,NROOMS
  206.       NRM=NRMA(J)
  207.       IF(ICTRLZ(NRM).EQ.0)GO TO 12
  208.       IF(IACZP(NRM).EQ.1)IAC=1
  209. C  NOTE!!!!IBURN1 IS PROBABLY NEVER USED UNLESS TWO-STAGE FURNACE
  210. C     FURNACE OPERATION IS MODELED (NOT CHECKED OUT BY BATTELLE)
  211.       IF(IBRN1Z(NRM).EQ.1)IBURN1=1
  212.       IF(IBRNP(NRM).EQ.1)IBURN=1
  213.       IF(IDBG.NE.0)WRITE(60,512)NRM,IAC,IBURN,TIME
  214.    12 CONTINUE
  215.       IF(IBRNLS.NE.IBURN.OR.IACLS.NE.IAC)THEN
  216.          IEB=1
  217.          IEQ=1
  218.          ENDIF
  219. C
  220.       DO 16 J=1,NROOMS
  221.       NRM=NRMA(J)
  222.       IF(ICTRLZ(NRM).EQ.0)GO TO 16
  223. C
  224.       NPR=NPR+1
  225.       IF(NPR.LE.NPRMAX)THEN
  226.         IF(IBRNPQ(NRM).NE.IBRNP(NRM)
  227.      +                         .OR.IACZPQ(NRM).NE.IACZP(NRM))THEN
  228.           DTM=TIME-TIME0(NRM)
  229.           IF(IBRNPQ(NRM).EQ.0)THEN
  230. C   BURNER TURNED ON
  231.               TIMEOF(NRM)=DTM
  232.               CYTIME=TIMEON(NRM)+TIMEOF(NRM)
  233.               CPH=1/CYTIME
  234.               PCTON=100.*TIMEON(NRM)/CYTIME
  235.               TIMP=TIME*60.
  236.               CYT=CYTIME*60.
  237.               TIMOF=TIMEOF(NRM)*60.
  238.               IF(IDBG.NE.0)WRITE(60,510)NRM,TIME,TIMP,PCTON,CPH,
  239.      +                     CYT,TIMOF
  240.               TIME0(NRM)=TIME
  241.           ELSE
  242. C   BURNER TURNED OFF
  243.               TIMEON(NRM)=DTM
  244.               TIME0(NRM)=TIME
  245.               TIMP=TIME*60.
  246.               TIMON=TIMEON(NRM)*60.
  247.               IF(IDBG.NE.0)WRITE(60,511)NRM,TIMP,TIMON
  248.               ENDIF
  249.            ENDIF
  250.           ENDIF
  251.    16 CONTINUE
  252. C
  253. C  SET DAMPERS TO DUMP ZONES IF NECESSARY !!!!!!!!!!!!!
  254. C    NOTE:::DUMP ZONES ARE SET BY VALUES IN IDUMPZ INPUT IN STRRUN
  255. C           IN NAMELIST "CONTROL".
  256. C  CHECK TO SEE IF ALL TSTATS ARE OFF AND BLOWER IS ON.
  257. C  IF SO, OPEN DAMPERS TO DUMP ZONES.
  258.       IDUMP=0
  259.       IF(IEFAN.EQ.1)THEN
  260.           IBZ=0
  261.           DO 18 J=1,NROOMS
  262.           NRM=NRMA(J)
  263. C                                      IS THIS ZONE CONDITIONED?
  264.           IF(ICTRLZ(NRM).EQ.0)GO TO 18
  265. C                                      IS ZONE HEATING TSTAT ON?
  266.           IF(IBRNP(NRM).EQ.1)IBZ=IBZ+1
  267. C                                      IS ZONE COOLING TSTAT ON?
  268.           IF(IACZP(NRM).EQ.1)IBZ=IBZ+1
  269.    18     CONTINUE
  270.           IF(IBZ.EQ.0)THEN
  271. C                                      OPEN DAMPERS TO DUMP ZONES.
  272.               IDUMP=1
  273.               DO 20 J=1,NROOMS
  274.               NRM=NRMA(J)
  275.               IF(ICTRLZ(NRM).EQ.0)GO TO 20
  276.               IF(IDUMPZ(NRM).EQ.0)GO TO 20
  277.               IBRN(NRM)=1
  278.               IACZ(NRM)=1
  279.    20         CONTINUE
  280.               IF(IDBG.NE.0.AND.IDMP.LE.IDMPMX)THEN
  281.                 IDMP=IDMP+1
  282.                 WRITE(60,507) TIME
  283.               ENDIF
  284.           ENDIF
  285.       ENDIF
  286.       IF(.NOT.FIRST)THEN
  287. C  CHECK TO SEE IF TSTAT IN ANY ZONE CHANGED STATE OR BLWR CHANGED STATE.
  288. C    IF SO, CALL DCTFLW(IFLG=1)SO THAT DUCT AND INTERZONE FLOWS GET SET
  289.           IFLG=0
  290.           DO 22 J=1,NROOMS
  291.           NRM=NRMA(J)
  292.           IF(ICTRLZ(NRM).EQ.0)GO TO 22
  293.  
  294. C  SET INDICE IF DUMPING NOW OR IN PREV TIMESTEP!
  295.           IDMPQ=0
  296.           IF(IDUMP.EQ.1.OR.IDUMPQ.EQ.1)IDMPQ=1
  297.  
  298. C  HAS ZONE DAMPER CHANGED STATE?
  299.           IF((IBRN(NRM).NE.IBRNQ(NRM)).OR.(IACZ(NRM).NE.IACZQ(NRM)))THEN
  300.             IFLG=1
  301. C  SET INDICATOR (IEQ) FOR CHANGE IN STATE OF ZONE DAMPERS
  302. C  IF DUMPING NOW OR IN PREV TIMESTEP, SET IEQ = 2 SO EVENT PROCESSOR
  303. C  WILL KNOW THAT THIS CHANGE IN STATE WASNT CHANGED BY A THERMOSTAT!
  304.             IEQ=1
  305.             IF(IDMPQ.EQ.1)IEQ=2
  306.           ENDIF
  307.  
  308. C   DONT CHANGE DUCT FLOWS UNTIL BLOWER COMES ON
  309.           IU1=1
  310.           IF(IEFAN.EQ.IBLWPQ.AND.IEFAN.EQ.0)IU1=0
  311.  
  312. C   CHANGE DUCT FLOWS WHEN BLOWER GOES OFF
  313.           IF(IEFAN.NE.IBLWPQ)THEN
  314.              IF(IU1.EQ.1)IFLG=1
  315.              IEQ=1
  316.              ENDIF
  317. C   CHANGE DUCT FLOWS WHEN ANY ZONE CALLS FOR HEAT OR SHUTS OFF HEAT
  318.           IF((IBRN(NRM).NE.IBRNQ(NRM)).OR.(IACZ(NRM).NE.IACZQ(NRM)))THEN
  319.              IF(IU1.EQ.1)IFLG=1
  320.              IEQ=1
  321.              ENDIF
  322.    22     CONTINUE
  323. C
  324. C          IDBGSS=IDBG
  325. C         IDBG=IDBGSV
  326.           IF(IFLG.EQ.1)CALL DCTFLW(IDBG)
  327. C          IDBG=IDBGSS
  328. C
  329.           ENDIF
  330. C  PRINT EVENTS AND TI VALUES ?
  331.           IF(IEQ.EQ.1.OR.IEB.EQ.1)CALL EVENTP(IEB,IEQ,IBRNP,IACZP,
  332.      +      IBRN,IACZ)
  333.           IF(IDBG.NE.0)THEN
  334.               WRITE(60,505)(IBRN(K),K=1,NROOMS)
  335.               WRITE(60,506)(IBRNQ(K),K=1,NROOMS)
  336.               ENDIF
  337.    30 CONTINUE
  338.  
  339. C  SAVE OLD VALUES OF STATE CODES
  340.       DO 32 J=1,NROOMS
  341.       NRM=NRMA(J)
  342.       IF(ICTRLZ(NRM).EQ.0)GO TO 32
  343. C  SUPPLY DAMPER STATE CODES
  344.       IBRNQ(NRM)=IBRN(NRM)
  345.       IACZQ(NRM)=IACZ(NRM)
  346. C  TSTAT STATE CODES
  347.       IBRNPQ(NRM)=IBRNP(NRM)
  348.       IACZPQ(NRM)=IACZP(NRM)
  349.    32 CONTINUE
  350. C  BLOWER STATE CODE
  351.       IBLWPQ=IEFAN
  352. C  BURNER (GAS VALVE) STATE CODE
  353.       IBRNLS=IBURN
  354. C  A/C STATE CODE
  355.       IACLS=IAC
  356.       IDUMPQ=IDUMP
  357.       FIRST=.FALSE.
  358.    34 IDBG=IDBGSV
  359.       RETURN
  360.   501 FORMAT(10X,'NRM,IACZP,IBRN1Z,IBRNP,IEFAN= ',5I5/
  361.      +10X,'TIZ,TWZ= ',2G13.5)
  362.   503 FORMAT(1X,'NRM,IBRNP(OLD,NEW),TA,TW= ',3I3,2G13.5)
  363.   504 FORMAT(10X,'NRM,IACZ,IBRN1Z,IBRNP,IEFAN= ',5I5)
  364.   505 FORMAT(10X,'NEW IBRN S= ',5I5)
  365.   506 FORMAT(10X,'OLD IBRN S= ',5I5)
  366.   507 FORMAT(1X,20(1H$),'TSTATD:DUMPING RESIDUAL HEAT/COOL AT TIME ',
  367.      +G13.5,' HR')
  368.   508 FORMAT(3X,'NRM,IBRNP(OLD,NEW),TA,TW= ',3I3,2G13.5)
  369.   509 FORMAT(5X,'NRM,IBRNP(OLD,NEW),TA,TW= ',3I3,2G13.5)
  370.   510 FORMAT(1H0,20(1H*),' THERMOSTAT ON EVENT IN ZONE ',I4/
  371.      +21X,'TIME(HR & MIN),PCTON,CPH= ',4G13.5/
  372.      +21X,'CYCLE TIME,TIME OFF(MIN)= ',2G13.5/)
  373.   511 FORMAT(1H0,25(1H*),' THERMOSTAT OFF EVENT IN ZONE ',I4/
  374.      +26X,'TIME(MIN),TIME ON(MIN)= ',2G13.5/)
  375.   512 FORMAT(1H0,'TSTATD:*****CONTROL TO SPACE CONDITIONER*****'/
  376.      +7X,'NRM,IAC,IBURN,TIME= ',3I5,2X,F12.5)
  377.   513 FORMAT(1X,'TSTATD:TSSH1= ',G13.5,' IN ZONE ',I4,' AT TIMYR,'
  378.      +,'TIMDAY= ',2G13.5)
  379.       END
  380.