| 
Barmby 
  Click here  to return to the previous page     --   Please note the date - May88, it was the forefront at the time. I am including such an old program because this is a self contained bit of software - more recent work that I have done has within more complicated packages such as VB, Fix32, VBa etc...  and are thus more difficult to explain to the general viewer of this website. 
 
Here is the program listing :- 
    PRINT "       Filename                 BARMBY.BAS         " 
    PRINT " **************************************************" 
    PRINT " *          YORKSHIRE WATER AUTHORITY             *" 
    PRINT " *                                                *" 
    PRINT " *    ...... Complete Control Program .....       *" 
    PRINT " *                                                *" 
    PRINT " *             AUGHTON PROCESS AUTOMATION         *" 
    PRINT " *               BIRCHWOOD SCIENCE PARK           *" 
    PRINT " *              WARRINGTON    0925 830084         *" 
    PRINT " *                                                *" 
    PRINT " *   Author:-        Greg McCormack               *" 
    PRINT " *   PROJECT NUMBER :-  53/3521                   *" 
    PRINT " *   Version Number :-  0.06           May   '88  *" 
    PRINT " **************************************************" 
    PRINT 
 
    BIG=20000:GOSUB 120:CLS 
 
    ON ERROR GOTO 297 
 
    DIM     TAG$(40),SENSE%(40),A%(40),AA%(3),UNIT$(15),ZERO%(15),_ 
        RANGE%(15),S$(3),PASSWORD$(2),ALARM%(40),ALRMTIME$(40),_ 
        REGISTER%(2),MONTH(12),MONTH$(12),ANAL(5),POWER2%(7),_ 
        TYPE%(40),WHOLEMONTH$(12),ARRAY(200,4),ARRAY4hr(200,4),_ 
        COL%(4),INDEX%(2),AAA%(4),ANALOFFSET(4),ANALGAIN(4),_ 
        ARRAY13hr(200,4) 
 
    KEY OFF:CODE=0:PRT=VARPTR(CODE) 
    POKE PRT,205:POKE PRT+1,5:POKE PRT+2,203 
    GOSUB 223 : PPP=1 
 
 
25      PPP$=INKEY$ : IF PPP$="" THEN GOTO 34 
    PPP=VAL(PPP$) 
 
    IF INSTR("Aa",PPP$) THEN PPP=10 
    IF INSTR("  ",PPP$) THEN PPP=1 
    IF INSTR("Pp",PPP$) THEN GOSUB 279        ' To print screen 
    IF INSTR("Oo",PPP$) THEN GOSUB 157        ' OPERATE 
    ' Temporary Key Detections 
    IF INSTR("Qq",PPP$) THEN LOCATE 5,1:END 
    IF INSTR("Bb",PPP$) THEN PPP=11 
    IF INSTR("Tt",PPP$) THEN A%(26)=1-A%(26):_ 
            LOCATE 2,2:PRINT "A%(26)= ";A%(26) 
    IF INSTR("Yy",PPP$) THEN GOSUB 240 : GOSUB 247  ' Alarm Check 
    IF INSTR("Uu",PPP$) THEN GOSUB 265  ' 4Hr Trend UPdate 
    IF INSTR("Ii",PPP$) THEN GOSUB 235  ' 13 Hr Trend  update and archive 
    IF INSTR("Gg",PPP$) THEN GOSUB 260  ' Gate Archive 
    IF INSTR("QqTtYyUuIiGg",PPP$) THEN GOTO 25 
 
34      IF PPP=0 OR PPP=OOO THEN GOTO 39 
    OOO=PPP 
    '             1   2   3   4   5   6   7   8   9   10  11 
    ON OOO GOSUB  41, 42, 42, 42, 41, 41, 42, 41, 41, 41, 41 
    ON OOO GOSUB  47, 61, 64, 67, 70, 73, 75, 91, 97,111,117 
    COLOR 7 
    LOCATE U,50:PRINT "DATE: "UKDATE$;" TIME: ";TIME$ 
    LOCATE U,U :PRINT "Page ";:PRINT USING "##";OOO 
 
39      ON OOO GOSUB 130,165,130,130,169,180,130,130,130,185,130 
 
    LOCATE U,72 : COLOR 7:PRINT TIME$ 
 goto 25 
    IF ABS(TIMER-TIM1)>  5 THEN TIM1=TIMER:_ 
                   GOSUB 240 : GOSUB 247  ' Alarm Checking 
    IF ABS(TIMER-TIM2)> 30 THEN TIM2=TIMER:GOSUB 265  ' 4Hr Trend Update 
    IF ABS(TIMER-TIM3)>300 THEN TIM3=TIMER:_ 
                   GOSUB 235 ' 13Hr Trend Update and Archive 
    GOTO 25 
 
41      IF SCREEN09=TRUE  THEN SCREEN 0 : SCREEN09=FALSE  : GOSUB 253 
    RETURN 
42      IF SCREEN09=FALSE THEN SCREEN 9 : SCREEN09=TRUE   : GOSUB 253 
    RETURN 
 
    '  ...................................   Page 1 
47      TEXT$="MAIN MENU":GOSUB 136:LOCATE 7,1 
    PRINT TAB(25)"1)  MENU ":COLOR 2 
    PRINT TAB(25)"2)  CROSS SECTIONAL MIMIC" 
    PRINT TAB(25)"3)  TREND for the Previous 13 Hours" 
    PRINT TAB(25)"4)  TREND for the Previous  4 Hours":COLOR 3 
    PRINT TAB(25)"5)  GATES in SERVICE SELECTION" 
    PRINT TAB(25)"6)  FLOW EVALUATION AMENDMENT":COLOR 5 
    PRINT TAB(25)"7)  TREND for archived material " 
    PRINT TAB(25)"8)  COPY ARCHIVED MATERIAL TO FLOPPY" 
    PRINT TAB(25)"9)  EXIT TO DOS" 
    PRINT TAB(25)"A)  ALARM PAGE": 
    '     TAB(25)"11) START UP CHOICE" ------ Not Accessable from keyboard 
 
    LOCATE 20,43:COLOR 7:PRINT"Written by ";:COLOR 6 
    PRINT"AUGHTON PROCESS AUTOMATION" 
    LOCATE 18,2:PRINT"Use Numeric Keys and   ";:_ 
              COLOR 6:PRINT"A";:COLOR 5:PRINT"larm ";:_ 
              COLOR 6:PRINT"P";:COLOR 5:PRINT"rint  ";:_ 
              COLOR 6:PRINT"O";:COLOR 5:PRINT"perate " 
 
    LOCATE 19,2:PRINT"Temporary keys  ------ ";:_ 
              COLOR 6:PRINT"Y";:COLOR 5:PRINT"-alarm scan ";:_ 
              COLOR 6:PRINT"U";:COLOR 5:PRINT"-4hr Trend ";:_ 
              COLOR 6:PRINT"I";:COLOR 5:PRINT"-13hr T & A ";:_ 
              COLOR 6:PRINT"T";:COLOR 5:PRINT"oggle ";:_ 
              COLOR 6:PRINT"B";:COLOR 5:PRINT"-startup " 
    LOCATE 20,12:COLOR 6:PRINT"G";:COLOR 5:PRINT" gate position arch" 
    COLOR 7:RETURN 
 
    '  ...................................   Page 2 
