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
|