' Has 86390 issue EOC issue 'added ontime 'added hubcfg$ option on command line 'added radio shack thermistor 'added daily a: logging if a.txt is on a drive 'probs w 83, '07/15/03 V 304 CLS ' DASHUB Copyright (C) 2003 BY JON A. DUTRA ' ISSUES ' HUBCFG.TXT SECOND CHANNEL AND COMMENT QUOTES ARE REQUIRED FOR NOW 'add gen'l purpose i/o (started dto%(addr%), dfrom%(addr%)) 'Make setting thermocouple reftemp a subroutine 'DONE features ... 'Thermocouples ,6 types, degC andF, incl. CJC 'added arbitrary full scale volts range (V5=5V, v13.2=13.2V full scale) 'POSSIBLE Improvements ... 'add Min max to last lines of excel output 'Add FTP UP ON ERROR GOTO 8970 GOSUB 3900 'ESSENTIAL INITS page% = 1 TIMER ON 'PC PORT CHOICES ARE COM1 COM2 COM3 COM4 LPT1 LPT2 'COM PINS ARE (9 pin) 'LPT PINS are 2=SCLK (D0), 3=Dto (D1) and 13=Dfrm (S4+) with 18-25 = gnd DIM STYPE$(256, 4): DIM slot%(256): DIM naddr%(300)'number of times each address gets invoked GOTO 22 ' => EXT HUBCFG.TXT INPUT => REM 'GOTO 22 FOR INTERNAL INPUT FOR SINDX% = 0 TO 256' SLOT INDEX, SLOT SELECTOR, NOT SLOT NUMBER READ slot%(SINDX%), STYPE$(SINDX%, 1), STYPE$(SINDX%, 2), STYPE$(SINDX%, 3) IF slot%(SINDX%) > 275 THEN GOTO 33 NEXT SINDX% 'SLOT# ,TRANSDUCER CH 0 TYPE, XDCR CH 1 TYPE,COMMENTS (Optional) 'XDCR TYPES => PPM, VOLTS,LT334TEMP , 'XDCR TYPES => INPUTPWR, OUTPUTPWR 'EFFIC (Slot 256) = sum(OUTPUTPWR) / sum (INPUTPWR) 'ETCWCJC = E type TC with CJC, ETCNOCJC = E type TC WITHOUT CJC 'JTCWCJC = J type TC with CJC, JTCNOCJC = J type TC WITHOUT CJC 'KTCWCJC = K type TC with CJC, KTCNOCJC = K type TC WITHOUT CJC 'RTCWCJC = R type TC with CJC, RTCNOCJC = R type TC WITHOUT CJC 'STCWCJC = S type TC with CJC, STCNOCJC = S type TC WITHOUT CJC 'TTCWCJC = T type TC with CJC, TTCNOCJC = T type TC WITHOUT CJC 'ETFWCJC = E type TC with CJC, ETFNOCJC = E type TC WITHOUT CJC 'JTFWCJC = J type TC with CJC, JTFNOCJC = J type TC WITHOUT CJC 'KTFWCJC = K type TC with CJC, KTFNOCJC = K type TC WITHOUT CJC 'RTFWCJC = R type TC with CJC, RTFNOCJC = R type TC WITHOUT CJC 'STFWCJC = S type TC with CJC, STFNOCJC = S type TC WITHOUT CJC 'TTFWCJC = T type TC with CJC, TTFNOCJC = T type TC WITHOUT CJC 'LT334TEMPC 'LT334TEMPF 'LT334TEMCJC 'ENTER SLOT TRANSDUCER TYPES BELOW !!!!!!!!!!!!!!!!!!!!!! DATA 1,"V50","V50","50 V FS" DATA 0,"PPM","PPM","Slot 0 2402" DATA 3,"LT334TEMPF","LT334TEMPC","HOT TUB INLET AND OUTLET TEMP" DATA 2,"LT334TEMPC","LT334TEMPC","50 V FS" DATA 1,"V5","V5","5 V FS" DATA 5,"INPUTPWR","INPUTPWR","INPUTPWR" DATA 6,"OUTPUTPWR","OUTPUTPWR","OUTPUTPWR" DATA 256 ,"EFFIC","EFFIC","EFFIC" DATA 300,"END","END","END OF SLOT TRANSDUCER TYPE DATA" GOTO 33 '----------------------- ' READ CFG START 22 CLS diag2% = 0 ' diagnostics off DIM b$(8): COLOR 15 PRINT "Welcome to the "; : COLOR 10: PRINT "DASHUB - Data Acquisition Hub controller": PRINT COLOR 15: PRINT "For lower noise results, the following hardware modifications" PRINT "to the A to D demo boards may help " PRINT "ON DC334 (LTC2402), ground pin 11 of U3 (74HC14 on bottom of board)" PRINT "ON DC228 (LTC2400), ground pin 11 of U3 (74HC14 on bottom of board)" PRINT "ON DC291 (LTC2410), ground pin 13 of U3 (74HC14 on top of board)" PRINT "ON DC344A (LTC2420), ground pin 11 of U3 (74HC14 on bottom of board)" PRINT "These prevent the Dto line from toggling the /CS input of the A to D" PRINT 'PRINT " This has been a good years software effort (on and off)" COLOR 10: PRINT "Please"; : COLOR 15: PRINT " tell me about machines it wont run on at JDutra@linear.com, Thanks." PRINT "Enjoy it ! "; : COLOR 9: PRINT ; " JD ": COLOR 15: PRINT PRINT "On the main scanning screen ..." COLOR 13: PRINT "PINK"; : COLOR 15: PRINT " keys are hot keys" PRINT "Hit "; : COLOR 13: PRINT "R"; : COLOR 15: PRINT " to Reset the min/max table in the HTML output file output" PRINT "Hit "; : COLOR 13: PRINT "L"; : COLOR 15: PRINT " to Log Now to Excel file and HTML file" PRINT "Hit "; : COLOR 13: PRINT ""; : COLOR 15: PRINT " or "; : COLOR 13: PRINT ""; : COLOR 15: PRINT " to Stop" PRINT 10 COLOR 10: PRINT "Please enter the Name of the required HUB Config File below ..." CMD$ = COMMAND$ IF LEN(CMD$) > 2 THEN x$ = CMD$: GOTO 23 INPUT " .txt is appended to name ( Default = hubcfg.txt)==>>"; x$ IF x$ = "" THEN x$ = "hubcfg.txt": GOTO 23 x$ = x$ + ".txt" 23 OPEN x$ FOR INPUT AS #1 CLS lines% = 1 DO WHILE NOT EOF(1) FOR n = 0 TO 5: b$(n) = "": NEXT n rec = 0: d$ = "" numlin = numlin + 1 LINE INPUT #1, rec1$ 'Read entries from file. length = LEN(rec1$) rec22$ = "" FOR n = 1 TO length a$ = MID$(rec1$, n, 1) IF a$ = "'" THEN 30 'comment => ignor rest of line 'IF ASC(a$) = 39 THEN 30 rec22$ = rec22$ + a$ NEXT n 30 rec1$ = rec22$ length = LEN(rec1$) FOR n = 1 TO length a$ = MID$(rec1$, n, 1) IF ASC(a$) > 128 THEN a$ = CHR$(ASC(a$) - 128) IF a$ = CHR$(34) THEN GOTO 31: REM =>" => start / end new string IF a$ = "," THEN rec = rec + 1: GOTO 31: 'Start /end new data on line IF rec < 3 THEN IF a$ = CHR$(32) THEN 31 ' ??? b$(rec) = b$(rec) + a$ 31 NEXT n 'finished line => process then next line FOR rec = 0 TO 1 'PRINT "b$("; rec; ")=>"; b$(rec); "<=" rec1$ = UCASE$(rec1$) 'ALL the OPTIONS in hubcfg.txt FOLLOW ... IF (LEFT$(LTRIM$(rec1$), 4)) = "DATA" THEN GOSUB 4555: GOTO 334 IF (LEFT$(LTRIM$(rec1$), 4)) = "SLOT" THEN GOSUB 4555: GOTO 334 IF rec = 1 THEN 334 GOSUB 4565 IF (LEFT$(LTRIM$(rec1$), 4)) = "DIAG" THEN diag% = VAL(d$): GOTO 335 IF (LEFT$(LTRIM$(rec1$), 8)) = "HTMLFILE" THEN HTMLFILE$ = e$: GOTO 335 IF (LEFT$(LTRIM$(rec1$), 6)) = "HTMLON" THEN HTMLON% = VAL(d$): GOTO 335 'IF (LEFT$(LTRIM$(rec1$), 6)) = "XLFILE" THEN XLFILE$ = e$: GOTO 335 xlfile$ = "a" + LEFT$(DATE$, 5) + "-" + MID$(DATE$, 10, 1) + ".XLS"'xxxxxxxxxx IF (LEFT$(LTRIM$(rec1$), 4)) = "XLON" THEN XLON% = VAL(d$): GOTO 335 IF (LEFT$(LTRIM$(rec1$), 6)) = "PCPORT" THEN PCPORT$ = e$: GOTO 335 IF (LEFT$(LTRIM$(rec1$), 7)) = "SAMPTIM" THEN XLsamptime = VAL(d$): GOTO 335 IF (LEFT$(LTRIM$(rec1$), 7)) = "LINEMAX" THEN linemax% = VAL(d$): GOTO 335 IF (LEFT$(LTRIM$(rec1$), 5)) = "DELAY" THEN delay% = VAL(d$): GOTO 335 IF (LEFT$(LTRIM$(rec1$), 6)) = "TCDIAG" THEN tcdiag% = VAL(d$): GOTO 335 IF (LEFT$(LTRIM$(rec1$), 6)) = "TCDATA" THEN tcdata = VAL(d$): GOTO 335 IF (LEFT$(LTRIM$(rec1$), 5)) = "TCREF" THEN tcreftemp% = VAL(d$): GOTO 335 'for effic calcs... IF (LEFT$(LTRIM$(rec1$), 6)) = "RINPUT" THEN rinput = VAL(d$): GOTO 335 IF (LEFT$(LTRIM$(rec1$), 7)) = "ROUTPUT" THEN routput = VAL(d$): GOTO 335 IF (LEFT$(LTRIM$(rec1$), 6)) = "VINPUT" THEN vinputmax = VAL(d$): GOTO 335 IF (LEFT$(LTRIM$(rec1$), 7)) = "VOUTPUT" THEN voutputmax = VAL(d$): GOTO 335 'and more ... IF (LEFT$(LTRIM$(rec1$), 5)) = "D2410" THEN D2410% = VAL(d$): GOTO 335 IF (LEFT$(LTRIM$(rec1$), 4)) = "RAIN" THEN RAIN% = VAL(d$): GOTO 335 IF (LEFT$(LTRIM$(rec1$), 6)) = "SINGLE" THEN SINGLECH% = VAL(d$): GOTO 335 PRINT rec1$ 'INPUT "Warning -I don't recognize the above setting from the config file 334 NEXT rec ' multiple records on data line only 335 REM bitadj% = 0 32 LOOP 'loop on input file , works with DO CLOSE #1 IF linemax% < 4 THEN linemax% = 10 IF linemax% > 35 THEN linemax% = 35 linemax% = linemax% - 1 SINDXMAX% = SINDX% - 1' EXIT routine FOR SINDX% = 0 TO SINDXMAX%' SLOT INDEX, SLOT SELECTOR, NOT SLOT NUMBER naddr%(slot%(SINDX%)) = 1 + naddr%(slot%(SINDX%)) IF slot%(SINDX%) > 275 THEN : PRINT "Too many slots, hit "; : GOTO 4610 NEXT SINDX% 4610 ' SINDXMAX% = SINDX% - 1 PRINT "# of DATA statements used ="; SINDXMAX% PRINT "Config END" ': INPUT x: TREF# = 22 PRINT "TREF="; TREF 33 SINDXMAX% = SINDX% - 1 IF diag% <> 1 THEN 34 FOR SINDX% = 0 TO SINDXMAX% ' SLOT INDEX, SLOT SELECTOR, NOT SLOT NUMBER PRINT slot%(SINDX%), STYPE$(SINDX%, 1), STYPE$(SINDX%, 2), STYPE$(SINDX%, 3) IF INT(SINDX% / 30) = SINDX% / 30 THEN INPUT c NEXT SINDX% 34 IF diag% = 1 THEN GOSUB 8470' PUT THE NUMBERS ON THE SCREEN PRINT "34" IF tcdiag% <> 1 THEN GOTO 7781 ELSE 7782 GOTO 7781 ' REM to TEST the Thermocouple stuff, no rem = normal 7782 horiz% = 6: SINDX% = 2: RSINDX% = 10 FOR n = 2 TO 35: STYPE$(n, 3) = "": NEXT n: horiz% = 45: linemax% = 35 D2400P# = tcdata: CLS LOCATE 6, 5: PRINT "Volts="; 1000 * (D2400P# * (5 / 1000000)); "mV": UNIT$ = "mV ": hzcom% = 42 TREF# = tcreftemp% LOCATE 7, 5: PRINT "COLD JUNCTION TEMP="; tcreftemp% XDUCERTYPE$ = "ETCWCJC": GOSUB 6600: SINDX% = SINDX% + 1 'main XDUCERTYPE$ = "ETCNOCJC": GOSUB 6600: SINDX% = SINDX% + 1 XDUCERTYPE$ = "JTCWCJC": GOSUB 6600: SINDX% = SINDX% + 1 XDUCERTYPE$ = "JTCNOCJC": GOSUB 6600: SINDX% = SINDX% + 1 XDUCERTYPE$ = "KTCWCJC": GOSUB 6600: SINDX% = SINDX% + 1 XDUCERTYPE$ = "KTCNOCJC": GOSUB 6600: SINDX% = SINDX% + 1 XDUCERTYPE$ = "RTCWCJC": GOSUB 6600: SINDX% = SINDX% + 1 XDUCERTYPE$ = "RTCNOCJC": GOSUB 6600: SINDX% = SINDX% + 1 XDUCERTYPE$ = "STCWCJC": GOSUB 6600: SINDX% = SINDX% + 1 XDUCERTYPE$ = "STCNOCJC": GOSUB 6600: SINDX% = SINDX% + 1 XDUCERTYPE$ = "TTCWCJC": GOSUB 6600: SINDX% = SINDX% + 1 XDUCERTYPE$ = "TTCNOCJC": GOSUB 6600: SINDX% = SINDX% + 1 SINDX% = SINDX% + 1 GOTO 9099 '--------=> EXIT => 7781 CLS 'GOSUB 8755 GOSUB 8752: GOSUB 8762 7774 LOCATE linemax% + 4, 1: COLOR 6 'PRINT "Copyright (C) 2003 by J. Dutra - all rights rsrved"; : COLOR 15: REM PRINT "this prog requires Dfrom to be on DSR, PIN 6 ,Not Sin/RxD " REM PRINT "JD run a speed test, how fast does this write to the port on a P3-700?" REM inputs are com port number = port REM address of the slot(s) you want to access = addr (short int) REM and (optional) data you want to write to that slot (5 bytes)= data(5) REM output is the 32 bid word from the LTC2400 = Dfrom REM and the 8 bit word after it = Alrm (Optional while writing DASHUB address) REM bita = bit address 0 to 39 REM TYPE variables here REM set some constants, since they can be accessed faster LET c128% = 128: c64% = 64: c32% = 32: c16% = 16: c8% = 8: c9% = 9: c4% = 4: cpt01 = .01 LET c3% = 3: c2% = 2: c1% = 1: c0% = 0: km = (2 ^ 28) - 1: kn = 1000000: c31% = 31 LET cn1m# = -1E+20: c1m# = 1E+20 DIM ch1%(300), ch0%(300) DIM bit&(31), bitn&(31) FOR n% = 0 TO 30: bit&(31) = &H80000000: bitn&(0) = bit&(31) bit&(n%) = 2 ^ n% bitn&(31 - n%) = bit&(n%) NEXT n% 'make 0001000 words DEF SEG = 0 IF XLsamptime = 0 THEN XLsamptime = 60: ' ON TIMER(XLsamptime) 'THE ON TIMER INSTRUCTION SUCKS 'cause TIMER IS FLOATING POINT LOCATE 5, 5: PRINT "Please wait while I configure the PC Port ..." PCPORT$ = UCASE$(PCPORT$) IF (PCPORT$) = "COM1" THEN 35 IF (PCPORT$) = "COM2" THEN 36 IF (PCPORT$) = "COM3" THEN 37 IF (PCPORT$) = "COM4" THEN 38 IF (PCPORT$) = "LPT1" THEN 39 IF (PCPORT$) = "LPT2" THEN 40 PRINT "ERROR, INVALID PCPORT$="; PCPORT$; " ": GOTO 9000 35 OPEN "COM1:300,N,8,1,CD0,CS0,DS0,OP0,RS" FOR RANDOM AS #1 port = (&H3F8): GOTO 69 36 OPEN "COM2:300,N,8,1,CD0,CS0,DS0,OP0,RS" FOR RANDOM AS #1 port = (&H2F8): GOTO 69 37 port = (&H3E8) OPEN "COM3:300,N,8,1,CD0,CS0,DS0,OP0,RS" FOR RANDOM AS #1 GOTO 69 38 port = (&H2E8) OPEN "COM4:300,N,8,1,CD0,CS0,DS0,OP0,RS,TB2048,RB2048" FOR RANDOM AS #1 GOTO 69 39 port = &H378: GOTO 69 40 port = &H278 69 IF LEFT$(PCPORT$, 1) = "L" THEN mcr% = port: msr% = port + 1: GOSUB 6770 LOCATE 5, 5: s = 40: GOSUB 8380 IF LEFT$(PCPORT$, 1) = "C" THEN mcr% = port + 4: msr% = port + 6 70 CLOSE #1 'PRINT "mcr%"; mcr%; "msr%="; msr%; " km="; km x1% = 1: X4% = 4 LOCATE 3, 1 PRINT "Hit "; : COLOR 13: PRINT ""; : COLOR 15: PRINT " to Start and "; COLOR 13: PRINT " or "; : COLOR 15: PRINT " to Stop" LOCATE 3, 1: GOSUB 8700 '%=int(16 bits),&=longint(32),!=single prec(32),#=double(64 bits) timestart$ = TIME$ datestart$ = DATE$ timerstart = TIMER timerst30 = TIMER + 30: IF timerst30 > 86380 THEN timerst30 = 30 secstart% = VAL(MID$(timestart$, 7, 2)) flag4% = 1 XLtimetrig = TIMER + 4 IF XLtimetrig > 86390 THEN XLtimetrig = 0 HTMLsectrig = XLtimetrig GOSUB 7100 ' reset minmax IF diag% = 1 THEN GOSUB 8470' PRINT NUMBERS LOCATE linemax% + 4, 70: PRINT "PCport="; PCPORT$; FOR SLOTTT% = 0 TO 255 IF naddr%(SLOTTT%) > 0 THEN nextaddr% = SLOTT%: GOSUB 3750: GOTO 83 NEXT SLOTTT% 83 timest2# = TIMER DIM DMAT#(300, 5): 'col 0 and 1 are for channel data, MIN / MAX MATRIX 'col 2,3 are for min (ch0) , Time of min of ch0, Max ( ch0), time of MAX(cho) 'col 4,5 are for MAX (ch0) , Time of MAX of ch0, MIN ( ch0), time of MAX(cho) DIM USEDSLOT%(300) DIM SLOTDATA#(55) DIM CHANN%(55) DIM NEGG%(55) DIM SIGNN%(55) DIM EXTRR%(55) DIM MINTIME$(55, 1) DIM MAXTIME$(55, 1) mofile2$ = "Mo-" + LEFT$(DATE$, 2) + "-" + MID$(DATE$, 9, 2) + ".XLS": mofile$ = mofile2$ YESTERDAY$ = DATE$ DIM TIMEON#(55, 1) DIM WELLON%(55, 1) DIM TOTALONTIME#(55, 1) 'When a new max or min occurs, the time goes in M--TIME$( SLOTINDEX, CHANNEL) 'DIM SUMDMAT#(300, 4) 'col 3,3 are for avg min and max DIM DBIT%(34) DIM DUNIT$(256, 1)' o and 1 are channel units, 2 is comments DIM DMPPM#(256, 2) DIM badconmask%(255) DIM badconACCUM&(255) ' number of bad conversions of each slt 73 REM -------------========== LOOP START here =========== ------- timold = TIMER ' 74 DO FOR n = 1 TO linemax% - 1: COLOR 12: LOCATE n + 4, 22: PRINT "|"; : NEXT n: COLOR 15 timenow$ = TIME$ sec% = VAL(MID$(timenow$, 7, 2)) GOTO 845 84 NUMSCAN# = NUMSCAN# + 1 845 LOCATE 1, 15: PRINT " "; DATE$; " "; timenow$; timesec = TIMER IF timold <= TIMER THEN 85 GOSUB 5300 'MIDNIGHT 85 timold = TIMER IF NUMSCAN# = 9 THEN armtime% = 1: 'GOSUB 7100: GOSUB 8710 LOCATE 1, 2: PRINT "Scan#="; NUMSCAN#; " " REM Initialize SCLK=0 OUT mcr%, c0% '------- FILL UP THE CONVERSIONS HERE ----------- 99 FOR SLOTTT% = 0 TO 255 IF naddr%(SLOTTT%) > 0 THEN GOSUB 100 NEXT SLOTTT% IF NUMSCAN# = 0 THEN 84 'TO PREVENT an issue with addressing , the next slot problem???????????? NUMSCAN# = NUMSCAN# + 1 119 'FOLLOWING USED TO PROCESS and DISPLAY DATA after all slots converted IF slow% = c1% THEN GOSUB 8772 1195 FOR SINDX% = 0 TO SINDXMAX% ' <<<<<<<<<<<<================== NXTINDX% = SINDX% addr% = (slot%(NXTINDX%)) 120 REM 844 SLTADDR% = slot%(NXTINDX%) ' Addresses of SLOTS <------------------- 8441 resu31& = SLOTDATA&(SLTADDR%) ' DDDDDDDDDDDD result& = (resu31& AND &HFFFFFF0) 8443 chan% = CHANN%(SLTADDR%): neg% = NEGG%(SLTADDR%): extr% = EXTRR%(SLTADDR%) 846 'LOCATE 24, 5: PRINT result&, `SLOTDATA&(slot%(NXTINDX%)), slot%(NXTINDX%) k1 = c1%: digin% = c0% D2400P# = result& ' 175 ' 1600 REM MATH BELOW MMMMMMMMM GOSUB 8752 GOSUB 4800 ' IF sec% > 26 THEN IF flag6% = 1 THEN 1603 ELSE 1601 1601 IF TIMER > HTMLsectrig THEN 1602 ELSE 1603 1602 flag6% = 0: IF HTMLON% = 1 THEN GOSUB 8710 ' HTML LOG FILE HTMLsectrig = TIMER + 6' every 6 sec 1603 in$ = UCASE$(INKEY$) NUMPAGE% = INT(SINDXMAX% / (linemax%)) + 1 IF in$ = CHR$(27) THEN 9000 ' IF in$ = " " THEN 9000 IF in$ = "Q" THEN 9000 IF in$ = "S" THEN GOSUB 8770 ' toggle slow / fast mode IF in$ = "P" THEN page% = page% + 1: GOSUB 8380: IF page% > NUMPAGE% THEN page% = 1 IF in$ = "X" THEN GOSUB 8750 ' TOGGLE XL logging ON OR OFF IF in$ = "H" THEN GOSUB 8760 ' TOGGLE HTML =>HELP IF in$ = "T" THEN GOSUB 8760 ' TOGGLE HTML Logging ON OR OFF IF in$ = "A" THEN GOSUB 8600 'ABOUT IF in$ = "I" THEN GOSUB 8600 'INFO ABOUT IF in$ = "L" THEN armtime% = 1: xllognow% = 1 IF in$ = "R" THEN GOSUB 7100 ' RESET MIN MAX MATRIX IF in$ = "C" THEN GOSUB 7200 ' COPY THE XL FILE TO ONE YOU CAN USE ' 2400 MATH MMMMMMM D2400P# = (result& / km) * kn IF (neg% = c0% AND extr% = c1%) THEN D2400P# = D2400P# - kn IF (neg% = c1% AND extr% = 1) THEN D2400P# = D2400P# + kn '------- IF D2410% = 1 THEN D2400P# = D2400P# - 500000 1708 IF chan% = c1% THEN horiz% = 23 ELSE horiz% = 5 1709 GOSUB 8150 IF diag% <> 1 THEN 1710 1710 IF RSINDX% < 3 OR RSINDX% > linemax% + 3 THEN GOTO 1711 ' 1712 IF addr% < 0 THEN GOTO 1711 ' BLANK LINE ON DISPLAY IF ch1%(addr%) > c4% THEN LOCATE RSINDX%, 23: PRINT " " IF ch0%(addr%) > c4% THEN LOCATE RSINDX%, 5: PRINT " " 1711 GOSUB 8150 XDUCERTYPE$ = RTRIM$(LTRIM$(UCASE$(STYPE$(SINDX%, 1 + chan%)))) ' 2410 MATH MMMMMMMM IF RIGHT$(XDUCERTYPE$, 1) = "X" THEN 1740 ELSE 1745 1740 D2400P# = (((resu31& AND &H3FFFFFF0) / bit&(29)) * 1000000) - 1000000 x = LEN(XDUCERTYPE$) XDUCERTYPE$ = LEFT$(XDUCERTYPE$, x - 1) 1745 DMPPM#(addr%, chan%) = D2400P# 'IF LEFT$(XDUCERTYPE$, 7) = "OHMSBOT" THEN GOSUB 3000: GOSUB 8200 :GOTO 1800 IF XDUCERTYPE$ = "OHMSTOP" THEN GOSUB 6550: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "OHMSBOT" THEN GOSUB 6202: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "BS" THEN GOSUB 3000: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "INPUTPWR" THEN GOSUB 6410: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "OUTPUTPWR" THEN GOSUB 6420: GOSUB 8200: GOTO 1800 IF LEFT$(XDUCERTYPE$, 5) = "EFFIC" THEN GOSUB 6430: GOSUB 8200: GOTO 1800 IF LEFT$(XDUCERTYPE$, 1) = "V" THEN rec1$ = XDUCERTYPE$: flag1% = 1: GOSUB 4566: vmax = VAL(d$): GOSUB 6292: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "GPIN" THEN GOSUB 5100: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "GPOUT" THEN GOSUB 5200: GOSUB 8200: GOTO 1800 IF MID$(XDUCERTYPE$, 2, 2) = "TC" THEN GOSUB 6600: GOSUB 8200: GOTO 1800 'MAIN TC IF MID$(XDUCERTYPE$, 2, 2) = "TF" THEN GOSUB 6600: GOSUB 8200: GOTO 1800 'MAIN TC 'ADD TYPES HERE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IF XDUCERTYPE$ = "PPM" THEN GOSUB 6100: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "NONE" THEN GOSUB 3000: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "LT334TEMPC" THEN GOSUB 6300: GOSUB 8200: GOTO 1800 'IF XDUCERTYPE$ = "LT334TEMPF" THEN GOSUB 6400: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "LT334TEMPF" THEN GOSUB 6300: GOSUB 6340: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "LT334TEMPCREF" THEN GOSUB 6404: GOSUB 8200: GOTO 1800 'IF XDUCERTYPE$ = "LT334TEMPFREF" THEN GOSUB 6407: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "LT334TEMPFREF" THEN GOSUB 6404: GOSUB 6340: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "LM35TEMPC" THEN GOSUB 6370: GOSUB 8200: GOTO 1800 'IF XDUCERTYPE$ = "LM35TEMPF" THEN GOSUB 6360: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "LM35TEMPF" THEN GOSUB 6370: GOSUB 6340: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "LM35TEMPFREF" THEN GOSUB 6380: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "LM35TEMPCREF" THEN GOSUB 6390: GOSUB 8200: GOTO 1800 '!!!!!THERM!!! IF XDUCERTYPE$ = "THRMTEMPF" THEN GOSUB 6310: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "THRMTEMPC" THEN GOSUB 6312: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "THRMTEMPFREF" THEN GOSUB 6314: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "THRMTEMPCREF" THEN GOSUB 6316: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "RSTHERMC" THEN GOSUB 6330: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "RSTHERMF" THEN GOSUB 6330: GOSUB 6340: GOSUB 8200: GOTO 1800 IF XDUCERTYPE$ = "ONTIME" THEN GOSUB 6700: GOSUB 8200: GOTO 1800 ' For wells and sprinkler time monitoring '!!!!!!!!!!! 1799 ' bad XDCRTYPE$ IF RSINDX% < 3 OR RSINDX% > linemax% + 3 THEN GOTO 1800 LOCATE RSINDX%, horiz% PRINT XDUCERTYPE$; : GOTO 1800 1800 NEXT SINDX% ' Increment the SLOT address '----------------- 1805 COLOR 15 PIN = 0: POUT = 0 'HERE ONCE PER SCAN GOSUB 8752: GOSUB 8755: GOSUB 8762: GOSUB 8749: GOSUB 8831 IF timeneg% = 1 THEN IF timerstart - TIMER < 0 THEN daycnt = daycnt + 1: timeneg% = 0 IF timerstart - TIMER > 0 THEN timeneg% = 1 '---NEW 1807 IF XLtimetrig = 0 THEN : IF TIMER > 2000 THEN 1613 IF TIMER > XLtimetrig THEN 1808 ELSE 1613 1808 IF XLON% = 1 THEN GOSUB 8810 ' WRITE XL FILE RECORD !! XLtimetrig = INT(TIMER + XLsamptime) + cpt01 IF XLtimetrig > 86390 THEN XLtimetrig = 0 1613 AVGCnjdt# = AVGCnjdt# + 1 'LOCATE linemax%, 20: PRINT "TESTTIMER="; TIMER; " XLtimetrig="; XLtimetrig IF armtime% > 0 THEN 1614 ELSE 1620 1614 armtime% = 0 'ARMTIME WAS "1"=>Triggered xllognow% = 0 IF XLON% = 1 THEN GOSUB 8810 'XL LOG FILE 1619 IF HTMLON% = 1 THEN GOSUB 8710 ' HTML LOG FILE 1620 'LOOP WHILE INKEY$ = "": REM Works with "DO" LOOP GOTO 9000 ' rem END !! '=======================End Main ===> Subs follow ==========>>> 100 'READ THE A TO D -- SLOTT% = nextaddr% ' now the current A to D address nextaddr% = SLOTTT% 'nexaddr 101 addr% = SLOTT%: adrtmp% = SLOTT%: 'timestrt = TIMER TIMESTRTBIT% = 16 GOSUB 3800: GOSUB 3750 ' THE READ AND THE NEXT SLOT ADDRESS !!!!!!!!! 'fix the windows granularity problem timeaddr = (TIMER - timestrt) IF timeaddr > .105 THEN badconvfg% = c1%: timedout = timedout + c1%: timedslot% = (SLOTT%): IF timedoutmax < timeaddr THEN timedoutmax = timeaddr: timedoutslott% = SLOTT% IF badconvfg% = c1% THEN badconmask%(SLOTT%) = c32%: badconACCUM&(SLOTT%) = badconACCUM&(SLOTT%) + c1%: GOTO 110 IF badconmask%(SLOTT%) > c1% THEN : badconmask%(SLOTT%) = badconmask%(SLOTT%) - c1%: GOTO 110 SLOTDATA&(SLOTT%) = resu31& ' ALL 31 bits ! CHANN%(SLOTT%) = chan% NEGG%(SLOTT%) = neg% SIGNN%(SLOTT%) = sign% EXTRR%(SLOTT%) = extr% 110 NUMMEAS# = NUMMEAS# + 1 RETURN '------------ 2000 REM SUB TO WRITE DATA Dto% TO MCR AND simult. read MSR . ONE BIT ONLY, WITH CLOCK REM AND RETURN data dfrm% as 0 or 1, THIS IS THE HARDWARE INTERFACE !! DTO% = c0% 'DTO% not used yet 'should add DTO demux on DASHUB BOARD TO BEST USE DTO% GOSUB 3000 'OUT mcr%, c2%: OUT mcr%, c0% ' TEST TIMING OF READ !!!!puts pulses on Dto!!!!!!!!! x3% = INP(msr%) AND c16% GOSUB 3000 'bit 1 of MCR is Dto, bit 0 is sclk REM below writes the bit to, then makes bit low for falling edge of sclk IF DTO% = c1% THEN OUT mcr%, c2%: GOSUB 3000: OUT mcr%, c3% ELSE OUT mcr%, c1% GOSUB 3000 'x3% = INP(msr%) AND c16% IF x3% = c16% THEN DFRM% = c1% ELSE DFRM% = c0% GOSUB 3000: OUT mcr%, c1%: GOSUB 3000 OUT mcr%, c0%: GOSUB 3000 2100 RETURN '------------------------------------------------------- 2200 ' SUBROUTINE TO READ THE DATA BIT AND RETURN WITH IT IN dfrm% REM does NOT change sclock y3% = INP(msr%) AND c16% REM below converts data to a bit IF y3% = c16% THEN DFRM% = c1% ELSE DFRM% = c0% RETURN ' -------------------------------------------------------------- 2500 'NOT USED RETURN '------------------------------------------------------------------ 3000 REM delay sub !!!!!!!!!!!!!!!!!!!!! 'RETURN ' <<<<<<<<<======== NO DELAY !!! FOR n8% = 0 TO delay%: NEXT n8% RETURN '------------------------------------------------------------- 3300 REM Error!!!! Subroutine (Not fatal error ) trap !!!!!!!!!!!!!!!! LOCATE 23, 1 PRINT "ERR 3300"; "addr="; addr%; "# meas="; NUMSCAN#; "Chan "; chan%; " "; 'IF bita% = 31 THEN IF DFRM% = 1 THEN : errc% = 1: PRINT "CONVERSION NOT FINISHED"; CHR$(7); ec = ec + 1: LOCATE 22, 20: PRINT "Err cnt="; ec RETURN '------------------------------------------------------ 3750 ' WRITE ADDRESS TO DASHUB adrtmp% = nextaddr%: adrba% = c128%: FOR x1% = 1 TO 8: REM SCLK = bit 0, Dto = bit 1 IF adrtmp% >= adrba% THEN adrtmp% = adrtmp% - adrba%: OUT mcr%, c2%: OUT mcr%, c3% ELSE OUT mcr%, c1% adrba% = adrba% / c2% IF x1% = 8 THEN GOTO 3788 OUT mcr%, c1%: 'REM put data line LOW then put SCLK low GOTO 3790 3788 OUT mcr%, c3%: GOSUB 3000: OUT mcr%, c2%: 'REM put data line HIGH then put SCLK low GOSUB 3000 3790 OUT mcr%, c0% 3795 NEXT x1% RETURN '---------------------------------------- 3800 ' READ THE A to D at the current channel result& = c0%: resu2410& = c0%: resu31& = c0% 'IF NUMSCAN# < c4% THEN timeinc% = c2% ELSE timeinc% = c8% timeinc% = c2% badconvfg% = c0%: k1 = km: D2400P# = 0: chan% = c0%: neg% = c0%: bita% = 32 timst = TIMER + timeinc%: IF timst > 86390 THEN timst = 0 ' HERE IS THE PROBLEM !!!!!!!<<<<<<<<<<<<<<< c31% THEN 3857 cneb31 = 1: 3848 GOSUB 2200 'READ THE FIRST BIT OF A SLOT , NO CLOCK , Zero=> wait !!! 'DFRM% = 0 'TEST 3850 IF bima% = c31% THEN GOTO 3852 ELSE 3857 3852 IF DFRM% = c0% THEN GOTO 3857 3855 cneb31 = cneb31 + 1: IF cneb31 > c4% THEN LOCATE linemax% + 5, 59: COLOR 7: PRINT "Waiting for a to d"; IF timst = 0 THEN IF DFRM% = c1% THEN GOTO 3848 IF TIMER < timst THEN IF DFRM% = c1% THEN GOTO 3848 'HERE !!" IF ABS(TIMER - timest) > 2 THEN IF DFRM% = c1% THEN : timst = TIMER + timeinc%: IF timst > 86390 THEN timst = 0: GOTO 3848 'it falls thru to EOC error.... 3856 LOCATE linemax% + 5, 59: PRINT "Timed out on EOC"; FOR bs% = 1 TO 32 GOSUB 2000 'clock it 32 times NEXT bs% badconvfg% = c1% badconacum& = badconacum& + 1: 'LOCATE linemax% - c2%: PRINT "Badconv="; badconacum&; GOTO 3890 '-------------------- 3857 LOCATE linemax% + 5, 59: PRINT " "; 'still on bima=31, but it went low 'resu31&=all 31 bits of conversion GOSUB 2000: IF DFRM% = c1% THEN resu31& = resu31& OR bit&(bima%) bita% = bita% - c1%: DBIT%(bita%) = DFRM% 3860 IF bita% = 30 THEN 3861 ELSE 3871 ' CHANNEL BIT !!!!!!!!!!!!!!! 3861 IF DFRM% = c1% THEN chan% = c1%: ch1%(addr%) = c0%: ch0%(addr%) = ch0%(addr%) + 1 IF DFRM% = c0% THEN chan% = c0%: ch1%(addr%) = ch1%(addr%) + c1%: ch0%(addr%) = 0 IF ch1%(addr%) > c128% THEN ch1%(addr%) = c64% IF ch0%(addr%) > c128% THEN ch0%(addr%) = c64% 3871 IF bita% = 29 THEN IF DFRM% = c0% THEN neg% = c1%: REM PRINT "RESULT NEGATIVE" IF bima% < 29 THEN IF DFRM% = c1% THEN result& = result& OR bit&(bima%) IF bima% < 30 THEN IF DFRM% = c1% THEN resu2410& = resu2410& OR bit&(bima%) NEXT bima% 'done with all bits IF neg% > c0% THEN IF result& < c32% THEN neg% = c0% 'fix the 1/0 sign bit prob k1 = 1: digin% = c0% D2400P# = result& ' TEST IF D2410% = c1% THEN D2400P# = ((resu2410& / bit&(30)) * 2000000) - 1000000 '---------- IF (resu31& AND bit&(29)) = 0 THEN neg% = c0% ELSE neg% = c1%: ' bits over 1 IF (resu31& AND bit&(30)) = 0 THEN 3880 chan% = c1%: ch1%(addr%) = c0%: ch0%(addr%) = ch0%(addr%) + 1: GOTO 3881 3880 chan% = c0%: ch1%(addr%) = ch1%(addr%) + c1%: ch0%(addr%) = 0 3881 IF (resu31& AND bit&(28)) <> 0 THEN extr% = c1% ELSE extr% = c0%: resu27& = (resu31& AND &HFFFFFF0) D2400P# = (resu27&) 'gives chan%(bit 30) ,neg% ("sign bit" 29) ,extr%(bit 28) and resu31& ' bits are in the right places 3890 RETURN '---------------------------------------------- 3900 'INITS - sub to set up constants to convert volts into temperature RANDOMIZE TIMER DIM ak#(9, 6) ak#(0, 0) = .104967248#' ak#(x,0) =E type TC ak#(1, 0) = 17189.45282#: ak#(2, 0) = -282639.085#: ak#(3, 0) = 12695339.5# ak#(4, 0) = -448703084.6#: ak#(5, 0) = 1.10866E+10: ak#(6, 0) = -1.76807E+11 ak#(7, 0) = 1.71842E+12: ak#(8, 0) = -9.19278E+12: ak#(9, 0) = 2.06132E+13 ak#(0, 1) = -.048868252# 'ak#(x,1) = J type ak#(1, 1) = 19873.14503#: ak#(2, 1) = -218614.5353#: ak#(3, 1) = 11569199.78# ak#(4, 1) = -264917531.4#: ak#(5, 1) = 2018441314 ak#(6, 1) = ak#(7, 1) = 0: ak#(8, 1) = 0: ak#(9, 1) = 0 ak#(0, 2) = .226584602# ' ak#(x,2) = K type ak#(1, 2) = 24152.109#: ak#(2, 2) = 67233.42478#: ak#(3, 2) = 2210340.682# ak#(4, 2) = -860963914.9#: ak#(5, 2) = 4.83506E+10: ak#(6, 2) = -1.1845E+12 ak#(7, 2) = 1.3869E+13: ak#(8, 2) = -6.33708E+13 ak#(0, 3) = .263632917# ' ak#(x,3) = R type ak#(1, 3) = 179075.491#: ak#(2, 3) = -48840341.37#: ak#(3, 3) = 1.90002E+10 ak#(4, 3) = -4.82704E+12 ak#(5, 3) = 7.62091E+14 ak#(6, 3) = -7.20026E+16 ak#(7, 3) = 3.71496E+18 ak#(8, 3) = -8.03104E+19 ak#(9, 3) = 0 ak#(0, 4) = .9277631670000001#' ak#(x,4) = S type ak#(1, 4) = 169526.515# ak#(2, 4) = -31568363.94# ak#(3, 4) = 8990730663# ak#(4, 4) = -1.63565E+12 ak#(5, 4) = 1.88027E+14 ak#(6, 4) = -1.37241E+16 ak#(7, 4) = 6.17501E+17 ak#(8, 4) = -1.56105E+19 ak#(8, 4) = 1.69535E+20 ak#(0, 5) = .10086091# ' ak#(x,5) = T type ak#(1, 5) = 25727.94369# ak#(2, 5) = -767345.8295# ak#(3, 5) = 78025595.81# ak#(4, 5) = -9247486589# ak#(5, 5) = 6.97688E+11 ak#(6, 5) = -2.66192E+13 ak#(7, 5) = 3.94078E+14 ak#(8, 5) = 0: ak#(9, 5) = 0 REM above from Omega temp handbook RETURN '----------------------------- 4000 PRINT "FOR HELP, LOOK AT THE HUBCFG.TXT FILE" INPUT x RETURN' -------------------------- 4100 REM 'THERMOCOUPLE sub to to convert volts into temperature USED !! difference = .1 'first do cold junction compensation 'Inputs TC Type, Tref , output VREF# 'TREF# = Cold junction temp in deg C 'now calculate the voltage associated with the TREF# VREF# = .002: delta = .004: ntry = 0 4110 TEMTP# = 0 FOR njdt# = 9 TO 1 STEP -1 LOCATE 21, 1 TEMTP# = (VREF# * (ak#(njdt#, TCTYPE%) + TEMTP#)) NEXT njdt# IF ntry > 12 THEN difference = difference * 1.2 'IF ntry = 0 THEN VREF# = .00005 * (TEMTP#): ntry = 1: GOTO 4114 IF ABS(TEMTP# - TREF#) < difference THEN GOTO 4120 ELSE ntry = ntry + 1 IF TEMTP# > TREF# THEN VREF# = VREF# - delta IF TEMTP# < TREF# THEN VREF# = VREF# + delta 4114 delta = delta / 2: IF delta < .0000025 THEN delta = .0000025 GOTO 4110 'D2400V# = D2400V# - VREF#'THIS DOES THE COLD JUNCTION COMPENSATION !!!!!!!!!!!! 4120 'LOCATE 21, 1: PRINT "ntry="; ntry IF ntry > 11 THEN : GOSUB 4130 COLOR 15 'PRINT "VREF#="; VREF#; " TREF#="; TREF#; " TEMTP#="; TEMTP#; " tctype="; TCTYPE% 'PRINT "d2400="; d2400; " D2400V#="; D2400V# RETURN '-------------------------------------- 4130 IF diag = 0 THEN 4132 LOCATE linemax% + 8, 7: PRINT "TEMTP#="; TEMTP#; : LOCATE linemax% + 8, 35: PRINT "TREF#"; TREF#; LOCATE linemax% + 9, 7: PRINT " VREF#="; VREF# 4131 LOCATE linemax% + 6, 63: ntrymax = ntry: COLOR 14: PRINT "chk="; ntry; 4132 RETURN '--------------------------------- 4140 TEMTP# = 0: 'This Converts volts to deg C using the 9th order polynomial 'OR njdt# = 9 TO 1 STEP -1 'TEMTP# = (D2400V# * (ak#(njdt#, TCTYPE%) + TEMTP#)) 'TEMTP# = (ak#(njdt#, TCTYPE%) * (D2400V# ^ njdt#)) + TEMTP# 'NEW EQUATION HERE !!!!!! TEMTP# = (ak#(9, TCTYPE%) * (D2400V#)) + (ak#(8, TCTYPE%)) TEMTP# = (D2400V# * TEMTP#) + (ak#(7, TCTYPE%)) TEMTP# = (D2400V# * TEMTP#) + (ak#(6, TCTYPE%)) TEMTP# = (D2400V# * TEMTP#) + (ak#(5, TCTYPE%)) TEMTP# = (D2400V# * TEMTP#) + (ak#(4, TCTYPE%)) TEMTP# = (D2400V# * TEMTP#) + (ak#(3, TCTYPE%)) TEMTP# = (D2400V# * TEMTP#) + (ak#(2, TCTYPE%)) TEMTP# = (D2400V# * TEMTP#) + (ak#(1, TCTYPE%)) TEMTP# = (D2400V# * TEMTP#) + (ak#(0, TCTYPE%)) REM Nested polynomial form from the Omega book page Z18 'PRINT "temperature="; TEMTP# RETURN '------------------------------------------------------------ 4200 'sub to read the UART regs FOR n% = 0 TO 7: LOCATE n% + 4, 50: PRINT " "; : LOCATE n% + 4, 50 PRINT INP(port + n%); "=PORT n="; n%; : NEXT n%: LOCATE n% + 5, 52: PRINT msr%; "=msr ,inp(msr)= "; INP(msr%) REM PRINT RETURN '--------------------------------------------------------- '4408 'PRINT SOMETHING THEN GO BACK WHERE YOU WERE IF diag2% <> 1 THEN RETURN MyRow% = CSRLIN: MyCol% = POS(0) IF diag2% = 1 THEN LOCATE 21, 70: PRINT "hi jd"; LOCATE 21, 50: PRINT "Flag1 "; flag1%; " flag2%"; flag2% LOCATE MyRow%, MyCol% RETURN 4555 '----------- DATA/SLOT STATEMENTS ONLY ------- IF rec = 1 THEN d = d + 1: SINDX% = SINDX% + 1 IF rec = 3 THEN 4561 flag1% = 0: flag2% = 0: : e$ = "": IF rec = 0 THEN d$ = "" FOR m = 1 TO LEN(b$(rec)) IF a$ = "'" THEN m = LEN(b$(rec)) c$ = MID$(b$(rec), m, 1) IF rec = 0 THEN 4556 ELSE 4557 4556 IF ASC(c$) > 44 AND ASC(c$) < 58 THEN d$ = d$ + c$: 'Pick off numbers IF c$ = "=" THEN flag1% = 1: GOTO 4559 IF flag1% = 1 THEN 4557 ELSE 4559 4557 IF c$ = CHR$(34) THEN flag2% = flag2% + 1 IF flag2% = 2 THEN m = LEN(b$(rec)): GOTO 4559 4559 NEXT m 4560 IF rec = 0 THEN slot = VAL(d$): USEDSLOT%(slot) = USEDSLOT%(slot) + 1 'FOR n = 0 TO 3 slot%(SINDX%) = slot: STYPE$(SINDX%, 1) = b$(1) STYPE$(SINDX%, 2) = b$(2) STYPE$(SINDX%, 3) = b$(3) 4561 RETURN '----------------- 4565 ' not a "data" or "slot" statement 'input rec1$, output d$ is the number only flag1% = 0: 4566 flag2% = 0: : e$ = "": d$ = "" FOR m = 1 TO LEN(rec1$) c$ = MID$(rec1$, m, 1) IF c$ = "'" THEN m = LEN(rec1$) IF c$ = "=" THEN flag1% = 1: GOTO 4569 IF flag1% = 1 THEN 4567 ELSE 4569 4567 IF c$ = CHR$(34) THEN flag2% = flag2% + 1: GOTO 4569 IF flag2% = 2 THEN m = LEN(rec1$): GOTO 4569 ' second " e$ = e$ + c$ IF ASC(c$) > 45 AND ASC(c$) < 58 THEN d$ = d$ + c$: 'LOCATE 71, 24: PRINT "HI"' this statement gives an error ONLY when executed=> BREAK !!! 4569 NEXT m 4571 RETURN '---------------- ' 5300 to 6000 AVALIABLE !!!!!!!!!!!! 4701 ' Print all 32 bits for testing LOCATE linemax% + 2, 1: PRINT "With LTC2402 the bit #30 should be 1 then 0" FOR nbt% = 0 TO 31 LOCATE linemax% + 3, (2 * nbt%) + 2 4704 PRINT RTRIM$(LTRIM$(STR$(DBIT%(nbt%)))); " "; LOCATE linemax% + 4, (2 * nbt%) + 1 IF INT(nbt% / 4) = nbt% / 4 THEN PRINT nbt% NEXT nbt% RETURN '------ '4721 ' not used RETURN '------ 4800 LOCATE linemax% + 5, 1: COLOR 7 PRINT "PAGE "; : COLOR 15: PRINT page%; "OF"; NUMPAGE%; 'COLOR 7: PRINT " HIT"; : COLOR 13: PRINT " P"; : COLOR 7: PRINT "= Next Page | TREF="; PRINT USING "###.###"; TREF#; : PRINT "DegC"; COLOR 15 RETURN '------- 5100 'GPIN RETURN '------ 5200 'GPOUT test routine DATATO& = xx& xx& = xx& + 1 IF xx& > 1000000 THEN xx& = 0 RETURN '----------- 5300 'MIDNIGHT SUB 'MIDNIGHT => new XL file HTMLsectrig = c8% 'OPTION - ADD LAST LINE Min/Max to XL File here xlfile$ = "a" + LEFT$(DATE$, 5) + "-" + MID$(DATE$, 10, 1) + ".XLS": XLREC# = 0: GOSUB 8810 XLtimetrig = INT(TIMER + XLsamptime) + cpt01 '------------ ' COPY HTML FILE TO YESTRDAY.HTM 'make a one month excel file here , date in left column , min max in the next cols 'then clear the min max table for the next day 'Filename MO-YRdat.xls mofile$ = "Mo-" + LEFT$(DATE$, 2) + "-" + MID$(DATE$, 9, 2) + ".XLS": GOSUB 8910 GOSUB 7100 YESTERDAY$ = DATE$ IF mofile2$ <> mofile$ THEN XLREC2# = 0 '--- Sub to put summary on floppy LOCATE linemax% - 2, 2 ON ERROR GOTO 5330 5323 OPEN "a:a.txt" FOR INPUT AS #1 CLS DO WHILE NOT EOF(1) LINE INPUT #1, rec1$ 'Read entries from file. 'PRINT rec1$ LOOP CLOSE #1 ' a.txt exists on FDD so copy the file to floppy ' write here OPEN "jdcopy2.bat" FOR OUTPUT AS #2 PRINT #2, "echo off" PRINT #2, "copy "; mofile2$; " a:"; mofile2$ CLOSE #2 LOCATE linemax% + 4, 1 SHELL "jdcopy2.bat" LOCATE linemax% + 4, 1 PRINT "Summary File written to A: drive at midnight"; GOTO 5340 5330 REM PRINT "error" RESUME 5335 GOTO 5340 5335 LOCATE linemax% + 4, 1 PRINT "a.txt did NOT exist on A: drive at midnight "; 'PRINT "Cont ..." 5340 ON ERROR GOTO 8970 mofile2$ = mofile$ '--- RETURN '----------- 5400 ' FTP UP HERE SHELL "aaftp.bat" 'INPUT " HIT RETURN ! => "; x$ RETURN '------------ 6100 ' PPM dprt# = D2400P# UNIT$ = "PPM " IF diag% = 1 THEN LOCATE linemax% - 2, 10: PRINT "PPM" 'GOSUB 8200 RETURN ' ---------- 6202 REM PRINT Ohms on the bottom under a 10K resistor, USE THIS MODEL !!!!!!! IF D2400P# = 0 THEN D2400P# = .000001 dprt# = 10000 / ((1000000 / D2400P#) - 1) UNIT$ = "Ohms": hzcom% = 42 'GOSUB 8200 RETURN ' ------------------------------------------------------- 6292 REM PRINT VOLTS UNIVERSIAL dprt# = D2400P# * (vmax / 1000000): UNIT$ = "V ": hzcom% = 42 '6295 DPRT# = vmax: PRINT "HERE==>"; rec1$, "="; VAL(d$): END 'GOSUB 8200 RETURN ' ------------------------------------------------------- 6300 REM PRINT LT334TEMPC 10 MV PER DEG C USE THIS MODEL !!!!!!! 'DPRT# = (D2400P# * ((5 / 1000000) * .01)) - 273.15 'D2400P# IS ppm ref to 5V dprt# = (D2400P# * ((5 / 10000))) - 273.15 UNIT$ = "degC": hzcom% = 42 'GOSUB 8200 RETURN ' -- '------- THERMISTOR SUBROUTINES ------------- 6310 REM PRINT THRMTEMPF 10 MV PER DEG F fin GOSUB 6318 dprt# = ((dprt# * (1.8)) + 32) UNIT$ = "degF": hzcom% = 42 'GOSUB 8200 RETURN ' ------------------------------------------------------- 6312 REM PRINT THRMTEMPC 10 MV PER DEG C fin GOSUB 6318 UNIT$ = "degC": hzcom% = 42 'GOSUB 8200 RETURN ' ------------------------------------------------------- 6314 REM PRINT THRMTEMPFREF 10 MV PER DEG F,set as TREF# fin GOSUB 6318 TREF# = dprt# dprt# = ((TREF# * (1.8)) + 32) UNIT$ = "degF": hzcom% = 42 'GOSUB 8200 RETURN ' ------------------------------------------------------- 6316 REM PRINT THRMTEMPCREF 10 MV PER DEG C , set as TREF# fin GOSUB 6318 IF dprt# < -273 THEN dprt# = 0: GOTO 6317 TREF# = dprt# 6317 UNIT$ = "degC": hzcom% = 42 'GOSUB 8200 RETURN ' --------------------- 6318 ' R (10K) to MAJOR SUB !!!THERMISTOR TEMP FROM www.omega.com page D3 IF D2400P# = 0 THEN D2400P# = .000001 IF D2400P# = 1000000 THEN D2400P# = 1000000.01# 6319 resis# = 10000 / ((1000000 / D2400P#) - 1) 6320 Acoeff# = .001026414#: Bcoeff# = .000239563#: Ccoeff# = .000000155# IF resis# < Ccoeff# THEN resis# = Ccoeff# 6321 lnres# = LOG(resis#) 6325 dprt# = (1 / (Acoeff# + (Bcoeff# * lnres#) + (Ccoeff# * lnres# * lnres# * lnres#))) - 273.15 IF dprt# < -250 THEN dprt# = -273.15: IF dprt# > 400 THEN dprt# = 999: RETURN '---------------------- 6330 'RSTHERM = Radioshack 271-110 Thermistor IF D2400P# = 0 THEN D2400P# = .000001 IF D2400P# = 1000000 THEN D2400P# = 1000000.01# 6332 resis# = 10000 / ((1000000 / D2400P#) - 1) ' resis# = 4161 6334 Acoeff# = 25#: Bcoeff# = 3435# IF resis# < Acoeff# THEN resis# = Acoeff# 'LOCATE 21, 30: PRINT resis# 6336 nres# = (((LOG((resis#) / 10000)) / Bcoeff#)) 6337 tempyy# = (1 / (Acoeff# + 273.15)) + nres# 'LOCATE 20, 30: PRINT tempyy# 6338 dprt# = (1 / tempyy#) - 273.15 IF dprt# < -270 THEN dprt# = -273.15: IF dprt# > 500 THEN dprt# = 999 UNIT$ = "degC": hzcom% = 42 'GOSUB 8200 RETURN '------- 6340 ' degC to Deg F dprt# = ((1.8) * dprt#) + 32 UNIT$ = "degF": hzcom% = 42 RETURN '----------- '!!!!'------- END THERMISTOR SUBS -----!!!!!!!! '6341 available -------------- '6350 REM PRINT LT334TEMPC 10 MV PER DEG C USE THIS MODEL !!!!!!! 'DPRT# = (D2400P# * ((5 / 1000000) * .01)) - 273.15 UNIT$ = "degC": hzcom% = 42: TREF# = dprt# 'GOSUB 8200 RETURN ' ------------------------------------------------------- '6360 REM PRINT LM35TEMPF 10 MV PER DEG F dprt# = ((((D2400P# * ((5 / 10000)))) * (1.8)) + 32) UNIT$ = "degF": hzcom% = 42 'GOSUB 8200 RETURN ' ------------------------------------------------------- 6370 REM PRINT LM35TEMPC 10 MV PER DEG C dprt# = (D2400P# * ((5 / 10000))) UNIT$ = "degC": hzcom% = 42 'GOSUB 8200 RETURN ' ------------------------------------------------------- 6380 REM PRINT LM35TEMPFREF 10 MV PER DEG F TREF# = (D2400P# * ((5 / 10000))) dprt# = ((TREF# * (1.8)) + 32) UNIT$ = "degF": hzcom% = 42 TREF# = dprt# 'GOSUB 8200 RETURN ' ------------------------------------------------------- 6390 REM PRINT LM35TEMPCREF 10 MV PER DEG C dprt# = (D2400P# * ((5 / 10000))) UNIT$ = "degF": hzcom% = 42 TREF# = dprt# 'GOSUB 8200 RETURN ' ------============================---- '6400 REM PRINT LM334TEMPF 10 MV PER DEG C dprt# = ((((D2400P# * ((5 / 10000))) - 273.15) * (1.8)) + 32) UNIT$ = "degF": hzcom% = 42 'GOSUB 8200 RETURN ' ------------------------------------------------------- 6404 REM PRINT LT334TEMPCREF deg C with TREF in dec C dprt# = (D2400P# * ((5 / 10000))) - 273.15 TREF# = dprt# UNIT$ = "degC": hzcom% = 42 'GOSUB 8200 RETURN ' ------------------------------------------------------- '6407 REM PRINT LT334TEMPFREF deg F with TREF in dec C TREF# = (D2400P# * ((5 / 10000))) - 273.15 dprt# = ((TREF# * (1.8)) + 32) UNIT$ = "degF": hzcom% = 42 'GOSUB 8200 RETURN ' ---------------------------------------------------- 6410 'INPUTPWR RIN = rinput / 1000: VMAXIN = vinputmax 6411 dprt# = (DMPPM#(addr%, 1) * (VMAXIN / 1000000)) 'VOLTS hzcom% = 60 6412 horiz% = 5: UNIT$ = "Vin ": V = dprt#: chan% = 1: GOSUB 8200 dprt# = -(DMPPM#(addr%, 0) * (5 / 1000000)) / RIN: ' FULL SCALE 5V over R CUR = dprt# horiz% = 23: UNIT$ = "Ain " 6414 chan% = 0: GOSUB 8200 WATTS = V * CUR: horiz% = 52 dprt# = WATTS UNIT$ = "Win " 6416 prx$ = STR$(WATTS) + UNIT$ GOSUB 8190 'CAUTION !!!!!!!************** PIN = PIN + WATTS RETURN ' ------------------------------------------------------- 6420 'OUTPUTPWR ROUT = routput / 1000: VMAXOUT = voutputmax dprt# = (DMPPM#(addr%, 1) * (VMAXOUT / 1000000)) 'VOLTS 6422 hzcom% = 60 horiz% = 5: UNIT$ = "Vout": V = dprt#: chan% = 1: GOSUB 8200 6424 dprt# = (DMPPM#(addr%, 0) * (5 / 1000000)) / ROUT: CUR = dprt# horiz% = 23: UNIT$ = "Aout" chan% = 0: GOSUB 8200 6428 WATTS = V * CUR: horiz% = 52 UNIT$ = "Wout" dprt# = WATTS prx$ = STR$(WATTS) + UNIT$ GOSUB 8190 POUT = POUT + WATTS RETURN ' ------------------------------------------------------- 6430 'EFFICIENCY 'CH0=VOLTAGE 'CH1=CURRENT IF RSINDX% < 3 OR RSINDX% > 3 + linemax% THEN RETURN LOCATE RSINDX%, 42: IF PIN = 0 THEN GOTO 6432 ELSE 6435 6432 PRINT "Efficiency not defined "; : LOCATE RSINDX%, 1: PRINT " "; : GOTO 6438 6435 PRINT " " horiz% = 5 dprt# = CSNG(PIN): UNIT$ = "Win " GOSUB 8200 horiz% = 23 dprt# = CSNG(POUT): UNIT$ = "Wout" prx$ = STR$(WATTS) GOSUB 8190 LOCATE RSINDX%, 36: PRINT UNIT$; 'GOSUB 8190 EFFIC = (POUT / PIN) * 100: COLOR 12 dprt# = EFFIC: UNIT$ = "% " horiz% = 42 GOSUB 8200 LOCATE RSINDX%, 42: PRINT CSNG(EFFIC); " % "; : LOCATE RSINDX%, 55 PRINT "EFFICIENT "; COLOR 15 COLOR 15 LOCATE RSINDX%, 1: PRINT "EFF."; 6438 RETURN '----------------------------------- 'XDCR TYPES => PPM, VOLTS,LT334TEMP ,AMPS10 (.1V=10AMPS),AMPS1(.1V=1A),OHMS RETURN '------------------------------------------------- 6550 REM PRINT OHMS WITH RUNKNOWN ON TOP WRT 10KOHMS "OHMSTOP" dprt# = ((1000000 / D2400P#) - 1) * 10000 UNIT$ = "OHMS" 'GOSUB 8200 RETURN ' ------------------------------------------------------- 6600 'XTCXXXXX ALL TYPE THERMOCOUPLE ex = KTCWCJC ACTIVE !!! pr$ = "" IF MID$(XDUCERTYPE$, 1, 1) = "E" THEN TCTYPE% = 0: pr$ = "E": GOTO 6605 IF MID$(XDUCERTYPE$, 1, 1) = "J" THEN TCTYPE% = 1: pr$ = "J": GOTO 6605 IF MID$(XDUCERTYPE$, 1, 1) = "K" THEN TCTYPE% = 2: pr$ = "K": GOTO 6605 IF MID$(XDUCERTYPE$, 1, 1) = "R" THEN TCTYPE% = 3: pr$ = "R": GOTO 6605 IF MID$(XDUCERTYPE$, 1, 1) = "S" THEN TCTYPE% = 4: pr$ = "S": GOTO 6605 IF MID$(XDUCERTYPE$, 1, 1) = "T" THEN TCTYPE% = 5: pr$ = "T": GOTO 6605 6604 IF RSINDX% < 3 OR RSINDX% > linemax% + 3 THEN RETURN LOCATE RSINDX%, horiz% PRINT "NG="; XDUCERTYPE$; : GOTO 6690 6605 'IF ABS(D2400V#) > .1 THEN LOCATE RSINDX%, horiz%: PRINT "TCOR"; D2400V#: GOTO 6690 IF MID$(XDUCERTYPE$, 4, 1) = "W" THEN pr$ = pr$ + "W/CJC": GOTO 6610 IF MID$(XDUCERTYPE$, 4, 1) = "N" THEN pr$ = pr$ + "NOCJC": GOTO 6620 ' ?"TC$ERROR"; GOTO 6604 6610 'WITH CJC - TREF# MUST BE SPECIFIED IN DEG C 6611 IF LEN(pr$) > 6 THEN LOCATE RSINDX%, horiz%: PRINT pr$ 'LOCATE 29, 5: PRINT " "; : LOCATE 29, 5: PRINT "P="; PR$; GOSUB 4100: GOTO 6640 6620 ' THERMOCOUPLE WITHOUT CJC VREF# = 0: 6640 D2400V# = D2400P# * (5 / 1000000): D2400V# = D2400V# + VREF# IF RSINDX% < 3 OR RSINDX% > linemax% + 3 THEN RETURN LOCATE RSINDX%, horiz% IF ABS(D2400V#) > .1 THEN GOSUB 8160: PRINT "TC open": RETURN GOSUB 4140 IF (MID$(XDUCERTYPE$, 3, 1)) = "C" THEN dprt# = (TEMTP#): UNIT$ = "degC": GOTO 6680 IF (MID$(XDUCERTYPE$, 3, 1)) = "F" THEN dprt# = ((9 / 5) * (TEMTP#)) + 32: UNIT$ = "degF": GOTO 6680 GOTO 6604 6680 'UNIT$ = "degC" 'GOSUB 8200 ' PRINT IT IF RSINDX% < 3 OR RSINDX% > linemax% + 3 THEN RETURN 6690 LOCATE RSINDX%, 68 + 7: PRINT pr$; RETURN '-------------------------------------------- 6700 ' ontime ' measures well on time of somthing (a well, sprinkler,etc) in a day , dprt# = (D2400P# * ((5 / 1000000))) IF dprt# > c1% THEN 6720 ELSE 6740 6720 'Wellon: dprt# = (TIMER - TIMEON#(SINDX%, chan%)) + TOTALONTIME#(SINDX%, chan%) IF WELLON%(SINDX%, chan%) = c1% THEN 6760 TIMEON#(SINDX%, chan%) = TIMER WELLON%(SINDX%, chan%) = c1% GOTO 6760 6740 WELLOFF: dprt# = TOTALONTIME#(SINDX%, chan%) IF WELLON%(SINDX%, chan%) = c0% THEN 6760 TOTALONTIME#(SINDX%, chan%) = (TIMER - TIMEON#(SINDX%, chan%)) + TOTALONTIME#(SINDX%, chan%) WELLON%(SINDX%, chan%) = c0% 6760 UNIT$ = "Mins": dprt# = dprt# / 60 hzcom% = 42 'GOSUB 8200 RETURN ' ---------------------------------------------------- 6770 'LPT info PRINT " Custom cable to use with LPT port wires as follows..." PRINT "Pin on 25 pin Pin on 9 pin" PRINT " LPT port Dashub port" PRINT " 2 --- 4" PRINT " 3 --- 7" PRINT " 13 --- 8" PRINT " 15 --- 9" PRINT " 18 --- 5" PRINT " 20 --- 5 gnd" FOR n = 1 TO 3000: NEXT n RETURN ' ---------------------------------------------------- RETURN 7100 'Clear or RESET THE MIN AND MAX MATRIX TO +1e6 and -1e6 FOR abc% = 0 TO SINDXMAX% FOR abd% = 0 TO 1 DMAT#(abc%, abd% + c2%) = cn1m# DMAT#(abc%, abd% + c4%) = c1m# NEXT abd% NEXT abc% RETURN '------------------ 7200 'Make a dupe of the excel file so you can read it w/o crash LOCATE 3, 1 OPEN "jdcopy.bat" FOR OUTPUT AS #2 PRINT #2, "copy "; xlfile$; " aa-XL-bu.xls" CLOSE #2 SHELL "jdcopy.bat" GOSUB 8380 RETURN '---------- 8150 'THIS ADJUSTS THE FOR PAGE NUMBER ON CRT 'IF page% = 1 THEN PAGEMIN% = ((page% - 1) * LINEMAX%) 'PAGEMIN% = page% * ((LINEMAX%) + 1) 'IF page% <> 1 THEN PAGEMIN% = ((page% - 1) * (LINEMAX% + 1)) PAGEMIN% = ((page% - 1) * (linemax% + 1)) PAGEMAX% = PAGEMIN% + linemax% RSINDX% = (SINDX% - PAGEMIN%) + 3 IF diag% = 1 THEN 8155 ELSE 8157 8155 LOCATE linemax% - 1, 10 PRINT "page%="; page%; " PAGEMAX%="; PAGEMAX%; " PAGEMIN%="; PAGEMIN%; ";SINDX%="; SINDX%; " RSINDX% = "; RSINDX% PRINT "NUMPAGE="; NUMPAGE% REM BUBBLE GUM AND BANDAIDS, GOOD LUCK, JD 8157 RETURN '------------- 8160 IF RSINDX% < 3 OR RSINDX% > linemax% + 3 THEN RETURN LOCATE RSINDX%, horiz%: PRINT " "; : LOCATE RSINDX%, horiz% RETURN '---------------- 8164 8190 'Just print prx$ to screen IF RSINDX% < 3 OR RSINDX% > linemax% + 3 THEN RETURN IF addr% < 256 THEN LOCATE RSINDX%, 1: PRINT addr%; LOCATE RSINDX%, horiz%: PRINT " "; : LOCATE RSINDX%, horiz% PRINT prx$; RETURN '-------------------------------------------- 8200 REM GENERAL MAIN DATA PRINT ROUTINE (And write to files ROUTINEs) DMAT#(SINDX%, chan%) = dprt# 'OUTPUT IS HERE !!!!!!!!!!!!!!!!!! 8201 IF dprt# > DMAT#(SINDX%, chan% + 2) THEN DMAT#(SINDX%, chan% + 2) = dprt#: MAXTIME$(SINDX%, chan%) = LEFT$(DATE$, 5) + " " + TIME$ + " " 8202 IF dprt# < DMAT#(SINDX%, chan% + 4) THEN DMAT#(SINDX%, chan% + 4) = dprt#: MINTIME$(SINDX%, chan%) = LEFT$(DATE$, 5) + " " + TIME$ + " " 8203 DUNIT$(SINDX%, chan%) = UNIT$ 'SUMDMAT#(SINDX%, chan%) = DPRT# + SUMDMAT#(SINDX%, chan%) IF dprt# < DMAT#(SINDX%, chan%) THEN DMAT#(SINDX%, chan% + c2%) = dprt#: 'MINIMUM IF dprt# > DMAT#(SINDX%, chan%) THEN DMAT#(SINDX%, chan% + c2%) = dprt#: 'MAXIMUM 8205 IF diag% = 1 THEN GOSUB 4701'TEST PRINT BITS GOSUB 8150 8207 IF diag% = 1 THEN GOSUB 8350'test IF RSINDX% < 3 OR RSINDX% > linemax% + 3 THEN RETURN 'LOCATE 30, 30: PRINT slow% 8209 IF addr% < 256 THEN LOCATE RSINDX%, 1: PRINT addr%; 'LOCATE RSINDX%, horiz% + 13: PRINT " "; LOCATE RSINDX%, horiz%: PRINT " "; : LOCATE RSINDX%, horiz% IF ABS(dprt#) < .1 THEN GOTO 8210 PRINT CSNG(dprt#); : LOCATE RSINDX%, horiz% + 13: PRINT UNIT$; GOTO 8290 8210 IF ABS(dprt#) < .001 THEN GOTO 8230 PRINT CSNG(dprt# * 1000); LOCATE RSINDX%, horiz% + 13: PRINT "m"; UNIT$; : GOTO 8290 8230 PRINT CSNG(dprt# * 1000000); LOCATE RSINDX%, horiz% + 13: PRINT "u"; UNIT$; : GOTO 8290 8290 LOCATE RSINDX%, 42: PRINT STYPE$(SINDX%, 3); RETURN ' ------------------------------------------------------- 8350 'DIAGNOSTICS 8360 RETURN '-------------------------------- 8380 FOR n = 3 TO linemax% + 3'CLEAR PART OF SCREEN LOCATE n, 1 PRINT " "; NEXT n RETURN '---------------------------------- 8470 REM put numbers on screen TEST LINEOFFSET = -4 FOR y7% = 1 TO linemax% + 4: horiz% = 78 IF y7% > 9 THEN horiz% = 77 LOCATE y7%, horiz%: x7% = y7% IF y7% > 25 THEN x7% = 15 COLOR x7% PRINT y7%; NEXT y7% FOR y7 = 1 TO 77 LOCATE linemax% + LINEOFFSET + 1, y7 COLOR (7 + 3) IF y7 = 1 THEN PRINT y7; IF y7 / 3 = INT(y7 / 3) THEN PRINT y7; NEXT y7 COLOR 15 RETURN '------------------------------------------------------------- 8580 ' timer subroutine =>got a timer interupt 'Wait till the end of the current conversion then run the log stuff armtime% = 1 'LOCATE 71, 24 ' this statement gives an error ONLY when executed (BREAK) RETURN '--------------------------------------- 8600 ' about subroutine FOR na = 1 TO 16: LOCATE na, 1: GOSUB 8700: NEXT na LOCATE 4, 1 COLOR green% PRINT "Concept by Jon A Dutra on vacation in Hawaii over Christmas 2000" PRINT "No part of this program was written on LTC time or equipment" PRINT "Copyright (C) 2003 By Jon A Dutra, all rights reserved" PRINT "For updates see website or" PRINT "send e-mail to jad700@comcast.net / jdutra@linear.com / jad69@yahoo.com" COLOR red% PRINT PRINT "For help, see the example config file => "; COLOR pink%: PRINT "HUBCFG.TXT "; : COLOR red%: PRINT "on the website " COLOR green%: PRINT "www.lightlanding.com "; : COLOR white%: PRINT " (near the bottom of page)" 'FOR na = 4 TO 14: LOCATE na, 1: GOSUB 8700: NEXT na '8620 COLOR 13 'PURPLE COLOR white% in$ = UCASE$(INKEY$) timest3 = TIMER + 20: IF timest3 > 86390 THEN timest3 = 86390 8610 in$ = "": pielft = (timest3 - TIMER) LOCATE 12, 1: PRINT "Program will restart in "; 8613 PRINT USING "##"; pielft; : PRINT " "; 8614 PRINT "seconds or ..."; PRINT "Hit return to continue =>"; in$ = UCASE$(INKEY$) IF pielft < 0 THEN GOTO 8617 IF in$ = "" THEN 8610 8616 IF ASC(in$) = 13 THEN 8617 ELSE 8610 'IF ASC(in$) <> 13 THEN PRINT : PRINT in$; " ascii="; ASC(in$): GOTO 8610: ELSE 8617 GOTO 8610 8617 FOR na = 4 TO 16: LOCATE na, 1: GOSUB 8700: NEXT na RETURN '------------------- 8700 ' print a blank line PRINT " "; RETURN'-------------------- 8705 FOR abe% = 1 TO s 'add s spaces to html file PRINT #4, " "; : NEXT abe%: RETURN '-----------------=============================----------------------- 8710 'HTML FILE UPDATE ( WRITES OVER OLD FILE) 8711 OPEN HTMLFILE$ FOR OUTPUT AS #4 'print header row(s) here 8712 PRINT #4, "" PRINT #4, "" PRINT #4, "" PRINT #4, " DAS HUB html output page - by J.A.Dutra " PRINT #4, "" PRINT #4, "
"
PRINT #4, ""