61      TEXT$="CROSS SECTIONAL MIMIC":GOSUB 136 : RETURN 
    '  ...................................   Page 3 
64      TEXT$="TREND for the PAST 13 Hrs":GOSUB 136 
    No=0:GOSUB 133:RETURN 
    '  ...................................   Page 4 
67      TEXT$="TREND for the PAST  4 Hrs":GOSUB 136 
    No=1:GOSUB 133:RETURN 
    '  ...................................   Page 5 
70      TEXT$="GATES in Service":GOSUB 136 : RETURN 
    '  ...................................   Page 6 
73    TEXT$="Flow Evaluation and Modification":GOSUB 136 
    Y=8 :X=40:TEXT$="Current Calculated Flow":GOSUB 140 
    Y=12:X=32:TEXT$="Automatic Calculation to be dormant for":GOSUB 140 
    GOSUB 155  
    RETURN 
    '  ...................................   Page 7 
75      PATH$=NORMPATH$ 
76      TEXT$="TREND for Archived Material":GOSUB 136:X=34:Y=12 
    LOCATE 7,12:PRINT "PATH";:COLOR 6:PRINT" is ";:COLOR 7:PRINT PATH$;_ 
        "          Year";:COLOR 6:PRINT" is ";:COLOR 7:_ 
        PRINT RIGHT$(STR$(YR),2);SPACE80$;"   " 
    LOCATE 19,4:PRINT"Please Press ";:COLOR 6:PRINT"RETURN"; 
        COLOR 7:PRINT " if you wish to use these parameters" 
    LOCATE 20,14:PRINT"Otherwise press ";:COLOR 6 
        PRINT"O";:COLOR 7:PRINT"perate" 
77      X$=INKEY$:IF X$="" THEN GOTO 77 
          IF INSTR("Oo",X$)=0 THEN GOTO 79 
    LOCATE 18,6:COLOR 5:PRINT "Press ";:COLOR 6:PRINT"RETURN"; 
            COLOR 7:PRINT" for Default" 
    LOCATE 19,1:PRINT SPACE80$:LOCATE 19,4:INPUT"New Path = ";PATH$ 
    IF PATH$="" THEN PATH$=NORMPATH$ 
    LOCATE 19,1:PRINT SPACE80$   :LOCATE 19,4:INPUT"  Year   = ";YR 
    IF YR=0 THEN YR=YEAR 
    LOCATE 18,1:PRINT STRING$(3,SPACE80$):GOTO 76 
 
79      LOCATE 12,15 
    PRINT "Please Specify which month's Trend you wish to view" 
    LOCATE 19,1:PRINT SPACE80$;SPACE80$ 
    LOCATE 19,16:PRINT " Please Enter Number (1-13) " 
    LOCATE 20,12:COLOR 2:PRINT"13 for current month to date":COLOR 7 
    LOCATE 19,44:PRINT "     ":LOCATE 19,46:INPUT mnth 
    IF MNTH<1 OR MNTH>13 THEN GOSUB 125:GOTO 75:GOSUB 125:GOTO 76 
    IF MNTH=13 THEN MNTH=MOTH:HMAX=(DAY-1)*24+HOUR-13:GOTO 80 
    HMAX=MONTH(MNTH)*24-13 
80      TEXT$="TREND for Archived Material":GOSUB 136 
    LOCATE 12,10:PRINT "Please Enter First Hour" 
    LOCATE 14,10:PRINT "from the beginning of ";WHOLEMONTH$(MNTH) 
    LOCATE 19,1:PRINT SPACE80$ 
85      X=26:Y=19:TEXT$=" Enter Number  ( 1 - "+STR$(HMAX)+" )   " 
    GOSUB 140 
    LOCATE 19,44:PRINT "     ":LOCATE 19,46:INPUT H 
    IF H<1 OR H>HMAX THEN GOSUB 125:GOTO 85 
    No=2:TEXT$="TREND for Archived Material":GOSUB 136 
    GOSUB 133:RETURN 
    '  ...................................   Page 8 
91    TEXT$="COPY Archived Material to FLOPPY DISC":GOSUB 136 
    LOCATE 7,10:SHELL "DIR \BARMBY\*.DAT /W/P" 
    LOCATE 7,1 :PRINT STRING$(3,SPACE80$) 
    Y=8 :X=20:TEXT$="         Directory           ":GOSUB 140:GOSUB 155 
    RETURN 
    '  ...................................   Page 9 
97    TEXT$="Exit to DOS Operating System":GOSUB 136 
    LOCATE 4,4:PRINT" Reminder ":LOCATE 5,4:PRINT"==========" 
    LOCATE 9,3:PRINT"   All Alarm Checking is suspended if this";_ 
            " option is chosen" 
    PRINT 
    PRINT"     If you wish to move this machine it is advised that " 
    PRINT"     you type the command PARK, to park the Hard Disk Head" 
    PRINT"     in a safe position ready for transportation." 
    PRINT"     Do this once you have obtained the C:BARMBY> prompt." 
    GOSUB 155 
    RETURN 
    '  ...................................   Page A  ie Page 10 
111     TEXT$="ALARM PAGE":GOSUB 136:RETURN 
    '  ...................................   Page 11 
117    TEXT$="Start up Choice":GOSUB 136:LOCATE 6,3 
    PRINT "Select Tide Phase in which you wish the System to start" 
    LOCATE 9,10 :PRINT " 1,   Tide Lock" 
    LOCATE 11,10:PRINT " 2,   Tide Free" 
    LOCATE 13,10:PRINT " 3,   Initial Retention" 
    LOCATE 15,10:PRINT " 4,   Controlled Retention" 
    X=16:Y=19:TEXT$="Please Enter Number (1-4)":GOSUB 140 
    LOCATE 19,40:INPUT V 
    IF V<1 OR V>4 THEN GOSUB 125:GOTO 117 
    TEXT$="    Sending to SATT      ":GOSUB 140:GOSUB 270:GOSUB 120 
    TEXT$="       DONE  !!!         ":GOSUB 140:GOSUB 120:PPP=1 
    RETURN 
 
    '  ...................................   Wait 
120     FOR I=Z TO BIG:NEXT:BIG=9999:RETURN 
 
    '  ...................................   INVALID ENTRY 
125     LOCATE 17,1:PRINT STRING$(3,SPACE80$) 
    X=18:Y=19:TEXT$="     Invalid Entry          ":GOSUB 140 
    GOSUB 120:RETURN 
    '  ...................................   No action just Return 
130     RETURN 
 
    '  ...................................   TRENDing PACKAGE 
