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 / TSTAT.FOR < prev    next >
Text File  |  1992-05-08  |  18KB  |  531 lines

  1.       SUBROUTINE TSTAT(IACZP,IBURN1Z,IBRNP,IEFAN,TI,TWALL,I)
  2. C
  3. C  THERMOSTAT MODEL
  4. C    IACZP - A/C ON-OFF SIGNAL IN EACH ZONE
  5. C    IBURN
  6. C
  7. C  I - ZONE NO.
  8. C  IHONEY  = 0  CARRIER THERMOSTAT
  9. C           1  HONEYWELL ROUND THERMOSTAT
  10. C           2  T8200 HONEYWELL THERMOSTAT(GAS FURNACE)
  11. C           3  T8300 HONEYWELL THERMOSTAT(HEAT PUMP W/ SETBACK)
  12. C
  13. C   MODE = 1  AUTO HTG AND CLG
  14. C          2  CLG ONLY
  15. C          3  HTG ONLY
  16. C          4  NON AUTOMATIC HTG AND CLG
  17. C
  18. C   TIME  MUST BE TIME OF DAY(HRS) AND IS USED FOR SETBACK CALC
  19. C  REVISION:  ADDED T8300 MODEL ON 8/14/85
  20. C           (INTEGRAL ACTION ON HTG SETBACK RECOVERY NOT YET MODELED)
  21. C  1/11/91 RDF REDUCED MEMORY REQMT BY REVISING SETBACK CODE AND
  22. C              ELIMINATING RUNNING AVG OPTION WHICH WAS NEVER USED
  23. C  3/31/92 RDF REVISED THE MULTIZONE VERSION FROM TRNSYS-LIKE W/
  24. C              CONSTANTS IN CON ARRAY, REAL AND INTEG VAR IN VAR AND 
  25. C              IVAR ARRAY TO SIMPLY DIMENSIONING ALL TERMS IN SINGLE-
  26. C              ZONE TSTAT.  NOW TSTATS IN EACH ZONE CAN BE UNIQUE 
  27. C              AND ANY LATENT ERROR SHOULD BE ELIMINATED.
  28. C             
  29.       PARAMETER (SMALL=1.E-37)
  30. CMDK NWL
  31. CMDK NZN
  32. CMDK NZW
  33. CMDK BIDRUN
  34. CMDK BLKTS1
  35. CMDK BLSTBK
  36. CMDK BLKTST
  37. CMDK COLLEC
  38. CMDK DEBG
  39. CMDK ENCBK1
  40. CMDK TIMEB
  41. CMDK TSTATC
  42.       DIMENSION ANTC1(NZN),ANTH1(NZN),ANTH2(NZN),CNINTG(NZN),
  43.      + DIFFC1(NZN),DIFFH1(NZN),DIFFH2(NZN),IACZP(NZN),
  44.      + IACN1(NZN),IBRNP(NZN),IBUR1N(NZN),IBUR2N(NZN),IBURN1Z(NZN),
  45.      + IBURN2(NZN),IHONEY(NZN),SBKCOF(NZN),SBKCON(NZN),
  46.      + SBKHOF(NZN),SBKHOF2(NZN),SBKHON(NZN),SBKHON2(NZN),SETBC(NZN),
  47.      + SETBH(NZN),SETBH2(NZN),SETC1(NZN),SETH1(NZN),SETH2(NZN),
  48.      + SETHON2(NZN),TAC1(NZN),TAC1N(NZN),TAH1(NZN),TAH2(NZN),
  49.      + TATC1(NZN),TATH1(NZN),TATH2(NZN),TCTAC1(NZN),
  50.      + TCTAH1(NZN),TCTAH2(NZN),TCTC1(NZN),TCTH1(NZN),TCTH2(NZN),
  51.      + TCTWC1(NZN),TCTWH1(NZN),TCTWH2(NZN),TSC1(NZN),TSC1N(NZN),
  52.      + TSCT1(NZN),TSH1(NZN),TSH1N(NZN),TSH2(NZN),TSH2N(NZN),
  53.      + TSHT1(NZN),TSHT2(NZN),TSWC1(NZN),TSWC1N(NZN),TSWH1(NZN),
  54.      + TSWH1N(NZN),TSWH2(NZN),TSWH2N(NZN),TWCT1(NZN),TWHT1(NZN),
  55.      + TWHT2(NZN),WALCPG(NZN)
  56.       DIMENSION ICNT(NZN),AIRCPG(NZN),XINTG(NZN),IAC1(NZN),IACQ(NZN)
  57. C
  58.       LOGICAL NDEBUG
  59. C   ---   ____  ----   PARAMETERS IN NAMELIST
  60. C  IHONEY  - THERMOSTAT TYPE(SEE ABOVE)
  61. C  WALCPG  - WALL COUPLING FRACTION
  62. C  IZNCOLL - ZONE IN WHICH TO COLLECT TSTAT SENSOR TEMP IN CDATA(64)
  63. C  CNINTG   INTEGRATOR CONSTANT USED TO MINIMIZE DROOP IN T8300 TSTAT
  64. C  TWCT1,TWHT1,TWHT2  WALL TIME CONST,HR
  65. C  TATC1,TATH1,TATH2   ANTICIPATOR TIME CONST,HR
  66. C  TAH1,TAH2   INITIAL VALUES OF ANTICIPATOR TEMP,F
  67. C ***   TSXTN  - SENSOR TIME CONSTANT (FOR AIR SENSOR IN T8200 AND 
  68. C                T8300 TSTAT,HR
  69. C ***   ANTXN  - ANTICIPATION
  70. C ***   SETXN  - SET POINT
  71. C ***   DIFFXN - DIFFERENTIAL
  72. C ***   SETBX  - AMOUNT OF SET-BACK(POSITIVE FOR SETBACK,NEG FOR SETUP)
  73. C ***   SBKXON - SET-BACK START TIME (0. TO 24. HR)
  74. C ***   SBKXOF - SET-BACK STOP TIME (0. TO 24. HR)
  75.       NAMELIST/TSTATN/
  76.      + IHONEY,WALCPG,IZNCOLL,CNINTG,
  77.      + TSCT1,TWCT1,TATC1,ANTC1,TAC1,
  78.      + DIFFC1,SETC1,SETBC,SBKCON,SBKCOF,
  79.      + TSHT1,TWHT1,TATH1,ANTH1,TAH1,
  80.      + DIFFH1,SETH1,SETBH,SBKHON,SBKHOF,
  81.      + TSHT2,TWHT2,TATH2,ANTH2,TAH2,
  82.      + DIFFH2,SETH2,SETBH2,SBKHON2,SBKHOF2
  83. C     
  84.       DATA WALCPG,TWCT1,TATC1,TWHT1,TATH1,TWHT2,TATH2/7*NZN*0./
  85.       DATA TAC1N/NZN*0./
  86.       DATA IBRNI/1/,IBLW/0/
  87.       DATA NPRMAX/500/
  88.       DATA TAH1,TAH2/2*NZN*0./
  89.       DATA CNINTG/NZN*0./
  90.       DATA IRESETBK/0/
  91.       NDEBUG=.FALSE.
  92.       NPR=0
  93.       OPEN(15,FILE='TAPE15',STATUS='OLD',IOSTAT=IO15)
  94.       IF(IO15.NE.0)THEN
  95.         WRITE(60,*) ' TSTAT: CANT OPEN TAPE15 WITH HONEYW NAMELIST'
  96.         STOP ' TSTAT: CANT OPEN TAPE15'
  97.       ENDIF
  98.       READ(15,TSTATN)
  99.       WRITE(60,TSTATN)     
  100.       CLOSE(15)
  101.       DO 2 J=1,NZN
  102.       ICNT(J)=0
  103.       IF(CNINTG(J).LT.0.)THEN
  104.         CNINTG(J)=ABS(CNINTG(J))
  105.         ICNT(J)=1
  106.       ENDIF
  107. C  - - -  INPUT CNINTG(J) AS NEG IF WANT TO BYPASS INTEG ON DIF1
  108. C          (USED ON RAMP UP TEST TO CHECK OPERATION OF TSTAT ON CLG)
  109.       IF (SETC1(J) .LT. SETH1(J)+DIFFH1(J)) THEN
  110.         WRITE(60,3020)
  111.         STOP ' ***OVERLAP BETWEEN A/C & H/P THERMOSTATS - RUN STOPPED'
  112.       ENDIF
  113.       WRITE(60,*)' THERMOSTAT INPUT DATA FOR ZONE ',J
  114.       WRITE(60,2170) TSHT1(J),ANTH1(J),SETH1(J),DIFFH1(J),SETBH(J),
  115.      +               SBKHON(J),SBKHOF(J)
  116.       WRITE(60,2180) TSHT2(J),ANTH2(J),SETH2(J),DIFFH2(J),SETBH2(J),
  117.      +               SBKHON2(J),SBKHOF2(J)
  118.       WRITE(60,2190) IHONEY,WALCPG,TWCT1(J),TWHT1(J),TWHT2(J),
  119.      +               TATC1(J),TATH1(J),TATH2(J)
  120.       AIRCPG(J)=1.-WALCPG(J)
  121.       IF(ITHERM.EQ.0)AIRCPG(J)=1.
  122.     2 CONTINUE      
  123.       IMODE=1
  124.       IF(MODE.EQ.3)IMODE=2
  125.       RETURN
  126.       ENTRY TSTAT1(IACZP,IBURN1Z,IBRNP,IEFAN,TI,TWALL,I)
  127. C *** RESET IMODE FOR SPECIFIED HTG AND CLG MONTHS, IF ANY
  128.       NPR=0
  129.       IF ((KM.GE.MONCS).AND.(KM.LE.MONCE)) IMODE=1
  130.       IF ((KM.GE.MONHS).OR.(KM.LE.MONHE)) IMODE=2
  131.       RETURN
  132. C
  133.       ENTRY TSTAT2(IACZP,IBURN1Z,IBRNP,IEFAN,TI,TWALL,I)
  134. C *** DETERMINE INITIAL STATES OF ALL CONTROLS
  135. C
  136.       TT=TI
  137.       IF(ITHERM.GT.0)THEN
  138.         IF(WALCPG(I).EQ.0.)THEN
  139.           TT=.5*(TI+TWALL)
  140.         ELSE
  141.           TT=TI*AIRCPG(I)+TWALL*WALCPG(I)
  142.         ENDIF
  143.       ENDIF
  144.       TSC1(I)=TT
  145.       TSH1(I)=TT
  146.       TSH2(I)=TT
  147.       TAC1(I)=0.
  148.       TDIF1=0.
  149.       IF(IHONEY(I).LT.2)GO TO 146
  150.       TIA=TI*AIRCPG(I)
  151.       TTPW=TWALL*WALCPG(I)
  152.       TSC1(I)=TIA
  153.       TSH1(I)=TIA
  154.       TSH2(I)=TIA
  155.       TSWC1(I)=TTPW
  156.       TSWH1(I)=TTPW
  157.       TSWH2(I)=TTPW
  158.       TSC1N(I)=TSC1(I)
  159.       TSH1N(I)=TSH1(I)
  160.       TSH2N(I)=TSH2(I)
  161.       TSWC1N(I)=TSWC1(I)
  162.       TSWH1N(I)=TSWH1(I)
  163.       TSWH2N(I)=TSWH2(I)
  164.   146 IAC1(I)=1-IACZP(I)
  165.       IACNZ(I)=IACZP(I)
  166.       IACN1(I)=1-IACNZ(I)
  167.       IF(MODE.EQ.2) THEN
  168.         IBRNP(I)=0
  169.         IBURNNZ(I)=0
  170.         IBUR1N(I)=0
  171.         IBUR2N(I)=0
  172.         IBURN1Z(I)=0
  173.         IBURN2(I)=0
  174.       ELSE
  175.         IBRNP(I)=IBRNI
  176.         IBURNNZ(I)=IBRNI
  177.         IBUR1N(I)=IBRNI
  178.         IBUR2N(I)=IBRNI
  179.         IBURN1Z(I)=IBRNI
  180.         IBURN2(I)=IBRNI
  181.       ENDIF
  182.       IEFAN=IBLW
  183.       CALL SETBAK(TIME,IMODE,SETH1(I),SETH2(I),SETBH(I),SBKHON(I),
  184.      +            SBKHOF(I),SETBH2(I),SBKHON2(I),SBKHOF2(I),TSSH1,
  185.      +            TSSH2,SETC1(I),SETBC(I),SBKCON(I),SBKCOF(I),TSSC1)
  186.       GO TO (390,390,400,410), MODE
  187.   390 TSUM=TSC1(I)
  188.       IF(IHONEY(I).EQ.1)TSUM=TSC1(I)+TAC1(I)
  189.       IF(IHONEY(I).GE.2)THEN
  190.         TSENS=TSC1N(I)+TSWC1N(I)
  191.         TDIF=TSENS-TSSC1
  192.         TSM=TDIF+TAC1N(I)
  193.         GO TO 392
  194.       ENDIF
  195.       TSM=TSUM-TSSC1
  196.   392 IF(TSM.GE.DIFFC1(I))IACZP(I)=1
  197.       IF(TSM.LE.0.)IACZP(I)=0
  198.       IAC1(I)=1-IACZP(I)
  199.       IF(MODE.GT.1) GO TO 420
  200.  400  CONTINUE
  201. C ***   FURNACE CANNOT BE ON IF A/C IS ON . . .
  202.       TSUM1=TSH1(I)
  203.       IF(IHONEY(I).EQ.1)TSUM1=TSH1(I)+TAH1(I)
  204.       IF(IHONEY(I).GE.2)THEN
  205.         TSENS=TSH1N(I)+TSWH1N(I)
  206.         TDIF=TSENS-TSSH1
  207.         TSM=TDIF+TAH1N(I)
  208.         GO TO 402
  209.       ENDIF
  210.       TSM=TSUM1-TSSH1
  211.   402 IF(TSM.GE.DIFFH1(I))IBURN1Z(I)=0
  212.       IF(TSM.LE.0.)IBURN1Z(I)=IAC1(I)
  213.       TSUM2=TSH2(I)
  214.       IF(IHONEY(I).EQ.1)TSUM2=TSH2(I)+TAH2(I)
  215.       IF(IHONEY(I).GE.2)THEN
  216.         TSENS=TSH2N(I)+TSWH2N(I)
  217.         TDIF=TSENS-TSSH2
  218.         TSM=TDIF+TAH2N(I)
  219.         GO TO 404
  220.       ENDIF
  221.       TSM=TSUM2-TSSH2
  222.   404 IF(TSM.GE.DIFFH2(I))IBURN2(I)=0
  223.       IF(TSM.LE.0.)IBURN2(I)=IAC1(I)
  224.       IACP= (1-IBURN1Z(I))*IBURN2(I)
  225.       IBRNP(I)= IBURN1Z(I)+IACP
  226.       GO TO 420
  227. 410   IF((KM.GE.MONCS) .AND. (KM.LE.MONCE)) GO TO 390
  228.       IF((KM.GE.MONHS) .OR. (KM.LE.MONHE)) GO TO 400
  229.   420 CONTINUE
  230.       RETURN
  231. C
  232.       ENTRY TSTAT3(IACZP,IBURN1Z,IBRNP,IEFAN,TI,TWALL,I)
  233. C  ***  COMPUTE TIME CONSTANT TERMS
  234.       TCTC1(I) = DTIME/TSCT1(I)
  235.       TCTH1(I) = DTIME/TSHT1(I)
  236.       TCTH2(I)= DTIME/TSHT2(I)
  237.       IF(IHONEY(I)-1)430,422,422
  238.   422 TCTAC1(I)=DTIME/TATC1(I)
  239.       TCTAH1(I)=DTIME/TATH1(I)
  240.       TCTAH2(I)=DTIME/TATH2(I)
  241.       IF(IHONEY(I).EQ.1)GO TO 430
  242.       TCTWC1(I)=DTIME/TWCT1(I)
  243.       TCTWH1(I)=DTIME/TWHT1(I)
  244.       TCTWH2(I)=DTIME/TWHT2(I)
  245.       XINTG(I)=CNINTG(I)*DTIME
  246.   430 CONTINUE
  247.       RETURN
  248. C
  249.       ENTRY TSTAT4(IACZP,IBURN1Z,IBRNP,IEFAN,TI,TWALL,I)
  250. C
  251. C FOR RUNNING 121486 BELOW!!!!!(SEE ALSO TSTATD)
  252.       IF(IDRUN.EQ.'1214'.AND.IRESETBK.EQ.0)THEN
  253.         IF(TIME.GT.12.00)THEN
  254. C  SET BACK IN ZONES 1 AND 3 AFTER NOON OF 1ST DAY OF 121486 RUN!
  255.           IRESETBK=1        
  256.           SBKHON(1)=0.
  257.           SBKHON(3)=0.
  258.           SETBH(1)=40.
  259.           SETBH(3)=40.
  260.           SBKHOF(1)=24.
  261.           SBKHOF(3)=24.
  262.           SETBH2(1)=40.
  263.           SETBH2(3)=40.
  264.           SBKHOF2(1)=24.
  265.           SBKHOF2(3)=24.  
  266.         ENDIF
  267.       ENDIF
  268. C *** FIND NEW SET POINTS FOR ALL THERMOSTATS
  269.       CALL SETBAK(TIME,IMODE,SETH1(I),SETH2(I),SETBH(I),SBKHON(I),
  270.      +            SBKHOF(I),SETBH2(I),SETHON2(I),SBKHOF2(I),TSSH1,
  271.      +            TSSH2,SETC1(I),SETBC(I),SBKCON(I),SBKCOF(I),TSSC1)
  272. C      
  273.       IAC1(I)=1-IACZP(I)
  274.       TT = TI
  275.       IF(ITHERM.GT.0.)THEN
  276.         IF(WALCPG(I).EQ.0.)THEN
  277.           TT=.5*(TI+TWALL)
  278.         ELSE
  279.           TT=TI*AIRCPG(I)+TWALL*WALCPG(I)
  280.         ENDIF
  281.       ENDIF
  282.       IF(IMODE.GT.1)GOTO 690
  283. C  ****  COOLING
  284.       IF(IHONEY(I).EQ.0)THEN
  285. C             CARRIER THERMOSTAT      
  286.         TSC1N(I) = TCTC1(I)*(TT-TSC1(I)+ANTC1(I)*IAC1(I))+TSC1(I)
  287.         TSUM=TSC1N(I)
  288.         TSM=TSUM-TSSC1
  289.       ELSEIF(IHONEY(I).EQ.1)THEN
  290. C             HONEYWELL ROUND THERMOSTAT      
  291.         TSC1N(I)=TCTC1(I)*(TT-TSC1(I))+TSC1(I)
  292.         TAC1N(I)=TCTAC1(I)*(ANTC1(I)*IACZP(I)-TAC1(I))+TAC1(I)
  293.         TSUM=TSC1N(I)+TAC1N(I)
  294.         TSM=TSUM-TSSC1
  295.       ELSE
  296. C              HONEYWELL T8200 AND T8300 THERMOSTATS
  297.         TSC1N(I)=TCTC1(I)*(TI*AIRCPG(I)-TSC1(I))+TSC1(I)
  298.         TSWC1N(I)=TCTWC1(I)*(TWALL*WALCPG(I)-TSWC1(I))+TSWC1(I)
  299.         TAC1N(I)=TCTAC1(I)*(ANTC1(I)*IACZP(I)-TAC1(I))+TAC1(I)
  300.         TSENS=TSC1N(I)+TSWC1N(I)
  301.         TDIF=TSENS-TSSC1
  302. C  INTEGRATE TEMP DIF TO MINIMIZE DROOP BY INCREASING CYCLE RATE
  303.         IF(IHONEY(I).EQ.2)THEN
  304.           TDIF1=0.
  305.         ELSE
  306.           IF(ICNT(I).EQ.0)THEN
  307.             TDIF1=TDIF*XINTG(I)+TDIF1
  308.             IF(TDIF1.GT.3.) TDIF1=3.
  309.             IF(TDIF1.LT.0.) TDIF1=0.
  310.           ELSE
  311.             TDIF1=0.
  312.           ENDIF
  313.         ENDIF
  314.         TSM=TDIF1+TAC1N(I)+TDIF
  315.       ENDIF
  316.       IF(ICOLL.NE.0.AND.I.EQ.IZNCOLL)CDATA(64) = TSM
  317.       IF(TSM.GE.DIFFC1(I)) THEN
  318.         IACNZ(I)=1
  319.         IBURNNZ(I)=0
  320.       ENDIF
  321.       IF(TSM.LE.0.)IACNZ(I)=0
  322.       IEFAN=IACNZ(I)
  323.       IF(NDEBUG) WRITE(60,510) TDIF,TAC1N(I),TDIF1
  324.       IF(MODE.GT.1)GO TO 710
  325.       IACN1(I)=1-IACNZ(I)
  326. C  ***  HEATING
  327.   690 IF(IHONEY(I).EQ.0)THEN
  328. C              CARRIER THERMOSTAT EQUATIONS 
  329.         TSH1N(I) = TCTH1(I)*(TT-TSH1(I)+ANTH1(I)*IBURN1Z(I))+TSH1(I)
  330.         TSH2N(I)=TCTH2(I)*(TT-TSH2(I)+ANTH2(I)*IBURN2(I))+TSH2(I)
  331.         TSUM1=TSH1N(I)
  332.         TSUM2=TSH2N(I)
  333.         TSM1=TSUM1-TSSH1
  334.       ELSE
  335.         TAH1N(I)=TCTAH1(I)*(ANTH1(I)*IBURN1Z(I)-TAH1(I))+TAH1(I)
  336.         IF(TAH1N(I).LT.0.)TAH1N(I)=0.
  337.         TAH2N(I)=TCTAH2(I)*(ANTH2(I)*IBURN2(I)-TAH2(I))+TAH2(I)
  338.         IF(TAH2N(I).LT.0.)TAH2N(I)=0.
  339.         IF(IHONEY(I).EQ.1)THEN
  340. C              HONEYWELL ROUND THERMOSTAT
  341.           TSH1N(I)=TCTH1(I)*(TT-TSH1(I))+TSH1(I)
  342.           TSH2N(I)=TCTH2(I)*(TT-TSH2(I))+TSH2(I)
  343.           TSUM1=TSH1N(I)+TAH1N(I)
  344.           TSUM2=TSH2N(I)+TAH2N(I)
  345.           TSM1=TSUM1-TSSH1
  346.           TSM2=TSUM2-TSSH2
  347.         ELSE
  348. C             HONEYWELL T8200 AND T8300 THERMOSTATS
  349.           TSH1N(I)=TCTH1(I)*(TI*AIRCPG(I)-TSH1(I))+TSH1(I)
  350.           IF(TSH1N(I).LT.SMALL)TSH1N(I)=0.
  351.           TSWH1N(I)=TCTWH1(I)*(TWALL*WALCPG(I)-TSWH1(I))+TSWH1(I)
  352.           IF(TSWH1N(I).LT.SMALL)TSWH1N(I)=0.
  353.           TSH2N(I)=TCTH2(I)*(TI*AIRCPG(I)-TSH2(I))+TSH2(I)
  354.           IF(TSH2N(I).LT.SMALL)TSH2N(I)=0.
  355.           TSWH2N(I)=TCTWH2(I)*(TWALL*WALCPG(I)-TSWH2(I))+TSWH2(I)
  356.           IF(TSWH2N(I).LT.SMALL)TSWH2N(I)=0.
  357.           TSENS=TSH1N(I)+TSWH1N(I)
  358.           TDIF=TSENS-TSSH1
  359.           IF(IHONEY(I).EQ.2)THEN
  360.             TDIF1=0.
  361.           ELSE
  362.             IF(ICNT(I).EQ.0)THEN
  363.               TDIF1=TDIF*XINTG(I)+TDIF1
  364.               IF(TDIF1.GT.3.) TDIF1=3.
  365.               IF(TDIF1.LT.0.) TDIF1=0.
  366.             ELSE
  367.               TDIF1=0.
  368.             ENDIF
  369.           ENDIF
  370.           TSM1=TDIF1+TAH1N(I) + TDIF
  371.           TSENS=TSH2N(I)+TSWH2N(I)
  372.           TDIF=TSENS-TSSH2
  373.           IF(IHONEY(I).EQ.2)THEN
  374.             TDIF1=0.
  375.           ELSE
  376.             IF(ICNT(I).EQ.0)THEN
  377.               TDIF1=TDIF*XINTG(I)+TDIF1
  378.               IF(TDIF1.GT.3.) TDIF1=3.
  379.               IF(TDIF1.LT.0.) TDIF1=0.
  380.             ELSE
  381.               TDIF1=0.
  382.             ENDIF
  383.           ENDIF
  384.           TSM2=TDIF1+TAH2N(I) + TDIF
  385.         ENDIF
  386.       ENDIF
  387. C - - - SET STATE OF THERMOSTAT SWITCH
  388.       IF(TSM1.GE.DIFFH1(I))IBUR1N(I)=0
  389.       IF(TSM1.LE.0.)IBUR1N(I)=IACN1(I)
  390.       IF(ICOLL.NE.0.AND.IZNCOLL.EQ.I) CDATA(64)=TSM1
  391. C      
  392.       IF(IHONEY(I).LT.2)TSM2=TSUM2-TSSH2
  393.       IF(TSM2.GE.DIFFH2(I))IBUR2N(I)=0
  394.       IF(TSM2.LE.0.)IBUR2N(I)=IACN1(I)
  395. C      
  396. 710   IACP=(1-IBUR1N(I))*IBUR2N(I)
  397.       IBURNNZ(I)=IACP+IBUR1N(I)
  398.       IF(NDEBUG)THEN
  399.         WRITE(60,*)' TIME,IBURNN,TSSH1= ',TIME,IBURNNZ(I),TSSH1
  400.         WRITE(60,*)'      TAH1N,TSM1,DIFFH1= ',TAH1N(I),TSM1,DIFFH1(I)
  401.         WRITE(60,*)'      TSENS,TI,TWALL= ',TSENS,TI,TWALL
  402.         WRITE(60,*)' '
  403.       ENDIF
  404.       RETURN
  405. C
  406.       ENTRY TSTAT5(IACZP,IBURN1Z,IBRNP,IEFAN,TI,TWALL,I)
  407. C  ***  RESET VALUES
  408.       TSC1(I) = TSC1N(I)
  409.       TSH1(I)=TSH1N(I)
  410.       TSH2(I)=TSH2N(I)
  411.       TAC1(I)=TAC1N(I)
  412.       TSWC1(I)=TSWC1N(I)
  413.       TAH1(I)=TAH1N(I)
  414.       TAH2(I)=TAH2N(I)
  415.       TSWH1(I)=TSWH1N(I)
  416.       TSWH2(I)=TSWH2N(I)
  417.       IBURN1Z(I)=IBUR1N(I)
  418.       IBURN2(I)=IBUR2N(I)
  419.       IBRNP(I)=IBURNNZ(I)
  420.       IACQ(I)=IACZP(I)
  421.       IACZP(I)=IACNZ(I)
  422.       IF(.NOT.NDEBUG)RETURN
  423.       GO TO 720
  424. C      
  425.       ENTRY TSTAT6(IACZP,IBURN1Z,IBRNP,IEFAN,TI,TWALL,I)
  426. C *** WRITE VALUES OF THERMOSTAT PARAMETERS      
  427.   720 NPR=NPR+1
  428.       IF(NPR.GT.NPRMAX)RETURN
  429.       IF(NPR.LE.1.AND.MODE.NE.2)WRITE(60,3001)
  430.       IF(NPR.LE.1.AND.MODE.EQ.2)WRITE(60,3002)
  431.       IF(MODE.NE.2)THEN
  432.       WRITE(60,3000)TIME,TI,TWALL,TSH1(I),TSH2(I),TAH1(I),TAH2(I),
  433.      +               TSWH1(I),TSWH2(I),IBURN1Z(I),IBURN2(I),IBRNP(I)
  434.       ELSE
  435.         WRITE(60,3003)TIME,TI,TWALL,TSC1(I),TAC1(I),TSWC1(I),
  436.      +                 IACQ(I),IACNZ(I)
  437.       ENDIF
  438.       RETURN
  439.   500 FORMAT(1X,'TAC1N= ',G13.5)
  440.   510 FORMAT(1X,'TSTAT - TDIF,TAC1N,TDIF1 ',3E11.3)
  441.  2160 FORMAT(1H0,17X,'THERMOSTAT SETTING',11X,'SET BACK'/14X,
  442.      +       'T/C    ANTC   SET   DIFF   AMT    ON    OFF'/
  443.      +       ' COOLING   ',F9.5,F5.2,F7.1,F6.3,F7.1,2F7.2)
  444.  2170 FORMAT(' HEAT #1   ',F9.5,F5.2,F7.1,F6.3,F7.1,2F7.2)
  445.  2180 FORMAT (' HEAT #2   ',F9.5,F5.2,F7.1,F6.3,F7.1,2F7.2)
  446.  2190 FORMAT(1X,' IHONEY= ',I5,' WALL COUPLING= ',G13.5/
  447.      +1X,'WALL SENSOR TIME CONST(CLG,HTG1,HTG2)= ',3G13.5/
  448.      +1X,'ANTICIPATOR TIME CONST(CLG,HTG1,HTG2)= ',3G13.5)
  449.  3000 FORMAT(1X,F10.3,8(1X,F6.2),3(3X,I4))
  450.  3001 FORMAT(1H1,3X,4HTIME,6X,2HTI,4X,5HTWALL,2X,4HTSH1,3X,4HTSH2,
  451.      +3X,4HTAH1,3X,4HTAH2,3X,5HTSWH1,2X,5HTSWH2,2X,6HIBURN1,1X,
  452.      +6HIBURN2,1X,5HIBURN)
  453.  3002 FORMAT(1H1,3X,4HTIME,6X,2HTI,4X,5HTWALL,2X,4HTSC1,3X,4HTAC1,
  454.      +3X,5HTSWC1,7X,3HIAC,9X,
  455.      +4HIACN)
  456.  3003 FORMAT(1X,F10.3,5(1X,F6.2),2(3X,I4))
  457.  3020 FORMAT(' ***OVERLAP BETWEEN A/C & H/P THERMOSTATS - RUN STOPPED')
  458.       END
  459.       SUBROUTINE SETBAK(TIME,IMODE,SETH1,SETH2,SETBH,SBKHON,SBKHOF,
  460.      +                  SETBH2,SBKHON2,SBKHOF2,
  461.      +                  TSSH1,TSSH2,SETC1,SETBC,SBKCON,SBKCOF,TSSC1)
  462. C  SETBACK/SETUP CONTROL MODEL     
  463. C           NOTE:: THE CODE BELOW FROM MULTIZONE SP43 TSTAT
  464. C                  ELIMINATES THE NEED FOR LARGE SETBHN,SETBCN ARRAYS      
  465.       IF(IMODE.EQ.1)THEN
  466. C   **********  COOLING  ***********      
  467.         IF(SBKCON.EQ.SBKCOF)THEN
  468. C                                   ***NO SETBACK 
  469.           TSSC1=SETC1 
  470.         ELSE
  471. C                                   ***SETBACK SOMETIME DURING THE DAY
  472.           SETBCN=0. 
  473.           IF(SBKCON.GT.SBKCOF)THEN
  474. C                                   ***SETBACK STARTS BEFORE MIDNIGHT 
  475.             IF(TIME.GT.SBKCON)SETBCN=SETBC
  476.             IF(TIME.LE.SBKCOF)SETBCN=SETBC
  477.           ELSE
  478. C                                   ***SETBACK STARTS AFTER MIDNIGHT
  479.             IF(SBKCON.LE.TIME.AND.TIME.LE.SBKCOF)SETBCN=SETBC 
  480.           ENDIF 
  481.           TSSC1=SETC1-SETBCN
  482.         ENDIF 
  483.       ELSE
  484. C        ********* HEATING **********      
  485.         ICODE=0
  486.         IF(SBKHON.NE.SBKHOF.AND.SBKHON2.EQ.SBKHOF2)THEN
  487.           ICODE=1
  488.         ELSEIF(SBKHON.EQ.SBKHOF.AND.SBKHON2.NE.SBKHOF2)THEN
  489.           ICODE=2
  490.         ELSE
  491. C              BOTH SETBACKS AVAILABLE!        
  492.           ICODE=3
  493.         ENDIF
  494.         IF(ICODE.EQ.0)THEN
  495.           TSSH1=SETH1
  496.           TSSH2=SETH2
  497.           GO TO 30
  498.         ENDIF
  499.         IF(ICODE.EQ.2)GO TO 10
  500. C              1ST SETBACK!!!!!!!!!!!        
  501. C                                   ***SETBACK SOMETIME DURING THE DAY
  502.         SETBHN=0. 
  503.         IF(SBKHON.GT.SBKHOF)THEN
  504. C                                   ***SETBACK STARTS BEFORE MIDNIGHT 
  505.           IF(TIME.GT.SBKHON)SETBHN=SETBH
  506.           IF(TIME.LE.SBKHOF)SETBHN=SETBH
  507.         ELSE
  508. C                                   ***SETBACK STARTS AFTER MIDNIGHT
  509.           IF(SBKHON.LE.TIME.AND.TIME.LE.SBKHOF)SETBHN=SETBH 
  510.         ENDIF 
  511.         IF(ICODE.EQ.1)GO TO 20
  512. C              2ND SETBACK!!!!!!!!!!!          
  513.    10   CONTINUE          
  514. C                                   ***SETBACK SOMETIME DURING THE DAY
  515.         IF(SBKHON2.GT.SBKHOF2)THEN
  516. C                                   ***SETBACK STARTS BEFORE MIDNIGHT 
  517.           IF(TIME.GT.SBKHON2)SETBHN=SETBH2
  518.           IF(TIME.LE.SBKHOF2)SETBHN=SETBH2
  519.         ELSE
  520. C                                   ***SETBACK STARTS AFTER MIDNIGHT
  521.           IF(SBKHON2.LE.TIME.AND.TIME.LE.SBKHOF2)SETBHN=SETBH2 
  522.         ENDIF 
  523.    20   CONTINUE          
  524.         TSSH1=SETH1-SETBHN
  525.         TSSH2=SETH2-SETBHN
  526.       ENDIF
  527.    30 CONTINUE      
  528.       RETURN
  529.       END
  530.