'PRINT #4, ""
PRINT #4, ""
PRINT #4, " Written by JAD "
 PRINT #4, "Start time ="; datestart$; " "; timestart$
 PRINT #4, "Now   time ="; DATE$; " "; TIME$

 
PRINT #4, "Hit R in the running Basic program to reset min max data below ..."
PRINT #4, "SLT/CH |";
s = 2: GOSUB 8705
PRINT #4, " MAXIMUM "; : s = 3: GOSUB 8705: PRINT #4, "|"; : s = 1: GOSUB 8705
PRINT #4, "MINIMIM "; : s = 3: GOSUB 8705: PRINT #4, "|"; : s = 1: GOSUB 8705
PRINT #4, "DELTA  |"; : s = 3: GOSUB 8705
PRINT #4, "UNITS | ";
PRINT #4, "COMMENTS  ON  THIS SLOT / CHANNEL      |";

PRINT #4, "Dt/Time of Max |  Dt/Time of Min 
" ' -------- FOR abc% = 0 TO SINDXMAX% FOR abd% = 0 TO 1 GOTO 8706 'OLD METHOD pr$ = RTRIM$(LTRIM$(STR$(slot%(abc%)))): ' SLOT NUMBER s = 3 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 pr$ = "/ " + RTRIM$(LTRIM$(STR$(abd%))): ' CHANNEL NUMBER s = 5 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 pr$ = RTRIM$(LTRIM$(STR$(CSNG(DMAT#(abc%, abd% + c2%))))): ' CHANNEL 0 and 1 MAX DATA IF VAL(pr$) < -1E+19 THEN s = 14: GOSUB 8705: GOTO 87147: ' "skip " s = 14 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 87147 pr$ = RTRIM$(LTRIM$(STR$(CSNG(DMAT#(abc%, abd% + c4%))))): ' CHANNEL 0 and 1 MIN DATA IF VAL(pr$) > 1E+19 THEN s = 14: GOSUB 8705: GOTO 87148: ' "skip " s = 14 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 87148 pr$ = RTRIM$(LTRIM$(STR$(CSNG(DMAT#(abc%, abd% + c2%) - DMAT#(abc%, abd% + c4%))))) IF VAL(pr$) < -1E+19 OR VAL(pr$) = 0 THEN s = 14: GOSUB 8705: GOTO 87149: ' "skip " s = 14 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 87149 pr$ = RTRIM$(LTRIM$(DUNIT$(abc%, abd%))): ' CHANNEL 0 and 1 UNITS s = 6 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 pr$ = STYPE$(abc%, 3): s = 40 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705: ' COMMENT pr$ = RTRIM$(LTRIM$(MAXTIME$(abc%, abd%))) ' CHANNEL 0 and 1 MAXTIME s = 10 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 PRINT #4, " | "; pr$ = RTRIM$(LTRIM$(MINTIME$(abc%, abd%))) ' CHANNEL 0 and 1 MAXTIME s = 10 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 PRINT #4, "
"; : GOTO 8707 8706 'NEW METHOD pr$ = RTRIM$(LTRIM$(STR$(slot%(abc%)))): ' SLOT NUMBER s = 3 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 pr$ = "/ " + RTRIM$(LTRIM$(STR$(abd%))): ' CHANNEL NUMBER s = 5 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 pr$ = RTRIM$(LTRIM$(STR$(CSNG(DMAT#(abc%, abd% + c2%))))): ' CHANNEL 0 and 1 MAX DATA IF VAL(pr$) < -1E+19 THEN s = 14: pr$ = "" s = 14 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 pr$ = RTRIM$(LTRIM$(STR$(CSNG(DMAT#(abc%, abd% + c4%))))): ' CHANNEL 0 and 1 MIN DATA IF VAL(pr$) > 1E+19 THEN pr$ = "" s = 14 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 pr$ = RTRIM$(LTRIM$(STR$(CSNG(DMAT#(abc%, abd% + c2%) - DMAT#(abc%, abd% + c4%))))) IF VAL(pr$) < -1E+19 OR VAL(pr$) = 0 THEN pr$ = "" s = 14 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 pr$ = RTRIM$(LTRIM$(DUNIT$(abc%, abd%))): ' CHANNEL 0 and 1 UNITS s = 6 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 pr$ = STYPE$(abc%, 3): s = 40 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705: ' COMMENT pr$ = RTRIM$(LTRIM$(MAXTIME$(abc%, abd%))) ' CHANNEL 0 and 1 MAXTIME s = 10 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 PRINT #4, " | "; pr$ = RTRIM$(LTRIM$(MINTIME$(abc%, abd%))) ' CHANNEL 0 and 1 MAXTIME s = 10 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 PRINT #4, "
"; 8707 NEXT abd% ' NEXT CHANNEL NEXT abc% 'NEXT SLOT '---------- PRINT #4, "++++++++" PRINT #4, "vvvvvvvvvvv Instant measurement below vvvv "; TIME$; " "; DATE$; " (Hi from JD)" PRINT #4, "SLOT |"; s = 3: GOSUB 8705 PRINT #4, " CHANNEL 0"; : s = 3: GOSUB 8705: PRINT #4, "|"; : s = 1: GOSUB 8705 PRINT #4, "UNITS |"; : s = 4: GOSUB 8705 PRINT #4, "CHANNEL 1"; : s = 3: GOSUB 8705: PRINT #4, "|"; : s = 1: GOSUB 8705 PRINT #4, "UNITS |"; : s = 4: GOSUB 8705 PRINT #4, "COMMENTS AND NOTES ON SLOT
"; PRINT #4, "--------------------------------------------------------------------"; PRINT #4, "------------------------------" FOR abc% = 0 TO SINDXMAX% pr$ = RTRIM$(LTRIM$(STR$(slot%(abc%)))): ' SLOT NUMBER s = 7 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 FOR abd% = 0 TO 1 pr$ = RTRIM$(LTRIM$(STR$(CSNG(DMAT#(abc%, abd%))))): ' CHANNEL 0 and 1 data s = 18 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 pr$ = RTRIM$(LTRIM$(DUNIT$(abc%, abd%))): ' CHANNEL 0 and 1 UNITS s = 8 - LEN(pr$): PRINT #4, pr$; : GOSUB 8705 'IF LEN(pr$) = 0 THEN s = 9: GOSUB 8705 NEXT abd% ' NEXT CHANNEL 'pr$ = STYPE$(abc%, 3) + "
": PRINT #4, pr$: ' COMMENT pr$ = STYPE$(abc%, 3): PRINT #4, pr$: ' COMMENT NEXT abc% FOR abc% = 0 TO SINDXMAX% IF badconACCUM&(abc%) > c0% THEN PRINT #4, "# of bad conversions on slot ("; abc%; ")= "; badconACCUM&(abc%) NEXT abc% 'NEXT SLOT PRINT #4, "(Data from any bad conversions is ommited)" PRINT #4, "Delay ="; delay% PRINT #4, "HTML LOG="; HTMLFILE$; " Written"; HTMREC#; " Times" PRINT #4, "Num scan =; "; NUMSCAN# PRINT #4, "Num of A to D performed =; "; NUMMEAS# PRINT #4, "Num A to D / Num scans =; "; NUMMEAS# / NUMSCAN# timerend = TIMER IF timeneg% = 0 THEN SECTOT = (timerend - timerstart) + (daycnt * 86400) IF timeneg% = 1 THEN SECTOT = (86400 - timerstart) + timerend + (daycnt * 86400) PRINT #4, "Running for "; SECTOT; " seconds" PRINT #4, "timedout accum "; timedout; " times" PRINT #4, "timedoutmax "; timedoutmax; " seconds" PRINT #4, "timedout max slott "; timedoutslott%; " slot" PRINT #4, "timedout last SLOTT% = "; timedslot%; " " PRINT #4, "
red" '
black '
green '
blue PRINT #4, "
blue" '
purple PRINT #4, "
black" PRINT #4, "
" PRINT #4, "" PRINT #4, "
" PRINT #4, ""; HTMREC# = HTMREC# + 1 CLOSE #4 8749 LOCATE linemax% + 7, 19 PRINT "HTML LOG="; HTMLFILE$; " Written"; HTMREC#; " Times"; RETURN '------------------------------ 8750 XLON% = XLON% XOR 1 8752 LOCATE linemax% + 6, 1: COLOR 13: PRINT "X"; : COLOR 7: PRINT "L LOGGING IS "; IF XLON% = 1 THEN PRINT "ON |"; IF XLON% = 0 THEN PRINT "OFF|"; : COLOR 15 RETURN '------------------ 8753 LOCATE linemax% + 4, 1: COLOR pink%: PRINT "Pink"; : COLOR white%: PRINT " Keys are hot keys. Help="; : COLOR pink%: PRINT "H "; RETURN '--- 8755 'Here Once per scan red% = 12: blue% = 9: white% = 15: green% = 10: pink% = 13 GOSUB 8753 COLOR 6: LOCATE linemax% + 4, 1: IF TIMER > timerstart + 10 THEN PRINT "Copyright (C) 2003 by Jon A. Dutra - all rights rsrved"; : COLOR 15: IF TIMER > timerstart + 20 THEN GOSUB 8753 COLOR 12: LOCATE 2, 1 PRINT "SLOT"; : COLOR 9: PRINT "|": COLOR 12 LOCATE 2, 6: PRINT "CHANNEL 0"; : COLOR 9: PRINT "|": COLOR 12 LOCATE 2, 17: PRINT "UNITS"; : COLOR 9: PRINT "|": COLOR 12 LOCATE 2, 23: PRINT "CHANNEL 1"; : COLOR 9: PRINT "|": COLOR 12 LOCATE 2, 35: PRINT "UNITS"; : COLOR 9: PRINT "|": COLOR 12 LOCATE 2, 43: PRINT "COMMENTS AND NOTES ON THIS SLOT"; LOCATE linemax% + 4, 57: COLOR 15 PRINT " Tlog="; XLsamptime; "Sec."; LOCATE linemax% + 6, 71: PRINT "Log NOW="; : COLOR 13: PRINT "L"; : COLOR 15: LOCATE linemax% + 7, 71: PRINT "Exit="; : COLOR 13: PRINT ""; : COLOR 15 RETURN '------ 8760 HTMLON% = HTMLON% XOR 1 8762 LOCATE linemax% + 7, 1: COLOR 7: PRINT "H"; : COLOR 13 PRINT "T"; : COLOR 7: PRINT "ML LOG'N IS "; IF HTMLON% = 1 THEN PRINT "ON |"; IF HTMLON% = 0 THEN PRINT "OFF|"; COLOR 15 RETURN '-----------=================================================------------- 8770 IF slow% = c0% THEN slow% = c1% ELSE slow% = c0% RETURN'--------- 8772 timest2# = TIMER: 'SLOW MODE IF INT(timest2#) > 86395 THEN GOTO 8775 8773 ' IF INT(TIMER) <= INT(timest2#) THEN : GOTO 8773 'WASTED CYCLES 8775 RETURN '----------- 8810 'XL FILE UPDATE (APPENDS TO OLD FILE) xlfile!!!!!!!!!!!!!!!!! IF XLREC# > 100000 THEN PRINT "100000 records max in XL log": GOTO 8833 IF XLREC# <> 0 THEN 8811 'OPEN file [FOR mode1] [ACCESS access] [lock] AS [#]filenum [LEN=reclen] OPEN xlfile$ FOR OUTPUT LOCK WRITE AS #3 PRINT #3, "Created by the LTC DATA ACQUISITION HUB (DAS HUB) (HW and SW by J.A.Dutra in 2001-2003 )": CLOSE #3 8811 OPEN xlfile$ FOR APPEND AS #3 'print header row(s) here ... IF XLREC# > 0 THEN 8814 ' SKIP HEADER FOR ALL RECORDS PRINT #3, "Start Date = "; DATE$; " Start Time = "; TIME$ 'PRINT #3, "Date"; CHR$(9); "Time"; CHR$(9); PRINT #3, "SLOT & CHAN INFO=>"; CHR$(9); CHR$(9); FOR abf% = 0 TO SINDXMAX% ' FOR ALL THE SLOT INDEX ACROSS THE TOP FOR abg% = 0 TO 1 PRINT #3, "St"; slot%(abf%); "Ch"; abg%; CHR$(9); : ' "Units"; CHR$(9); NEXT abg%: NEXT abf% PRINT #3, " " ' ' COMMENTS .... PRINT #3, CHR$(9); "UNITS=>"; CHR$(9); FOR abf% = 0 TO SINDXMAX% FOR abg% = 0 TO 1 PRINT #3, DUNIT$(abf%, abg%); CHR$(9); NEXT abg%: NEXT abf% PRINT #3, " " PRINT #3, "Date"; CHR$(9); "Time"; CHR$(9); FOR abf% = 0 TO SINDXMAX% PRINT #3, STYPE$(abf%, 3); FOR abg% = 0 TO 1 PRINT #3, CHR$(9); NEXT abg%: NEXT abf% PRINT #3, " " '=========== 'finished XL header rows, RECORDS FOLLOW 8814 XLREC# = XLREC# + 1 PRINT #3, DATE$; CHR$(9); " "; PRINT #3, TIME$; CHR$(9); 'IF AVGXLON% = 0 THEN GOTO 8815 'IF AVGCnjdt# = 0 THEN GOTO 8815 ELSE GOTO 8820 '8815 'each slot and channel gets its own column FOR abc% = 0 TO SINDXMAX% FOR abd% = 0 TO 1 'IF AVGXLON% = 0 THEN PRINT #3, DMAT#(abc%, abd%); CHR$(9); XY$ = STR$(DMAT#(abc%, abd%)): GOSUB 8935 PRINT #3, XZ$; CHR$(9); '8816 IF AVGXLON% = 1 THEN IF AVGCnjdt# <> 0 THEN PRINT #3, SUMDMAT#(abc%, abd%) / AVGCnjdt#; : PRINT CHR$(9); '8817 AVGCnjdt# = 0: SUMDMAT#(abc%, abd%) = 0 NEXT abd%: NEXT abc% PRINT #3, " " 8830 CLOSE #3 8831 LOCATE linemax% + 6, 19 PRINT "XL LOG="; xlfile$; " Rec #"; XLREC#; 8833 RETURN'------------------------------ '=============================================== 8910 'MONTHLY XL FILE UPDATE (APPENDS ) w min max and ontime (may be %) 'midnight - COPY HTML FILE TO YESTRDAY.HTM 'make a one month excel file here , date in left column , min max in the next cols 'then clear the min max table for the next day IF XLREC2# <> 0 THEN 8925 8911 OPEN mofile2$ FOR OUTPUT LOCK WRITE AS #3 PRINT #3, "Created by the LTC DATA ACQUISITION HUB (DAS HUB) (HW and SW by J.A.Dutra Copyright 2001-2003 )": PRINT #3, "Start Date = "; DATE$; " Start Time = "; TIME$ PRINT #3, "This file has the Minimum/Maximum of each day" PRINT #3, " "; CHR$(9); CHR$(9); FOR abf% = 0 TO SINDXMAX% ' FOR ALL THE SLOT INDEX ACROSS THE TOP FOR abg% = 0 TO 1 PRINT #3, "Minimum"; CHR$(9); PRINT #3, "Maximum"; CHR$(9); NEXT abg%: NEXT abf% PRINT #3, " " PRINT #3, "SLOT & CHAN INFO=>"; CHR$(9); CHR$(9); 8912 FOR abf% = 0 TO SINDXMAX% ' FOR ALL THE SLOT INDEX ACROSS THE TOP FOR abg% = 0 TO 1 PRINT #3, "Slt"; slot%(abf%); "Ch"; abg%; CHR$(9); : ' "Units"; CHR$(9); PRINT #3, "Slt"; slot%(abf%); "Ch"; abg%; CHR$(9); : ' "Units"; CHR$(9); NEXT abg%: NEXT abf% PRINT #3, " " ' ' COMMENTS .... PRINT #3, CHR$(9); "UNITS=>"; CHR$(9); FOR abf% = 0 TO SINDXMAX% FOR abg% = 0 TO 1 8913 PRINT #3, DUNIT$(abf%, abg%); CHR$(9); PRINT #3, DUNIT$(abf%, abg%); CHR$(9); NEXT abg%: NEXT abf% PRINT #3, " " PRINT #3, "Date"; CHR$(9); "Time"; CHR$(9); FOR abf% = 0 TO SINDXMAX% PRINT #3, STYPE$(abf%, 3); FOR abg% = 0 TO 1 8914 PRINT #3, CHR$(9); NEXT abg%: NEXT abf% PRINT #3, " ": CLOSE #3 '=========== 'finished XL header rows, RECORDS FOLLOW 8925 OPEN mofile2$ FOR APPEND AS #3 XLREC2# = XLREC2# + 1 PRINT #3, YESTERDAY$; CHR$(9); " "; : 'FIX PRINT #3, "11:59:59"; CHR$(9); FOR abc% = 0 TO SINDXMAX% FOR abd% = 0 TO 1 XY$ = STR$(CDBL(DMAT#(abc%, abd% + c4%))): GOSUB 8935 PRINT #3, XZ$; CHR$(9); : XY$ = STR$(CDBL(DMAT#(abc%, abd% + c2%))): GOSUB 8935 PRINT #3, XZ$; CHR$(9); : 'PRINT #3, STR$(DMAT#(abc%, abd% + c2%)); CHR$(9); 'IF abc% = 1 THEN : IF abd% = 1 THEN : LOCATE 20.2: PRINT STR$(DMAT#(abc%, abd% + c4%)) NEXT abd% NEXT abc% PRINT #3, " " 8930 CLOSE #3 LOCATE linemax% + 8, 19 8932 PRINT "XL Monthly LOG="; mofile2$; " Rec #"; XLREC2#; 8933 RETURN'------------------------------ 8935 'FIX that E in # are D , input XY$ out XZ$ XZ$ = "" FOR n% = 1 TO LEN(XY$) XW$ = MID$(XY$, n%, 1) IF XW$ = "D" THEN XW$ = "E" XZ$ = XZ$ + XW$ NEXT n% RETURN '-------- 8950 REM error trap on exit LOCATE 16, 1 PRINT "Err 8950 address ="; addr%; "data="; d2400; "meas#="; NUMSCAN#; "ERROR#="; ERR RETURN '------------------------------------------------------ 8970 LOCATE 24, 1: COLOR 12: 'PRINT "ERROR !8970!!!!!!!!!!!!!!"; enu = ERR IF enu = 70 THEN PRINT " XL FILE OPEN BY ANOTHER APPLICATION, DATA NOT RECORDED"; PRINT "ERROR !! addr%="; addr%; "data="; d2400; "meas#="; NUMSCAN#; : PRINT "ERROR#="; ERR IF enu = 70 THEN PRINT "Excel file is most likely open by another application." IF enu = 9 THEN PRINT "Subscript out of range" IF enu = 76 THEN PRINT "Path not found" IF enu = 68 THEN PRINT "Device unavilable" IF enu = 53 THEN PRINT " file NOT found. x$="; x$ IF enu = 5 THEN PRINT " Decrease linemax to 14, or" IF enu = 5 THEN PRINT "increase Qbasic window size by right clicking on the program=>properties" IF enu = 6 THEN PRINT "OVERFLOW !!!!!!!!": PRINT "SUMCnjdt#="; SUMCnjdt#, "avreagexl%="; averagexl% IF ERL = 8711 THEN PRINT "HTML FILE ERROR ! FILENAME =>"; HTMLFILE$; "<===" IF ERL = 8810 THEN PRINT "XL FILE ERROR ! FILENAME =>"; xlfile$; "<===" IF ERL = 8810 OR ERL = 8711 THEN PRINT "Does the folder exist ?" IF ERL = 844 THEN PRINT " " PRINT "RSINDX%, horiz%"; RSINDX%, horiz%; "<===" PRINT "Error is on line"; ERL; " Err # ="; enu PRINT IF ERL = 23 THEN PRINT "FILE "; x$; " DOES NOT EXIST IN CURRENT DIRECTORY !!": PRINT PRINT "SINDX%"; SINDX% FOR y4 = 1 TO 3 LOCATE 12, 3 PRINT CHR$(7): FOR m = 0 TO 14: GOSUB 3000: NEXT m: REM Print 3 bells in 50 uSec ish NEXT y4 REM PRINT "???? HOW LONG DID THE BELLS TAKE ?????" GOTO 9099 9000 REM NORMAL END PRINT y4: COLOR 10 REM CLOSE STUFF HERE FOR n = 14 TO 24: LOCATE n, 1 GOSUB 8700 NEXT n timenow$ = TIME$ FOR n = 1 TO 7 STEP 3 sec = VAL(MID$(timestart$, n, 2)) se2 = VAL(MID$(timenow$, n, 2)) IF n = 1 THEN sec = sec * 3600: se2 = se2 * 3600 9004 IF n = 4 THEN sec = sec * 60: se2 = se2 * 60 IF n = 7 THEN secfin = se2: secstart = sec NEXT n timerend = TIMER IF timeneg% = 0 THEN SECTOT = (timerend - timerstart) + (daycnt * 86400) IF timeneg% = 1 THEN SECTOT = (86400 - timerstart) + timerend + (daycnt * 86400) 'SECTOT = timerend - timerstart 'IF SECTOT < 0 THEN SECTOT = SECTOT + 86400 LOCATE 14, 1 PRINT PRINT "Starting date = "; datestart$; " Ending Date = "; DATE$ 9007 PRINT "Start time ="; timestart$; " End time = "; TIME$ 9012 PRINT "Running time was "; SECTOT; " Seconds AKA "; SECTOT / 3600; " Hours" PRINT "Number of samples was ="; NUMMEAS#; " Number of complete scans="; NUMSCAN# IF ((MINTOT# * 60) + SECTOT) = 0 THEN 9099 IF SECTOT = 0 AND MINTOT# = 0 THEN GOTO 9099 SS = ((NUMMEAS#) / ((MINTOT# * 60) + SECTOT)) PRINT "This calcs to "; CSNG(SS); " Samples/Sec" IF SS = 0 THEN 9099 PRINT "Average time between samples ="; CSNG(1 / SS); " Seconds or "; CSNG(1000 / SS); " milliseconds" PRINT 9050 PRINT "Memory info => String Space ="; FRE("") PRINT "Unused Stack Space="; FRE(-2) PRINT "Array Space="; FRE(-1) PRINT "page%="; page%; " PAGEMAX%="; PAGEMAX%; " PAGEMIN%="; PAGEMIN%; ";SINDX%="; SINDX%; " RSINDX% = "; RSINDX% PRINT "NUMPAGE="; NUMPAGE% PRINT "rinput="; rinput; "vinput="; vinputmax PRINT "routput="; routput; "voutput="; voutputmax 9099 CLOSE #1: CLOSE #2 9100 END