133     REM 
    REM       Filename         what was   TREND.BAS 
    REM ************************************************** 
    REM *          YORKSHIRE WATER AUTHORITY             * 
    REM *                                                * 
    REM *      ..... Trending Section of Program ....... * 
    REM *                                                * 
    REM *             AUGHTON PROCESS AUTOMATION         * 
    REM *               BIRCHWOOD SCIENCE PARK           * 
    REM *              WARRINGTON    0925 830084         * 
    REM *                                                * 
    REM *   Author:-        Greg McCormack               * 
    REM *   PROJECT NUMBER :-  53/3521                   * 
    REM *   Version Number :-  0.11           May  '88   * 
    REM ************************************************** 
 
    '..... Description of Important Variables used 
 
    ' No    - Trend Type Number 0,1 or 2 
    ' V0    - Number of Distinct Points across the screen 
    ' V3    - Number of Pixels across the screen 
    ' V4    - First Pixel of Trend 
    ' V8    - Tab position of Right Hand Side of trend 
    ' V10   - Time Increments 
    ' V11   - Tab spacing between Time increments 
    ' V9    - Tab position of Left Hand Side of trend 
 
    ON No+1 GOSUB 134,135,137 
 
    V8   =(V4+V3)/8 
    V9   =V4/8-4 
 
    '  ...................................   SETUP TRENDing PAGE 
    V5=V3+13:X1=V4-1:V12=V3+2 
    DRAW "C5 BM ="+VARPTR$(X1)+",61 R="+VARPTR$(V12)+" D201 R5 U205"+_ 
         "L="+VARPTR$(V5)+" D205 R5 U201 BE2 P3,5" 
 
    '....... Produce Key 
    LOCATE 8,65:COLOR 7:PRINT "KEY":LOCATE 9,65:PRINT "=====" 
  DRAW "BM 515,138" 
  DRAW " C5  R10 U10 L10 D10 BE5 P 4,5 C5 BG5":LOCATE 10,68:PRINT"- Gate 1 " 
  DRAW "BD14 R10 U10 L10 D10 BE5 P 7,5 C5 BG5":LOCATE 11,68:PRINT"- Gate 2 " 
  DRAW "BD14 R10 U10 L10 D10 BE5 P10,5 C5 BG5":LOCATE 12,68:PRINT"- Derwent" 
  DRAW "BD14 R10 U10 L10 D10 BE5 P14,5 C5 BG5":LOCATE 13,68:PRINT"- Ouse   " 
  DRAW "BD14 R10 U10 L10 D10 BE5 P 3,5 C5 BG5":LOCATE 14,68:PRINT"- Intake " 
  DRAW " C3  BM 510,128 D24 L1 U24 " 
  DRAW " C2  BM 510,156 D38 L1 U38 " 
 
    '....... Prints Numbers on Y axis 
    FOR I=0 TO 8 
 
    K%=262-25*I:KK=V4-7 
    DRAW "C7 BM ="+VARPTR$(KK)+",="+VARPTR$(K%)+" L7" 
 
    IF I/2=INT(I/2) THEN COLOR 3:LOCATE 19-I*1.736,V9-2:_ 
                 PRINT USING  "#";I            :_ 
                 COLOR 2:LOCATE 19-I*1.736,V9  :_ 
                 PRINT USING "##";I-2          :_ 
                 DRAW  "C7 D1 R7" 
    NEXT I 
 
    '....... Prints Label for Y axis 
    COLOR 5 
    FOR Y=1 TO 13 
    LOCATE Y+5,V9-5 : PRINT MID$("HEIGHT  mtrs   ",Y,1) 
    NEXT Y 
 
    '....... Prints x axis 
    DRAW "C5 BM 50,265 R 500" 
    FOR I = 0 TO XX 
    K%=V3/XX*I+V4 
    DRAW " BM ="+VARPTR$(K%)+",263 D2 L1 U2" 
    IF I/2=INT(I/2) THEN _ 
        LOCATE 20,(V3+V4)/8-V3/8*I/XX : _ 
        PRINT USING "###";-I*V10    -(H+13)*(No=2) 
    NEXT I 
 
    LOCATE 20,V8+4:PRINT "TIME ( Hours )" 
 
    COLOR 4:LOCATE 21,1:PRINT STRING$(80,"-") 
     
 
    '......... Scroll Sample sideways one Update's worth 
131     FOR V1=0 TO V0-1 
    FOR I=0 TO 4 
    V2=COL%(I) 
    X =V4+V1*V3/V0 
    K = V1 
        ANLG=262 - 200*(ARRAY(K,I)-ANALOFFSET(I))/8 
    DRAW  "C0 " 
    DRAW "BM="+VARPTR$(X)+",="+VARPTR$(ANLG) 
        X1=X+V3/V0 
        K=(K+1) MOD V0 
        ANLG=262 - 200*(ARRAY(K,I)-ANALOFFSET(I))/8 
 
    DRAW  "M="+VARPTR$(X1)+",="+VARPTR$(ANLG) 
    IF V1=V0-1 THEN GOTO 132 
    DRAW  "C="+VARPTR$(V2) 
    DRAW "BM="+VARPTR$( X)+",="+VARPTR$(ANLG) 
        K=(K+1) MOD V0 
        ANLG=262 - 200*(ARRAY(K,I)-ANALOFFSET(I))/8 
    DRAW  "M="+VARPTR$(X1)+",="+VARPTR$(ANLG) 
132     NEXT I 
    NEXT V1 
    RETURN 
 
    '.......   13 Hour Trend GET 
    rem copy ARRAY13hr(x,x) into ARRAY(x,x) and setup index 
 
134     No=0 
    XX=13 
    V0=V013hr  ' 12 updates an hour * 13 hours of trend  IE. 156 
    V3=390     ' 2.5 pixels per update  ( 156*2.5 = 390 ) 
    V4=100     ' offset from Left Hand Side 
    V10=1      ' Time Increments  1 per hour 
    FOR PTR=0 TO V0 
    FOR I = 0 TO 4 
    ARRAY(PTR,I)=ARRAY13hr(((PTR+PTR13hr) MOD V0),I) 
    NEXT I 
    NEXT PTR 
    RETURN 
 
    '.......   4 Hour Trend GET 
    rem copy ARRAY4hr(x,x) into ARRAY(x,x) and setup index 
 
135     No=1 
    XX=8 
    V0=V0for4hr       '  1 update every 30 seconds  IE. =120 
            ' 30 updates per hour * 4 hours of trend 
    V3=360          '  3 pixels per update 
    V4=120          '  offset from Left Hand Side 
    V10=0.5         '  Time Increment  ( every half an hour ) 
    FOR PTR=0 TO V0 
    FOR I = 0 TO 4 
    ARRAY(PTR,I)=ARRAY4hr(((PTR+PTR4hr) MOD V0for4hr),I) 
    NEXT I 
    NEXT PTR 
    RETURN 
     
    '.......  GET Archived Data 
    REM OPEN FILE AT PTR ---- COPY INTO ARRAY(X,X) and setup index 
 
137     No=2 
    XX=13 
    V0=V013hr  ' 12 updates an hour * 13 hours of trend    IE. 156 
    V3=390     ' 2.5 pixels per update  ( 156*2.5 = 390 ) 
    V4=100     ' offset from Left Hand Side 
    V10=1      ' Time Increments  1 per hour 
    FILENAM$=PATH$ + "MNTH" + _ 
        RIGHT$("00"+RIGHT$(STR$(MNTH),LEN(STR$(MNTH))-1),2) + _ 
        RIGHT$("00"+RIGHT$(STR$(YR  ),LEN(STR$(YR  ))-1),2) + ".DAT" 
    LOCATE 4,5:PRINT FILENAM$ 
    OPEN "r",#12,FILENAM$,44 
    FIELD #12,6 AS FA$,6 AS FB$, 6 AS FC$,_ 
          6 AS FD$,6 AS FE$,10 AS FF$,2 AS FG$ 
    FOR PTR=H TO (H+13)*12 
    GET #12,PTR 
    K=PTR MOD V0 
    ARRAY(K,0)=VAL(FA$)  ' Values stored in  Meters 
    ARRAY(K,1)=VAL(FB$) 
    ARRAY(K,2)=VAL(FC$) 
    ARRAY(K,3)=VAL(FD$) 
    ARRAY(K,4)=VAL(FE$) 
    NEXT PTR 
    CLOSE #12 
    RETURN 
 
' THAT'S ALL FOLKS !!!   ----------------------------  End of Trend 
 
 
    '  ...................................   Print Beginning of New Page 
136     LOCATE 2,U:FOR I=U TO 19:PRINT SPACE80$:NEXT 
    COLOR 4:PRINT STRING$(80,"-"):COLOR 7 
    Y=3:X=35:' Dropping into Next Subroutine 
    '  ...................................   Produce Border around Text 
140     IF SCREEN09 THEN COLOR 7 ELSE COLOR Z,BCOL 
    I=LEN(TEXT$)   ' X & Y specify centre of box 
    if y<2 or int(x-i/2-2)<1 then _ 
            locate 5,5:print "y ";y;" x ";x;" i ";i:stop 
    LOCATE Y-1,INT(X-I/2-2):PRINT STRING$(I+4," ")     
    LOCATE Y+1,INT(X-I/2-2):PRINT STRING$(I+4," ") 
    LOCATE Y  ,INT(X-I/2-2):PRINT " " 
    LOCATE Y  ,INT(X+I/2+1):PRINT " " 
    IF SCREEN09 THEN COLOR FCOL ELSE COLOR FCOL,Z 
    LOCATE Y  ,INT(X-I/2)  :PRINT TEXT$ 
    IF SCREEN09 THEN COLOR 7 ELSE COLOR 7,Z 
    RETURN 
    '  ...................................   Type 'O' to Operate 
155    X=16:Y=19:TEXT$="Type 'O' to Operate":GOSUB 140:RETURN 
    '  ...................................   Password Protection 
157    IF OOO < 5 THEN RETURN 
    IF OOO = 9 THEN A=2 ELSE A=1 
148    X=16:Y=19:TEXT$=" Password Please  ?":GOSUB 140:P$="" 
149    X$=INKEY$:IF X$="" THEN GOTO 149 
    X=ASC(X$):IF X>90 THEN X=X-32 
    LOCATE 19,40:PRINT STRING$(LEN(P$)+1,".");"             " 
    P$=P$+CHR$(X):IF X<>13 THEN GOTO 149 
    P$=LEFT$(P$+CHR$(10)+STRING$(20,CHR$(0)),20) 
    IF P$=PASSWORD$(A) THEN GOTO 160 
    LOCATE 19,40:PRINT "Password INVALID":GOSUB 120 
    '             1  2  3  4  5  6  7  8  9  10  11 
    ON OOO GOSUB 47,61,64,67,70,73,75,91,97,111,117 
    RETURN 
160    ON OOO GOSUB 130,130,130,130,187,195,130,199,206,130 
    RETURN 
    '  ..................................   Dynamic Information for PAGE 2 
165     GOSUB 268 ' Get Analog Data 
 
    REM       Filename         what was    MIMIC.BAS 
    REM ************************************************** 
    REM *          YORKSHIRE WATER AUTHORITY             * 
    REM *                                                * 
    REM *      ..... Gate Mimic Section .......          * 
    REM *                                                * 
    REM *             AUGHTON PROCESS AUTOMATION         * 
    REM *               BIRCHWOOD SCIENCE PARK           * 
    REM *              WARRINGTON    0925 830084         * 
    REM *                                                * 
    REM *   Author:-        Greg McCormack               * 
    REM *   PROJECT NUMBER :-  53/3521                   * 
    REM *   Version Number :-  0.05                      * 
    REM *   Last Update    :-  12/05/88         May '88  * 
    REM ************************************************** 
 
    INDEX%=0 
 
    COLOR 9:LOCATE 7,10:PRINT "Derwent":LOCATE 7,48:PRINT "Derwent" 
    COLOR 3:LOCATE 7,23:PRINT " Ouse  ":LOCATE 7,61:PRINT " Ouse  " 
    COLOR 4:LOCATE 5,10:PRINT "----  G A T E   1  ----" 
    COLOR 5:LOCATE 5,47:PRINT "----  G A T E   2  ----" 
    COLOR 4:LOCATE 21,1:PRINT STRING$(80,"-") 
 
    ' INPUT PARAMETERS REQUIRED 
    ' ANALOGUE VALUES OF RIVER LEVELS AND GATE POSITIONS 
 
    V0 = (ANAL(0)-ANALOFFSET(0))/8 
    V1 = (ANAL(1)-ANALOFFSET(1))/8 
    V2 = (ANAL(2)-ANALOFFSET(2))/8 
    V3 = (ANAL(3)-ANALOFFSET(3))/8 
    V4 = (ANAL(4)-ANALOFFSET(4))/8 
 
    V5 = 200 - V0*50 + 50 : V6 = V5 - 100 
    V7 = 200 - V1*50 + 50 : V8 = V7 - 100 
 
    V0 = 250 - 150*V0 
    V1 = 250 - 150*V1 
    V2 = 250 - 150*V2 
    V3 = 250 - 150*V3 
    V4 = 250 - 150*V4 
 
    '...................................   DYNAMIC INFORMATION for Gate 1 
    DRAW "C0 BM  40,="+VARPTR$(V2)+" R99 M 139,99  L99 "+_ 
         "    M  40,="+VARPTR$(V2)+" BE1 P0,0" 
    DRAW "C1 BM  40,="+VARPTR$(V2)+" R99 M 139,251 L99 "+_ 
         "    M  40,="+VARPTR$(V2)+" BF1 P1,1" 
 
 
    DRAW "C0 BM 140,="+VARPTR$(V6)+" R09 M 149,99  L09 "+_ 
         "    M 140,="+VARPTR$(V6)+" BE1 P0,0" 
 
    DRAW "C4 BM 140,="+VARPTR$(V6)+" R09 " +_ 
         "    M 149,="+VARPTR$(V5)+" L09 " +_ 
         "    M 140,="+VARPTR$(V6)+" BF1 P4,4" +_ 
         "   BM 140,="+VARPTR$(V5)+" BE1 P4,4" 
 
    DRAW "C1 BM 140,="+VARPTR$(V5)+" R09 M 149,251 L09 "+_ 
         "    M 140,="+VARPTR$(V5)+" BF1 P1,1" 
 
 
    DRAW "C0 BM 150,="+VARPTR$(V3)+" R99 M 249,99  L99 "+_ 
         "    M 150,="+VARPTR$(V3)+" BE1 P0,0" 
    DRAW "C3 BM 150,="+VARPTR$(V3)+" R99 M 249,251 L99 "+_ 
         "    M 150,="+VARPTR$(V3)+" BF1 P3,3" 
 
    ' ................................. Dynamic Info for Gate 2 
 
    DRAW "C0 BM 350,="+VARPTR$(V2)+" R99 M 449,99  L99 "+_ 
         "    M 350,="+VARPTR$(V2)+" BE1 P0,0" 
    DRAW "C1 BM 350,="+VARPTR$(V2)+" R99 M 449,251 L99 "+_ 
         "    M 350,="+VARPTR$(V2)+" BF1 P1,1" 
 
 
    DRAW "C0 BM 450,="+VARPTR$(V8)+" R09 M 459,99  L09 "+_ 
         "    M 450,="+VARPTR$(V8)+" BE1 P0,0" 
 
    DRAW "C5 BM 450,="+VARPTR$(V8)+" R09 " +_ 
         "    M 459,="+VARPTR$(V7)+" L09 " +_ 
         "    M 450,="+VARPTR$(V8)+" BF1 P5,5" +_ 
         "   BM 450,="+VARPTR$(V7)+" BE1 P5,5" 
 
    DRAW "C1 BM 450,="+VARPTR$(V7)+" R09 M 459,251 L09 "+_ 
         "    M 450,="+VARPTR$(V7)+" BF1 P1,1" 
 
 
    DRAW "C0 BM 460,="+VARPTR$(V3)+" R99 M 559,99  L99 "+_ 
         "    M 460,="+VARPTR$(V3)+" BE1 P0,0" 
    DRAW "C3 BM 460,="+VARPTR$(V3)+" R99 M 559,251 L99 "+_ 
         "    M 460,="+VARPTR$(V3)+" BF1 P3,3" 
 
    LOCATE 19,13:COLOR 4 
    PRINT "Gate1 - ";:PRINT USING "##.##";ANAL(0); : PRINT" mtrs" 
    LOCATE 19,50:COLOR 5 
    PRINT "Gate2 - ";:PRINT USING "##.##";ANAL(1); : PRINT" mtrs" 
 
    COLOR 10:LOCATE 10,34:PRINT "Ouse"; 
         LOCATE 11,38:PRINT USING "##.##";ANAL(3) 
    COLOR 14:LOCATE 08,34:PRINT "Derwent"; 
         LOCATE 09,38:PRINT USING "##.##";ANAL(2) 
    COLOR 3 :LOCATE 12,34:PRINT "Intake"; 
         LOCATE 13,38:PRINT USING "##.##";ANAL(4); 
         LOCATE 14,37:PRINT" mtrs" 
    RETURN 
 
' THAT'S ALL FOLKS !!!     ----------------------  End of Mimic 
 
 
    '  ..................................   Dynamic Information for PAGE 5 
169     IF GATE1SERV    THEN BCOL=2:TEXT$="  GATE 1 IN SERVICE  " _ 
            ELSE BCOL=1:TEXT$="GATE 1 NOT IN SERVICE" 
    Y=9:X=24 :GOSUB 140 
    IF GATE2SERV    THEN BCOL=2:TEXT$="  GATE 2 IN SERVICE  " _ 
            ELSE BCOL=1:TEXT$="GATE 2 NOT IN SERVICE" 
    Y=9:X=60 :GOSUB 140 
    BCOL=5:GOSUB 155 
    RETURN 
    '  ..................................   Dynamic Information for PAGE 6 
180     REG%=50:CNT%=1:BUF%=VARPTR(REGISTER%(Z)):ST%=VARPTR(STAT%) 
    call GETREG(PLC%,REG%,CNT%,BUF%,ST%) 
    IF STAT%<>1 THEN ERROR 200 
    LOCATE  8,55:PRINT"= ";REGISTER%(Z);" Cumecs" 
    LOCATE 12,55:PRINT"= ";REGISTER%(U);" Hours " 
    RETURN 
    '  ...................................  Dynamic Information for Page A 
185    B=0:LOCATE 6,U:COLOR 4,Z 
    FOR I=Z TO 31 
    IF ALARM%(I)=TRUE AND (TYPE%(I) AND 2)=2 THEN B=B+1:_ 
        PRINT LEFT$(ALRMTIME$(I)+"   "+TAG$(I)+SPACE80$,70)+S$(U) 
    NEXT I 
    COLOR 7,Z:FOR I=B TO 14:PRINT SPACE80$:NEXT I 
    RETURN 
 
    '***************************************************************** 
 
    '  ..................................   Operator Interface for  PAGE 5 
187    X=16:Y=19:FCOL=6:TEXT$="Gate 1 in service (Y/N)":GOSUB 140 
188    X$=INKEY$:IF X$="" THEN GOTO 188 
    GATE1SERV=FALSE:IF INSTR("Yy",X$) THEN GATE1SERV=TRUE 
    X=16:Y=19:TEXT$="Gate 2 in service (Y/N)":GOSUB 140 
191    X$=INKEY$:IF X$="" THEN GOTO 191 
    GATE2SERV=FALSE:IF INSTR("Yy",X$) THEN GATE2SERV=TRUE 
    GOSUB 70:X=16:Y=19 
    TEXT$="    Sending to SATT    ":GOSUB 140:GOSUB 120:GOSUB 273 
    TEXT$="       DONE  !!!       ":GOSUB 140:FCOL=7 
    RETURN 
    '  ..................................   Operator Interface for  PAGE 6 
195    X=16:Y=19:TEXT$="Enter New Flow Value":GOSUB 140 
    LOCATE 19,40:PRINT"       ":LOCATE 19,40:INPUT REGISTER%(Z) 
    X=16:Y=19:TEXT$="Enter New Duration  ":GOSUB 140 
    LOCATE 19,40:PRINT"       ":LOCATE 19,40:INPUT REGISTER%(U) 
    LOCATE 19,38:PRINT"       " 
    TEXT$="    Sending to SATT    ":GOSUB 140:GOSUB 120:GOSUB 276 
    TEXT$="       DONE  !!!       ":GOSUB 140 
    RETURN 
    '  ..................................   Operator Interface for  PAGE 8 
199     GOSUB 120:X=19 
    TEXT$="    Enter Filename      ":GOSUB 140 
    LOCATE 19,38:PRINT "       ":LOCATE 19,40:INPUT A$ 
    IF A$="" THEN GOTO 204 
    IF RIGHT$(A$,4)<>".DAT" AND RIGHT$(A$,4)<>".dat" THEN A$=A$+".DAT" 
    IF LEN(A$)<>12 THEN TEXT$=" BAD NAME --- TRY AGAIN ":GOSUB 140:_ 
                GOTO 199 
    TEXT$="Ensure Drive A: is Ready": GOSUB 140 
200     X$=INKEY$: IF X$="" THEN GOTO 200 
    IF INSTR("Yy"+CHR$(13),X$)=0 THEN GOTO 204 
    TEXT$="Confirm File Copy (Y/N) ": GOSUB 140 
201     X$=INKEY$: IF X$="" THEN GOTO 201 
    IF INSTR("Yy",X$)=0 THEN GOTO 204 
202     SHELL "COPY C:\BARMBY\"+A$+" A:" 
    FCOL=4 
    TEXT$="    Done   !!!          ":GOSUB 140:FCOL=7 
204     GOSUB 120:PPP=1:RETURN 
    '  ..................................   Operator Interface for  PAGE 9 
206    GOSUB 120 
    FCOL=4:Y=3:X=35:TEXT$="Monitoring Terminated":GOSUB 136:GOSUB 120 
    COLOR 2:LOCATE 3,4:PRINT" Reminder ":LOCATE 4,4:PRINT"==========" 
    COLOR 7:LOCATE 5,1 
    PRINT"  1, To alter  Time or Date   Type: TIME or DATE " 
    PRINT"     then type in new values, either of these must be followed" 
    PRINT"     by the command SETCLOCK which loads the battery-backed" 
    PRINT"     clock with the current system time." 
    PRINT"  2, To alter passwords type COPY CON: PASSWORD.00* "     
    PRINT"     then enter the new password followed by <CNTRL Z>,<RETURN>" 
    PRINT"     .... where * is equal to 1 for the Operators password" 
    PRINT"            and * is equal to 2 for the Engineers password." 
    PRINT"  3, To alter parameters in SATT type TERMIBM to bring up" 
    PRINT"     SATT communications program." 
    PRINT"     You must be familiar with SATT programming." 
    PRINT"  4, If you wish to move this machine it is advised that " 
    PRINT"     you type the command PARK to park the Hard Disk Head" 
    PRINT"     in a safe position ready for transportation." 
    GOSUB 285 
    FCOL=6         :TEXT$="     Closing Files   ":GOSUB 140:GOSUB 120 
    LOCATE 19,6:COLOR 2:PRINT"Barmby Control Program Terminated":GOSUB 120 
    LOCATE 19,50:PRINT"Type EXIT to return to BARMBY":GOSUB 120 
    PRINT STRING$(6,SPACE80$) 
    GOSUB 120:LOCATE 20,1:PRINT ; 
    SHELL 
    'END 
 
    '  ................................................... 
210    DATA 31,28,31,30,31,30,31,31,30,31,30,31 
    DATA JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC 
    DATA JANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY,AUGUST 
    DATA SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER 
    DATA 0 , 0 , -2, -2, -2 
    DATA 8 , 8 ,  6,  6,  6 
    DATA 4 , 7 , 10, 14,  3 
    '  Digitals 
    DATA GATE 1 IN SERVICE,             0,3 
    DATA GATE 2 IN SERVICE,             0,3 
    DATA LIGHT ON IN MOTOR ROOM,        0,1 
    DATA START UP,                      0,1 
    DATA MANUAL MODE,                   0,1 
    DATA SLACK WIRE DETECTED FOR GATE 1,0,3 
    DATA SLACK WIRE DETECTED FOR GATE 2,0,3 
    DATA GATE 1 MOTOR TRIPPED,          0,3 
    DATA GATE 2 MOTOR TRIPPED,          0,3 
    DATA EMERGENCY STOP,                1,3 
    DATA GATES HAVE MOVED,              0,4 
    DATA SATT BATTERY NEEDS CHANGING,   0,2 
    DATA SYSTEM IN TIDE LOCK,           0,1 
    DATA SYSTEM IN FREE FLOW,           0,1 
    DATA SYSTEM IN INITIAL RETENTION,   0,1 
    DATA SYSTEM IN CONTROLLED RETENTION,0,1 
    '  Internally Detected Errors 
    DATA BAD COMMUNICATIONS TO SATT,    0,3 
    DATA PRINTER NOT AVAILABLE,         0,3 
    DATA KEY T HAS BEEN PRESSED,        0,3 
    '  Analogues 
    DATA POSITION OF GATE 1            ,Mtrs,0,100 
    DATA POSITION OF GATE 2            ,Mtrs,0,100 
    DATA LEVEL OF DERWENT              ,Mtrs,0,100 
    DATA LEVEL OF OUSE                 ,Mtrs,0,100 
    DATA LEVEL AT INTAKE               ,Mtrs,0,100 
    DATA ESTIMATED FLOW              ,Cumecs,0,100 
 
    REM    TYPE%(.) AND 1  indicates  'Notify on High Transition' 
    REM             AND 2  indicates  'Notify on  Low Transition' 
    REM             AND 4  indicates GATEmmyy.DAT update to be performed 
    REM                         on High Tranition of Flag 
 
    '  ...................................   SET UP 
223     U=1:Z=0:PP=0:TRUE=-1:FALSE=0:BIG=9999:SCREEN09=FALSE 
    TIM1=0:TIM2=0:TIM3=0 
    V0for4hr=120 : V013hr=156 
    POWER2%(Z)=128:FOR I=U TO 7:POWER2%(I)=POWER2%(I-1)/2:NEXT I 
    PLC%=U:BUF%=Z:ST%=Z:STAT%=Z:FREQ=5:FCOL=7:BCOL=5 
    SPACE80$=STRING$(80," ") : NORMPATH$="C:\BARMBY\" 
 
    ' Initialises Comli 
    INIT1=54 : BAUD%=12 : RETRIES%=2 : TIME0UT%=3 
    call INIT1(BAUD%, RETRIES%, TIMEOUT%) 
 
    ' GETS comli out of terminal mode even if it wasn't in terminal mode 
    'OPEN "COM1:9600,N,8,1" AS #7 
    'PRINT #7,CHR$(2) 
    'CLOSE #7 
 
    LINE23$=SPACE80$ : LINE24$=SPACE80$ : LINE25$=SPACE80$ 
    FOR I= U TO 12:READ       MONTH(I):NEXT I 
    FOR I= U TO 12:READ      MONTH$(I):NEXT I 
    FOR I= U TO 12:READ WHOLEMONTH$(I):NEXT I 
    FOR I= Z TO  4:READ  ANALOFFSET(I):NEXT I 
    FOR I= Z TO  4:READ    ANALGAIN(I):NEXT I 
    FOR I= Z TO  4:READ        COL%(I):NEXT I 
 
    GOSUB 230:GOSUB 231:GOSUB 233:GOSUB 238 
 
    FOR I= Z TO 15:READ   TAG$(I),SENSE%(I),TYPE%(I)          :NEXT I 
    FOR I=24 TO 26:READ   TAG$(I),SENSE%(I),TYPE%(I)          :NEXT I 
       'FOR I=32 TO 37:READ   TAG$(I), UNIT$(I),ZERO%(I),RANGE%(I):NEXT I 
 
    S$(Z)="CLEAR ":S$(U)="ALARM " 
    '.....................................   Read  Passwords in 
    OPEN "R",#11,"C:\BARMBY\PASSWORD.001",20 
    FIELD #11,20 AS FA$ :GET #11,1 : PASSWORD$(1)=FA$ : CLOSE #11 
    OPEN "R",#11,"C:\BARMBY\PASSWORD.002",20 
    FIELD #11,20 AS FA$ :GET #11,1 : PASSWORD$(2)=FA$ : CLOSE #11 
    '..... SETUP array 
    FOR K=0 TO 4 
    FOR I=0 TO 200 
    ARRAY4hr( I,K)=ANALOFFSET(K) 
    ARRAY13hr(I,K)=ANALOFFSET(K) 
    NEXT I 
    NEXT K 
    RETURN 
 
    REM    Check date for monthly back up and read alarms 
    REM     Update 4 hour trend every 30 secs 
    REM    Update 13 hour trend every 5 minutes 
    REM      and also store archived data every 5 minutes 
    REM     Do gate Position archive when change occurs 
 
    '  ...................................   Date Check 
230     MINUTE=VAL( MID$( TIME$,4,2)) 
    HOUR  =VAL(LEFT$( TIME$  ,2)) 
    SEC   =VAL(RIGHT$(TIME$  ,2)) 
    IF MINUTES<>0 OR HOUR23<>23 THEN GOTO 232 
231     YEAR  =VAL(RIGHT$(DATE$  ,4)) : YR=YEAR 
    MOTH  =VAL(LEFT$( DATE$  ,2)) 
    DAY   =VAL(MID$(  DATE$,4,2)) 
    MONTH(2)=29-(YEAR/4-INT(YEAR/4)) 
    IF DAY>MONTH(MOTH) THEN DAY =1:MOTH=MOTH+1:GOSUB 233 : OOO=8 :_ 
        IF MOTH>12 THEN MOTH=1:YEAR=YEAR+1:_ 
        IF YEAR>99 THEN YEAR=00 
      ' DATE$=RIGHT$("00"+MID$(STR$(MOTH),2),2)+"-"+_ 
      '       RIGHT$("00"+MID$(STR$(DAY) ,2),2)+"-"+_ 
      '                   MID$(STR$(YEAR),2) 
    UKDATE$=MID$(DATE$,4,3)+MONTH$(MOTH)+"-"+RIGHT$(DATE$,2) 
    COLOR 7 : LOCATE U,50:PRINT "DATE: "UKDATE$ 
 
232     HOUR23=HOUR 
    RETURN 
 
    '  ..................................   Close Month File start another 
233     FILEXT$=RIGHT$("00"+RIGHT$(STR$(MOTH),LEN(STR$(MOTH))-1),2) + _ 
    RIGHT$("00"+RIGHT$(STR$(YEAR),LEN(STR$(YEAR))-1),2) + ".DAT" 
    GOSUB 238 
    RETURN 
 
    '  ...................................   Background Tasks  ( 5 mins ) 
    '  ...................................   Normal Archive 
235     GOSUB 240 : GOSUB 268 
    STATUS$=CHR$(48-(A%(12)=1)) +_ 
        CHR$(48-(A%(13)=1)) +_ 
        CHR$(48-(A%(14)=1)) +_ 
        CHR$(48-(A%(15)=1)) +_ 
        CHR$(48-(A%(00)=1)) +_ 
        CHR$(48-(A%(01)=1)) 
    FILENAM$="C:\BARMBY\MNTH" + FILEXT$ 
 LOCATE 5,5:PRINT "Normal Archive ";FILENAM$ 
    OPEN "r",#12,FILENAM$,44 
    FIELD #12,6 AS FA$,6 AS FB$, 6 AS FC$,_ 
          6 AS FD$,6 AS FE$,10 AS FF$,2 AS FG$ 
    FREQ=5 
    PTR=INT((((DAY-1)*24+HOUR)*60+MINUTE)/FREQ) 
 LOCATE 6,20:PRINT " Pointer = ";PTR 
    RSET FA$=STR$(ANAL(0))       ' Gate 1 
    RSET FB$=STR$(ANAL(1))       ' Gate 2 
    RSET FC$=STR$(ANAL(2))       ' Derwent 
    RSET FD$=STR$(ANAL(3))       ' Ouse 
    RSET FE$=STR$(ANAL(4))       ' Intake 
    RSET FF$=STATUS$   ' Status Info 
    RSET FG$=CHR$(13)+CHR$(10) 
 LOCATE 7,20 :PRINT FA$;FB$;FC$;FD$;FE;FF$ 
    PUT #12,PTR 
    CLOSE #12 
    PTR13hr=(PTR13hr+1) MOD V013hr 
    FOR I=0 TO 4 : ARRAY13hr(PTR13hr,I)=ANAL(I) : NEXT I :_ 
    IF OOO=3 THEN  GOSUB 134:GOSUB 131 
    RETURN 
 
    ' .....................  Put title onto current gate file GATEmmyy.DAT 
238     FILENAM$="C:\BARMBY\GATE" + FILEXT$ 
    OPEN FILENAM$ FOR APPEND AS #12 
    PRINT #12," " 
    PRINT #12, UKDATE$;" ";TIME$;"   " 
    PRINT #12," " 
    PRINT #12,"  Date   &  Time       ";_ 
                "Gate1  Gate2   Derw   Ouse  Intak     Status" 
    PRINT #12," " 
    PRINT #12,"         Values in metres A.O.D. " 
    PRINT #12," " 
    CLOSE #12 
    RETURN 
 
    '  ...................................   SATT digital communications 
240     GOSUB 230   ' Get Date and Time 
    IO%=640     ' 1200 in OCTAL 
    A%(24)=0    ' Reset Bad-comms-to-satt flag 
    CNT%=2:BUF%=VARPTR(AA%(Z)):ST%=VARPTR(STAT%) 
    call GETIO(PLC%,IO%,CNT%,BUF%,ST%) 
    IF STAT%<>1 THEN ERROR 200 
242    LPRINT CHR$(Z); 
    IF PP<>Z THEN GOSUB 290 
 
244     FOR  J=Z TO 2 
    FOR  I=Z TO 7  : A%(I+J*8)=(AA%(J) AND POWER2%(I)) / POWER2%(I) 
    NEXT I 
    NEXT J 
    RETURN 
 
    ' .................................. Alarm Detection 
247    FOR I = Z TO 31 
    AB%=ALARM%(I) 
    ALARM%(I)=(SENSE%(I)<>A%(I)) 
    IF (TYPE%(I) AND 1)=1 AND ALARM%(I)>AB% THEN GOSUB 250 
    IF (TYPE%(I) AND 2)=2 AND ALARM%(I)<AB% THEN GOSUB 250 
    IF (TYPE%(I) AND 4)=4 AND ALARM%(I)>AB% THEN GOSUB 260 ' Gates moved 
    NEXT I 
    RETURN 
 
    ' ................................ Alarm Handling 
250    LINE22$=LINE23$ 
    LINE23$=LINE24$ 
    C%=ALARM%(I) : IF C% THEN K=7:L=4 ELSE K=4:L=Z 
    LINE24$=LEFT$(MID$(STR$(K),2)+MID$(STR$(L),2)+TIME$+"   "+_ 
        TAG$(I)+SPACE80$,70)+LEFT$(S$(-C%)+SPACE80$,9) 
    ALRMTIME$(I)=TIME$ 
    GOSUB 252 
    GOSUB 253 
    RETURN 
 
    ' ................... TO PRINTER 
252    IF PP THEN RETURN 
    A$=LEFT$(" "+UKDATE$+"  "+TIME$+"   "+TAG$(I)+SPACE80$,70)+_ 
        LEFT$(S$(-ALARM%(I)),9):LPRINT A$ 
    RETURN 
 
    ' .................. TO PRINT LINES 23 & 24 & 25 
253    LOCATE 22,U 
    IF SCREEN09 THEN COLOR 4 ELSE _ 
        COLOR VAL(LEFT$(LINE22$,1)),VAL(MID$(LINE22$,2,1)) 
    PRINT MID$(LINE22$,3) 
    LOCATE 23,U 
    IF SCREEN09 THEN COLOR 4 ELSE _ 
        COLOR VAL(LEFT$(LINE23$,1)),VAL(MID$(LINE23$,2,1)) 
    PRINT MID$(LINE23$,3) 
    LOCATE 24,U 
    IF SCREEN09 THEN COLOR 4 ELSE _ 
        COLOR VAL(LEFT$(LINE24$,1)),VAL(MID$(LINE24$,2,1)) 
    PRINT MID$(LINE24$,3); 
    IF SCREEN09 THEN COLOR 4 ELSE COLOR 7,Z 
    RETURN 
 
    ' ................................   Do Gate Movement Archiving 
260    GOSUB 268 
    STATUS$=CHR$(48-(A%(12)=1)) +_ 
        CHR$(48-(A%(13)=1)) +_ 
        CHR$(48-(A%(14)=1)) +_ 
        CHR$(48-(A%(15)=1)) +_ 
        CHR$(48-(A%(00)=1)) +_ 
        CHR$(48-(A%(01)=1)) 
    FILENAM$="C:\BARMBY\GATE" + FILEXT$ 
    LOCATE 5,5:PRINT "gate archive   ";FILENAM$ 
    OPEN FILENAM$ FOR APPEND AS #12 
    PRINT #12,UKDATE$;" ";TIME$;"   "; 
    PRINT #12,USING "  ##.##";ANAL(Z);      ' Gate 1 
    PRINT #12,USING "  ##.##";ANAL(U);      ' Gate 2 
    PRINT #12,USING "  ##.##";ANAL(2);      ' Derwent 
    PRINT #12,USING "  ##.##";ANAL(3);      ' Ouse 
    PRINT #12,USING "  ##.##";ANAL(4);      ' Intake 
    PRINT #12,"   ";STATUS$                 ' Status Info 
    CLOSE #12 
    RETURN 
 
    ' ................................   Update 4HR trend  (EVERY 30 SECS) 
265     GOSUB 268 : PTR4hr=(PTR4hr + 1) MOD V0for4hr 
    FOR I=0 TO 4 : ARRAY4hr(PTR4hr,I)=ANAL(I) : NEXT I 
    IF OOO=4 THEN _ 
        GOSUB 135:GOSUB 131 
    RETURN 
 
    ' ................................   Get Analog Data 
268    ADDR%=128 'for octal 200 
    CNT%=5:BUF%=VARPTR(AAA%(Z)):ST%=VARPTR(STAT%) 
    call GETANA(PLC%,ADDR%,CNT%,BUF%,ST%) 
    IF STAT%<>1  THEN ERROR 200 
 
    'for i=z to 4 
    'AAA%(i)=((val(right$(time$,2))+I)*60 MOD 4096) 
    'next i 
 
    FOR I=Z TO 4 
    A=AAA%(I):IF A<0 THEN A=65535+A 
    ANAL(I)= A / 65536 * ANALGAIN(I) + ANALOFFSET(I) 
    LOCATE I+6,1:PRINT USING "##.##";ANAL(I) 
    NEXT I 
    RETURN 
 
    '  ...............................   Send Start-up Information to SATT 
270    REM 
    RETURN 
 
    '  ...................................   Send Gate Information to SATT 
273     REM 
    RETURN 
 
    '  ...................................   Send Flow Information to SATT 
276    REM 
    RETURN 
 
    '  ...................................   SCREEN DUMP 
279    IF P>0 THEN RETURN 
    REM LPRINT CHR$(12) 
    REM CALL PRT 
    REM LPRINT CHR$(12) 
    RETURN 
 
    '  ...................................   Put Comli into terminal mode 
285     'A$=CHR$(02)+CHR$(00)+CHR$(30)+CHR$(30)+CHR$(44)+_ 
    '   STRING$(6,CHR$(30))+CHR$(03) 
    'OPEN "COM1:9600,N,8,1" AS #7 
    'PRINT #7,A$ 
    'CLOSE #7 
    RETURN 
 
    '  .............................   Send Current Alarm list to printer 
290    GOSUB 230 
    LPRINT    CHR$(13);CHR$(13);CHR$(13);CHR$(13);_ 
        " DATE ";UKDATE$;"   ";TIME$;CHR$(13);CHR$(13) 
    FOR I=Z TO 31 
    IF ALARM%(I)=TRUE AND (TYPE%(I) AND 2)=2 THEN       _ 
        LPRINT LEFT$("              "+ALRMTIME$(I)+_ 
                 "   "+TAG$(I)+SPACE80$,70)         +  S$(U) 
    NEXT I 
    LPRINT CHR$(10);STRING$(80,"-");CHR$(10);CHR$(13) 
    PP=Z:A%(25)=FALSE 
    RETURN 
 
    '  ...................................   Error Handling 
297     IF ERR=200 THEN A%(24)=TRUE:STAT%=1:RESUME NEXT 
    IF ERR=24 OR ERR=25 THEN PP=128:A%(25)=1 
    IF ERL=242 THEN RESUME 244 
    LOCATE 21,1:COLOR 7:PRINT STRING$(3,SPACE80$) 
    LOCATE 21,1:PRINT "Please make a note of this error";_ 
        " and contact an engineer from AUGHTON PROCESS AUTOMATION" 
    PRINT " Error ";ERR;" Last line reference ";ERL 
    PRINT:PRINT "This program will Restart soon !!!" 
    BIG=999999:GOSUB 120 
    RESET 
    RUN 
 
 
'EOF   -- Click Here  to get back to the top of the page
 |