DECLARE SUB multip (volts3!, multiplier!) DECLARE SUB sbeTempConvert (freq1!, sbetemp!) DECLARE SUB sbeCondConvert (freq2!, sbeCond!) DECLARE SUB o2sat (sbetemp!, sbesalt!, oxsat!) DECLARE SUB readnav (gpsLat$, gpsLon$, postime$, declat!, declon!, TimeGPS$, SignalGPS$, PortGPS$, LocalTime$, DateGPS$) DECLARE SUB readfluor (Fluor!, PortDevice$) DECLARE SUB calcSalinity (sbetemp!, sbeCond!, sbesalt!) DECLARE SUB fluordoor (volts!, door!) DECLARE SUB bell () DECLARE SUB setpctime (nav$, TimeGPS$, LocalTime$) '$INCLUDE: 'kdac500.bi' '---------------------------------------------------------------------- '04/15/96 cud9604.bas 'A program to log data using Keithley 575 'Calibration value for Conductivity/Temperature from 04/93 SeaBird '03/94 added 2nd Turner Fluorometer on Com2 - cudls394 '04/95 added UV light measurement on Ch4 ON ERROR GOTO HandleError CLS COLOR 14, 1 LOCATE 2, 10 PRINT "Welcome to the CalCOFI Underway Data Logging System" LOCATE 3, 5 PRINT "Marine Life Research Group/Scripps Institution of Oceangraphy" LOCATE 6, 5 INPUT "Want to read a short application note ? ", R$ IF R$ = "Y" OR R$ = "y" THEN PRINT "A data-logging routine to use on CalCOFI cruises. Ver 1.5." PRINT "Words and music by Lowell/Wilkinson/Ram¡rez. Written in QuickBasic 4.5," PRINT "and utilizing Keithley KDAC calls." PRINT PRINT "This version assumes that Navigation information originates at a GPS" PRINT "Default serial port is COM2, baud=4800, no parity, 8-bit data word," PRINT "1-bit stop word. ProComm or similar software may be used to examine nav info." PRINT "It may be necessary to disable any existing serial ports." PRINT "The sub program that reads the navigation device output expects a string" PRINT "that includes lat, lon, and gmt. It reads the GPS latitude, longitude," PRINT "and position time (GMT) If navigation string is different the routine should be" PRINT "edited appropriately, or the Magnavox output reprogrammed." PRINT PRINT "Frequency and voltage instrumentation outputs are read by a Keithley DAS," PRINT "Model 575. The PIM-1 card that reads frequencies expects TTL level inputs" PRINT "on channels 1-7. Channel 0 will read low-level signals. Analogue inputs can" PRINT "be read in single-ground or differential modes, and signal input voltages" PRINT "may range from -10 to 10 vdc. The range may be changed if more resolution" PRINT "is desired for low magnitude signals. A/D is 12-bit (ie. the 20 volt range," PRINT "-10 to +10 volts is divided by 2^12; resolution then = 20vdc/4096). " PRINT "See documentaion in Keithley manuals for a discussion of range changes etc." PRINT PRINT "if the range is changed make certain to update and save the new Config.tbl file" LOCATE 25, 25: COLOR 14, 0: PRINT "press any key to continue" DO: LOOP UNTIL INKEY$ <> "" END IF IF UCASE$(R$) = "Y" THEN CLS COLOR 14, 1 LOCATE 2, 10 PRINT "Welcome to the CalCOFI Underway Data Logging System" LOCATE 3, 5 PRINT "Marine Life Research Group/Scripps Institution of Oceangraphy" '------------------------------------------------------------------------- 'CHANNEL Assignments are as follows: 'chan0=fluorometer door 'chan1=fluorometer signal 'chan2=PAR 'chan3=flourometer multiplier 'chan4=UVb 'chan5=Open, sometimes assigned to Vernet's Fluorometer 'freq1=seabird temp specific to serial #595 'freq2=seabird conductivity specific to serial #194 '---------------------------------------------------------------------------- config$ = "LASTNTRY" OPEN config$ FOR INPUT AS #2 INPUT #2, numfile%, printing$, PortGPS$, SignalGPS$, ExtraDevice$, PortDevice$, Cruise$, maxscan, maxrec tempstr$ = "" LOCATE 7, 5: PRINT "Enter the Cruise name (YYMM): " LOCATE 7, 55: INPUT ; tempstr$ IF tempstr$ <> "" THEN Cruise$ = tempstr$ tempstr$ = "" tempstr$ = STR$(numfile%) LOCATE 8, 5: PRINT "Last data file was" + tempstr$ + " modify or ENTER to continue " LOCATE 8, 55: INPUT ; tempstr$ IF tempstr$ <> "" THEN numfile% = VAL(tempstr$) - 1 LOCATE 9, 5: PRINT "Is GPS Signal available : " LOCATE 9, 55: INPUT ; tempstr$ IF tempstr$ <> "" THEN SignalGPS$ = UCASE$(tempstr$) IF SignalGPS$ = "Y" THEN tempstr$ = "" LOCATE 10, 5: PRINT "GPS Port number (1/2) : " LOCATE 10, 55: INPUT ; tempstr$ IF tempstr$ = "1" OR tempstr$ = "2" THEN PortGPS$ = tempstr$ END IF tempstr$ = "" LOCATE 11, 5: PRINT "Number of records per file, x60 : " LOCATE 11, 55: INPUT ; tempstr$ IF tempstr$ <> "" THEN maxrec = VAL(tempstr$) tempstr$ = "" LOCATE 12, 5: PRINT "Number of scan per record, x43 : " LOCATE 12, 55: INPUT ; tempstr$ IF tempstr$ <> "" THEN maxscan = VAL(tempstr$) tempstr$ = "" LOCATE 13, 5: PRINT "Extra device connected (Vernet's Fluorometer) " LOCATE 13, 55: INPUT ; tempstr$ IF tempstr$ <> "" THEN ExtraDevice$ = UCASE$(tempstr$) IF ExtraDevice$ = "Y" THEN tempstr$ = "" LOCATE 14, 5: PRINT "Extra Device Port number (1/2) : " LOCATE 14, 55: INPUT ; tempstr$ IF tempstr$ = "1" OR tempstr$ = "2" THEN ExtraDevice$ = tempstr$ END IF tempstr$ = "" LOCATE 15, 5: PRINT "Do you want backup printouts during logging (Y/N) : " LOCATE 15, 55: INPUT ; tempstr$ IF (tempstr$ <> "") THEN printing$ = UCASE$(tempstr$) tempstr$ = "" LOCATE 16, 5: PRINT "Do you want backup data during logging (Y/N) : " LOCATE 16, 55: INPUT ; tempstr$ IF UCASE$(tempstr$) = "Y" OR UCASE$(tempstr$) = "N" THEN Outputfile$ = UCASE$(tempstr$) IF Outputfile$ = "Y" THEN tempstr$ = "" LOCATE 17, 5: PRINT "Drive to backup data (eg. A:\) : " LOCATE 17, 55: INPUT ; tempstr$ IF tempstr$ <> "" THEN Drive$ = tempstr$ END IF recnum = 0 CLS SCREEN 9, 0, 1, 1 WIDTH (80) VIEW (32, 1)-(600, 210), , 7 WINDOW (0, 0)-(1440, 1000) COLOR 7, 0 FOR spot% = 0 TO 1440 STEP 60 LINE (spot%, 0)-(spot%, 15) NEXT spot% FOR spot% = 0 TO 1440 STEP 60 LINE (spot%, 990)-(spot%, 1000) NEXT spot% LOCATE 16, 3: PRINT "0000" LOCATE 16, 39: PRINT "1200" LOCATE 16, 74: PRINT "2359" LOCATE 16, 8: COLOR 12, 0 'Red PRINT "Temp" LOCATE 16, 14: COLOR 11, 0 'Light Cyan PRINT "Sal" LOCATE 16, 19: COLOR 10, 0 'Green PRINT "Fluor" LOCATE 16, 26: COLOR 15, 0 'Bright White PRINT "ParV" COLOR 12, 0 LOCATE 1, 1: PRINT "22" LOCATE 8, 1: PRINT "17" LOCATE 15, 1: PRINT "12" FOR spot% = 1 TO 1439 STEP 40 LINE (spot%, 100)-(spot% + 10, 100), 4 LINE (spot%, 300)-(spot% + 10, 300), 4 LINE (spot%, 500)-(spot% + 10, 500), 4 LINE (spot%, 700)-(spot% + 10, 700), 4 LINE (spot%, 900)-(spot% + 10, 900), 4 NEXT spot% FOR spot% = 20 TO 1420 STEP 40 LINE (spot%, 200)-(spot% + 10, 200), 4 LINE (spot%, 400)-(spot% + 10, 400), 4 LINE (spot%, 600)-(spot% + 10, 600), 4 LINE (spot%, 800)-(spot% + 10, 800), 4 NEXT spot% FOR spot% = 1 TO 1439 STEP 40 LINE (spot%, 200)-(spot% + 10, 200), 4 LINE (spot%, 400)-(spot% + 10, 400), 4 LINE (spot%, 600)-(spot% + 10, 600), 4 LINE (spot%, 800)-(spot% + 10, 800), 4 NEXT spot% FOR spot% = 1 TO 1439 STEP 40 LINE (spot%, 250)-(spot% + 10, 250), 2 LINE (spot%, 500)-(spot% + 10, 500), 2 LINE (spot%, 750)-(spot% + 10, 750), 2 NEXT spot% COLOR 11, 0 LOCATE 1, 77: PRINT "34" LOCATE 8, 77: PRINT "33" LOCATE 15, 77: PRINT "32" COLOR 10, 0 LOCATE 1, 80: PRINT "2" LOCATE 3, 80: PRINT "1.5" LOCATE 8, 80: PRINT "1.0" LOCATE 11, 80: PRINT ".5" LOCATE 16, 80: PRINT "0" LOCATE 18, 5: COLOR 14, 0 CALL kdinit(BASIC.) COLOR 14, 0 LOCATE 17, 3: PRINT Cruise$; " ", DATE$, " ", TIME$, " " COLOR 11, 0 LOCATE 18, 2: PRINT " Lat Lon door signl mult f0 f1 Temp Sal PAR Fluor Sat UV-B" 'The variables are: declat!; declon!; door; flusignal; multiplier; freq1!; freq2!; sbetemp; sbesalt; parv; CalcFluor!; oxsat COLOR 7, 0 ' LOCATE 21, 1: PRINT "Scan volt0 volt1 volt3 f0kHz f1kHz PARv UV-B Ch5 Fluor |F5 Mark |F10 QUIT"; COLOR 14, 0 allspots% = 0 tempdoor! = 0 tempmult! = 0 DO exiit$ = "False" DO numfile% = numfile% + 1 numfile$ = STR$(numfile%) lengthNumFile = LEN(numfile$): numfile$ = MID$(numfile$, 2, lengthNumFile - 1) monthNum$ = LEFT$(DATE$, 2) IF monthNum$ = "01" THEN Month$ = "Jan" IF monthNum$ = "02" THEN Month$ = "Feb" IF monthNum$ = "03" THEN Month$ = "Mar" IF monthNum$ = "04" THEN Month$ = "Apr" IF monthNum$ = "05" THEN Month$ = "May" IF monthNum$ = "06" THEN Month$ = "Jun" IF monthNum$ = "07" THEN Month$ = "Jul" IF monthNum$ = "08" THEN Month$ = "Aug" IF monthNum$ = "09" THEN Month$ = "Sep" IF monthNum$ = "10" THEN Month$ = "Oct" IF monthNum$ = "11" THEN Month$ = "Nov" IF monthNum$ = "12" THEN Month$ = "Dec" IF LEN(numfile$) = 1 THEN numfile$ = "00" + numfile$ IF LEN(numfile$) = 2 THEN numfile$ = "0" + numfile$ filename$ = "Dat" + Month$ + MID$(DATE$, 4, 2) + "." + numfile$ IF (printing$ = "Y") THEN LPRINT LPRINT filename$; " "; DATE$ LPRINT " System Position Nav Fluorometer Sbe sensors Par VFl O2 " LPRINT " time lat lon GMT door signl rng temp salt v Sat" LPRINT "--------------------------------------------------------------------------------" END IF CLOSE #2 OPEN config$ FOR OUTPUT AS #2 WRITE #2, numfile%, printing$, PortGPS$, SignalGPS$, ExtraDevice$, PortDevice$, Cruise$, maxscan, maxrec CLOSE #2 CALL readnav(gpsLat$, gpsLon$, postime$, declat!, declon!, TimeGPS$, SignalGPS$, PortGPS$, LocalTime$, DateGPS$) 'LOCATE 10, 12: PRINT "passed 1st readnav" OPEN filename$ FOR APPEND ACCESS READ WRITE AS #2' OPEN Cruise$ + ".mrk" FOR APPEND ACCESS READ WRITE AS #3 mark$ = " " IF Outputfile$ = "Y" THEN OPEN Drive$ + filename$ FOR APPEND ACCESS READ WRITE AS #10 OPEN Drive$ + Cruise$ + ".mrk" FOR APPEND ACCESS READ WRITE AS #11 END IF DO ' This DO stores recnum records on EACH file recnum = recnum + 1 COLOR 14, 0 LOCATE 17, 57 PRINT filename$; " rec:"; recnum first$ = "true" change$ = "false" scancnt = 0 scan = 1 TempV0! = 0! tempdoor! = 0 tempmult! = 0 sumvolts0! = 0 sumvolts1! = 0 sumvolts2! = 0 sumvolts3! = 0 sumhertz1! = 0 sumhertz2! = 0 sumvolts4! = 0 sumvolts5! = 0 SumCalcFluor! = 0 DO WHILE ((scan <= maxscan) AND change$ = "false") ON KEY(10) GOSUB exitnow KEY(10) ON ON KEY(5) GOSUB MARKOUT KEY(5) ON COLOR 14, 0 LOCATE 17, 3: PRINT Cruise$; " "; DATE$; " "; TIME$; " " COLOR 7, 0 DO ' Temperature CALL fgread("freq1", F.250K, VARSEG(hertz1!), VARPTR(hertz1!), C.FREQ, NT) LOOP UNTIL hertz1! < 10500 DO ' Salinity CALL fgread("freq2", F.250K, VARSEG(hertz2!), VARPTR(hertz2!), C.FREQ, NT) LOOP UNTIL hertz2! < 18500 DO 'Door channel CALL fgread("chan0", NONE, VARSEG(volts0!), VARPTR(volts0!), C.VOLTS, NT) LOOP UNTIL volts0! < 10 DO ' Fluor Signal CALL fgread("chan1", NONE, VARSEG(volts1!), VARPTR(volts1!), C.VOLTS, NT) LOOP UNTIL volts1! < 10 DO 'ParV CALL fgread("chan2", NONE, VARSEG(volts2!), VARPTR(volts2!), C.VOLTS, NT) LOOP UNTIL volts2! < 5 DO ' Multiplier CALL fgread("chan3", NONE, VARSEG(volts3!), VARPTR(volts3!), C.VOLTS, NT) LOOP UNTIL volts3! < 5 DO ' Open CALL fgread("chan4", NONE, VARSEG(volts4!), VARPTR(volts4!), C.VOLTS, NT) LOOP UNTIL volts4! < 5 DO ' Open CALL fgread("chan5", NONE, VARSEG(volts5!), VARPTR(volts5!), C.VOLTS, NT) LOOP UNTIL volts5! < 5 LOCATE 23, 40: COLOR 10, 0: PRINT "SIGNAL ON ": COLOR 14, 0 'hertz1 = 8678 + scancnt * 34 'hertz2 = 9503.4 + scancnt * 7 'volts0! = .8 'volts1! = .9 'volts2! = 5 'volts3! = 4.961 'volts4! = 4 'volts5! = 5 CALL multip(volts3!, multiplier!) CALL fluordoor(volts0!, door!) IF (tempdoor! <> door! OR tempmult! <> multiplier!) AND first$ = "false" THEN change$ = "true" scan = scan - 1 GOTO 70 END IF scancnt = scancnt + 1 CalcFluor! = volts1! / (door! * multiplier!) LOCATE 20, 1: COLOR 7, 0 PRINT USING " Scan### "; scan; PRINT USING " #.##"; volts0; PRINT USING " #.##"; volts1!; volts3!; PRINT USING " ##.##"; hertz1! / 1000; hertz2! / 1000; PRINT USING " "; PRINT USING "##.##"; volts2!; IF volts4! < 0 THEN volts4! = 0 IF volts5! < 0 THEN volts5! = 0 PRINT USING " #.####"; CalcFluor!; COLOR 7, 0 sumvolts0! = sumvolts0! + volts0! sumvolts1! = sumvolts1! + volts1! sumvolts2! = sumvolts2! + volts2! sumvolts3! = sumvolts3! + volts3! sumvolts4! = sumvolts4! + volts4! sumvolts5! = sumvolts5! + volts5! sumhertz1! = sumhertz1! + hertz1! sumhertz2! = sumhertz2! + hertz2! Sumdoor! = Sumdoor! + door! Summult! = Summult! + multiplier! SumCalcFluor! = SumCalcFluor! + CalcFluor! tempdoor! = door! tempmult! = multiplier! first$ = "false" IF door! = 1! AND multiplier! = 100! AND volts1! > .99 THEN COLOR 4, 0 LOCATE 23, 50 PRINT "REDUCE SENSITIVITY" CALL bell SOUND 4000, .2 LOCATE 23, 50 PRINT " " END IF IF door! = 31.6 AND multiplier! = 1! AND volts1! < .2 THEN COLOR 4, 0 LOCATE 23, 50 PRINT "INCREASE SENSITIVITY" CALL bell SOUND 4000, .2 LOCATE 23, 50 PRINT " " END IF 60 scan = scan + 1 LOOP 70 'AVERAGING the records by scan (scan<=maxscan) IF change$ = "false" THEN scan = scan - 1 fludoor = sumvolts0! / scan: flusignal = sumvolts1! / scan: flumultiplier = sumvolts3! / scan: CalcFluor! = SumCalcFluor! / scan parv = sumvolts2! / scan: UVb = sumvolts4! / scan: freq1 = sumhertz1! / scan: freq2 = sumhertz2! / scan: ch5v = sumvolts5! / scan CALL sbeTempConvert(freq1!, sbetemp) CALL sbeCondConvert(freq2!, sbeCond) CALL calcSalinity(sbetemp, sbeCond, sbesalt) CALL o2sat(sbetemp, sbesalt, oxsat) postime$ = "" 'Maria's Fluorometer or an Extra Device call IF UCASE$(ExtraDevice$) = "Y" THEN CALL readfluor(Fluor!, PortDevice$) ELSE 'when Maria's Fluorometer is offline Fluor! = -9! Fluor! = -9 END IF LOCATE 23, 40: COLOR 2, 0: PRINT "SIGNAL ON ": COLOR 14, 0: CALL bell CALL readnav(gpsLat$, gpsLon$, postime$, declat!, declon!, TimeGPS$, SignalGPS$, PortGPS$, LocalTime$, DateGPS$) 'LOCATE 13, 24: PRINT "passed 2nd readnav" 'parv = parv * 100 'IF TimeGPS$ = "" THEN ' TimeGPS$ = TIME$ 'END IF LocalTime$ = TIME$ IF ch5v < 0 THEN ch5v = 0! 'MERV = fluor! 'IF (sbetemp! < 5) OR (sbesalt! < 29) THEN GOSUB replugme LOCATE 19, 2: COLOR 14, 0 ' Lat Lon door signl mult f0 f1 Temp Sal PAR Fluor Sat UV-B" PRINT USING "##.## ###.## ##.## #.## ### ##.## ##.## ##.## ##.## #.## #.#### ###"; declat!; declon!; door!; flusignal; multiplier!; freq1!; freq2!; sbetemp; sbesalt; parv; CalcFluor!; oxsat IF printing$ = "Y" THEN LOCATE 23, 1: PRINT "PRINTING" LPRINT USING "\ \\ \\ \\ \ ##.## #.## \ \##.## ##.### ##.## #.## ### #### ###"; LocalTime$; gpsLat$; gpsLon$; TimeGPS$; door!; flusignal; multiplier!; sbetemp; sbesalt; parv; CalcFluor!; oxsat LOCATE 23, 1: PRINT " " END IF PRINT #2, USING "&, &, ##.###, ###.###, &, &, ##.##, ##.###, ###.#, ###.##, ##.##, ##.###, ##.###, ##.###, ###.###, ###.###, ##.###, ###.##, &"; LocalTime$; DATE$; declat!; declon!; TimeGPS$; DateGPS$; door!; flusignal; multiplier!; parv; _ freq1!; freq2!; sbetemp; sbesalt; Fluor!; UVb; CalcFluor!; oxsat; mark$ 'LocalTime$; DATE$; declat!; declon!; TimeGPS$; DateGPS$; door!; flusignal; multiplier!; parv; freq1!; freq2!; sbetemp; sbesalt; Fluor!; UVb; CalcFluor!; oxsat; mark$ IF mark$ = "*" THEN PRINT #3, USING "&, &, ##.###, ###.###, &, &, ##.##, ##.###, ###.#, ###.##, ##.##, ##.###, ##.###, ##.###, ###.###, ###.###, ##.###, ###.##, &"; LocalTime$; DATE$; declat!; declon!; TimeGPS$; DateGPS$; door!; flusignal; multiplier!; parv; _ freq1!; freq2!; sbetemp; sbesalt; Fluor!; UVb; CalcFluor!; oxsat; mark$ END IF IF Outputfile$ = "Y" THEN PRINT #10, USING "&, &, ##.###, ###.###, &, &, ##.##, ##.###, ###.#, ###.##, ##.##, ##.###, ##.###, ##.###, ###.###, ###.###, ##.###, ###.##, &"; LocalTime$; DATE$; declat!; declon!; TimeGPS$; DateGPS$; door!; flusignal; multiplier!; parv; _ freq1!; freq2!; sbetemp; sbesalt; Fluor!; UVb; CalcFluor!; oxsat; mark$ 'LocalTime$; DATE$; declat!; declon!; TimeGPS$; DateGPS$; door!; flusignal; multiplier!; parv; freq1!; freq2!; sbetemp; sbesalt; Fluor!; UVb; CalcFluor!; oxsat; mark$ IF mark$ = "*" THEN PRINT #11, USING "&, &, ##.###, ###.###, &, &, ##.##, ##.###, ###.#, ###.##, ##.##, ##.###, ##.###, ##.###, ###.###, ###.###, ##.###, ###.##, &"; LocalTime$; DATE$; declat!; declon!; TimeGPS$; DateGPS$; door!; flusignal; multiplier!; parv; _ freq1!; freq2!; sbetemp; sbesalt; Fluor!; UVb; CalcFluor!; oxsat; mark$ END IF END IF COLOR 12, 0 mark$ = " " 'defining coordinates for plotting the current values dectime% = ((VAL(LEFT$(TIME$, 2)) * 60) + VAL(MID$(TIME$, 4, 2))) graphtem% = INT(sbetemp! * 100) - 1200 graphsal% = INT((sbesalt! - 32) * 500) graphparv% = INT(parv! * 500) 'graphs% = INT((sbesalt! - 30) * 200) for 30 -35 range 'graphc% = INT((flusignal / door * multiplier) * (1000 / 2)) graphfluor1% = INT(CalcFluor! * 100000) graphfluor2% = (INT(Fluor! * 10)) allspots% = allspots% + 1 '12 is red - temp COLOR 12, 0 IF grapht% > 999 THEN grapht% = 999 PSET (dectime%, graphtem%) '11 is light cyan - salinity COLOR 11, 0 IF graphs% > 999 THEN graphs% = 999 PSET (dectime%, graphsal%) '5 is cyan - ParV COLOR 15, 0 IF graphparv% > 999 THEN graphparv% = 999 IF graphparv% < 0 THEN graphparv% = 0 PSET (dectime%, graphparv%) '10 is green - Fluorometer One COLOR 10, 0 IF graphfluor1% > 999 THEN graphfluor1% = 999 PSET (dectime%, graphfluor1%) '13 is ______ - Fluorometer Two COLOR 13, 0 IF graphfluor2% > 999 THEN graphfluor2% = 999 PSET (dectime%, graphfluor2%) COLOR 14, 0 CALL setpctime(nav$, TimeGPS$, LocalTime$) LOOP UNTIL (recnum = maxrec) OR (exiit$ = "True") ' This LOOP UNTIL reaches the number of records on each file CLOSE #2 CLOSE #3 IF Outputfile$ = "Y" THEN CLOSE #10 CLOSE #11 END IF recnum = 0 numfile = numfile + 1 LOOP UNTIL exiit$ = "True" LOOP UNTIL exiit$ = "True" PRINT "that's all folks" END exitnow: CLOSE #2 CLOSE #3 IF Outputfile$ = "Y" THEN CLOSE #10 CLOSE #11 END IF END RETURN MARKOUT: mark$ = "*" COLOR 5, 0 FOR spot% = 1 TO 999 STEP 1 PSET (dectime%, spot%) NEXT spot% SOUND 4000, .8: SOUND 2200, .4: SOUND 1800, .3 RETURN BeepError: DO I = 0 CALL bell COLOR 12, 0 SOUND 4000, .5 LOCATE 23, 40: PRINT "Fix problem, hit ENTER" keypress$ = INKEY$ SLEEP 1 LOCATE 23, 40: COLOR 12, 15: PRINT "Or notify Jim/Fernando" SOUND 2000, .4 COLOR 12, 0 SLEEP 1 LOOP UNTIL keypress$ <> "" RETURN replugme: 'COLOR 12, 0 COLOR 14, 1 LOCATE 23, 20: PRINT "Pull CUDLS Plug & Replug" GOSUB BeepError RETURN HandleError: SELECT CASE ERR CASE 27 COLOR 12, 0 LOCATE 23, 20: PRINT "LOAD PAPER" GOSUB BeepError RESUME NEXT CASE 25 COLOR 12, 0 LOCATE 23, 20: PRINT "PRINTER OFF"; COLOR 14, 0 GOSUB BeepError RESUME NEXT CASE 57 COLOR 12, 0 LOCATE 23, 20: PRINT "GPS OFF" COLOR 14, 0 GOSUB BeepError RESUME NEXT CASE 19 LOCATE 23, 20: PRINT "Unknown Error" GOSUB BeepError END SELECT RESUME NEXT SUB bell SOUND 4000, .4 SOUND 2000, .1 END SUB SUB calcSalinity (sbetemp, sbeCond, sbesalt) 'a subroutine to calculate salinity based on sbeCond conductivity 'sbeTemp = 15: sbeCond = 44' 'constants used in calculating salinity from conductivity DT = .00000719842419#: KT = 273.15 A1 = .0000207: A2 = -6.37E-10: A3 = 3.989E-15: by = .03426 BZ = .0004464: BU = .4215: BW = -.003107: C0 = .6766097: CY = 42.914 CZ = .0200564: CW2 = 1.104259E-04: C3 = -6.968901E-07: C4 = 1.0031E-09 E1 = 8.000001E-03: e2 = -.1692: E3 = 25.3851: E4 = 14.0941: E5 = -7.0261 E6 = 2.7081: D1 = .0005: d2 = -.0056: D3 = -.0066: D4 = -.0375 D5 = 6.360001E-02: D6 = -.0144: K = .0162: Q1 = 2.5: Q2 = 1.5: Q3 = .5: Q4 = 15 LA = 100: LB = 5800: LD = 7000: LE = 20: LG = 10: LH = 40: LI = 5: LJ = 500 ln = 0: LM = 1 '---------------------------------------------------------------------- p = 0: T = sbetemp: CO = sbeCond R = CO / CY AL = A1 * p + A2 * p * p + A3 * p * p * p AL = AL / (1 + by * T + BZ * T * T + BU * R + BW * T * R) RT = C0 + CZ * T + CW2 * T * T + C3 * T * T * T + C4 * T * T * T * T RT = R / (RT * (1 + AL)) s = E1 + e2 * RT ^ Q3 + E3 * RT + E4 * RT ^ Q2 + E5 * RT * RT + E6 * RT ^ Q1 S1 = D1 + d2 * RT ^ Q3 + D3 * RT + D4 * RT ^ Q2 + D5 * RT * RT + D6 * RT ^ Q1 S2 = s + ((T - Q4) / (1 + K * (T - Q4))) * S1: REM s2 = salinity sbesalt = S2 - .0163 'PRINT sbeSalt END SUB SUB exitnow LOCATE 20, 10: COLOR 15, 0 PRINT "Exiting.... Please Wait While Files Are Closed..." exiit$ = "True" END SUB SUB fluordoor (volts!, door!) ' ' 'this sub identifies fluorometer door currently being read IF volts! < .21 THEN door = 1!: EXIT SUB IF (volts! > .3) AND (volts! < .54) THEN door = 3.16: EXIT SUB IF (volts! > .65) AND (volts! < .9) THEN door = 10: EXIT SUB IF volts! > .9 THEN door = 31.6: EXIT SUB END SUB SUB multip (volts3!, multiplier!) ' Routine to determine the multiplier factor based on the output voltage ' from channel 3. The control on the fluorometer is change manually, ' once the reading values are over 1.0 IF volts3! >= 2 THEN multiplier = 1: EXIT SUB IF volts3! < 2 THEN multiplier = 100: EXIT SUB END SUB SUB o2sat (sbetemp, sbesalt, oxsat) c2 = -173.429 d2 = 249.6339 j4 = sbetemp + 273.15 e2 = 143.3483 f2 = -21.8492 g2 = -.03309 h2 = .014259 i2 = -.0017 m4 = sbesalt oxsat! = (EXP(c2 + d2 * (100 / j4) + e2 * (LOG(j4 / 100)) + f2 * (j4 / 100) + m4 * (g2 + h2 * (j4 / 100) + i2 * ((j4 / 100) ^ 2)))) * 44.64 END SUB SUB readfluor (Fluor!, PortDevice$) 'a routine for reading Turner Fluorometer RS232 Data LOCATE 22, 3: PRINT " In readfluor..." IF PortDevice$ = "1" THEN OPEN "COM1:4800,N,8,1,ASC" FOR RANDOM AS #1 LEN = 256 LOCATE 23, 30: COLOR 10, 0: PRINT "COM1-Fluor2": COLOR 14, 0 ELSEIF PortDevice$ = "2" THEN OPEN "COM2:4800,N,8,1,ASC" FOR RANDOM AS #1 LEN = 256 LOCATE 23, 30: COLOR 10, 0: PRINT "COM2-Fluor2": COLOR 14, 0 END IF Fluor! = 0 DO UNTIL (Fluor! > 0) AND (Fluor! < 1000) LINE INPUT #1, REC$ Fluor! = VAL(MID$(REC$, 32, 5)) ' LOCATE 22, 3: PRINT fluor! LOOP CLOSE #1 END SUB SUB readnav (poslat$, poslon$, postime$, declat!, declon!, TimeGPS$, SignalGPS$, PortGPS$, LocalTime$, DateGPS$) ' A routine for reading position from a navigation system GPS. ' SignalGPS$="N" disables this routine assigning a fix string (nav$). ' PortGPS$="1" or "2" assigns a COM port to be used. nav$ = "" IF SignalGPS$ = "Y" THEN IF PortGPS$ = "1" THEN OPEN "COM1:4800,N,8,1,OP0" FOR RANDOM AS #1 LOCATE 23, 10: COLOR 10, 0: PRINT "COM1-Open": COLOR 14, 0 ELSEIF PortGPS$ = "2" THEN OPEN "COM2:4800,N,8,1,OP0" FOR RANDOM AS #1 LOCATE 23, 10: COLOR 10, 0: PRINT "COM2-Open": COLOR 14, 0 END IF ELSE 'Bench troubleshooting 'nav$ = " $GPRMC,221919,3242.35,N,11714.16,W,1,6,01.1,000033.4,M,-00033.3,M*78" ' 123456789012345678901234567890123456789012345678901234567890 EXIT SUB END IF loopcnt% = 0 DO UNTIL (nav1$ = "$GPRMC") OR (loopcnt% = 10) 100 LINE INPUT #1, nav$ LOCATE 23, 20: COLOR 10, 0: PRINT "GPS ON ": COLOR 14, 0: loopcnt% = loopcnt% + 1 nav1$ = MID$(nav$, 2, 6) IF nav1$ = "$GPRMC" THEN pos$ = nav$ poslat$ = MID$(nav$, 18, 7) poslon$ = MID$(nav$, 28, 8) GPShour$ = MID$(nav$, 9, 2) GPSmin$ = MID$(nav$, 11, 2) GPSsec$ = MID$(nav$, 13, 2) LocalHour$ = MID$(TIME$, 1, 2) REM Sincronizing the PC time with GPS Time TIME$ = LocalHour$ + ":" + GPSmin$ + ":" + GPSsec$ LocalTime$ = TIME$ TimeGPS$ = GPShour$ + ":" + GPSmin$ + ":" + GPSsec$ declat! = VAL(MID$(poslat$, 3, 5)) / 60 + VAL(MID$(poslat$, 1, 2)) declon! = VAL(MID$(poslon$, 4, 5)) / 60 + VAL(MID$(poslon$, 1, 3)) DateGPS$ = MID$(nav$, 26, 2) + "/" + MID$(nav$, 24, 2) + "/19" + MID$(nav$, 28, 2) LOCATE 23, 20: COLOR 2, 0: PRINT "GPS ON ": COLOR 14, 0: END IF ' IF nav1$ = "$GPZDA" THEN REM This string is used by the the JORDAN GPS to trasmit the UTC date. ' END IF LOOP CALL setpctime(nav$, TimeGPS$, LocalTime$) CLOSE #1 END SUB 'SUB sbeCondConvert (freq2!, sbeCond) SUB sbeCondConvert (freq2!, sbeCond) 'this sub converts SBE cond freq to units of conductivity to conductivity units ' CA# = 1394.75178#: CB# = 3.02115388D-24: CC = .000366: CD = 4.247: CN = 5.96 'sbeCond = freq2! ^ 2 / (CA# - CB# * (freq2! ^ CN)) ^ 2 + (CC * sbeTemp) - CD ca = .0000000404726754# cb = .513997362# cc = -4.23934351# cd = .0000200695606# cm = 6.7 freq2 = freq2 / 1000 p = .1017 sbeCond = ((ca * freq2 ^ cm) + (cb * freq2 ^ 2) + cc + cd * sbetemp) / (10 * (1 - (9.57E-08) * p)) sbeCond = 10 * sbeCond END SUB SUB sbeTempConvert (freq1!, sbetemp) 'a subprogram to convert sbe freq to degrees ta# = .0036816475#: tb# = .000594852827# tc# = .0000167815158#: td# = .00000527072426#: tf0 = 5679.321 x = LOG(tf0 / freq1!) sbetemp = 1 / ((ta# + tb# * x) + (tc# * x ^ 2) + (td# * x ^ 3)) - 273.15 freq1 = freq1 / 1000 END SUB SUB setpctime (nav$, TimeGPS$, LocalTime$) ' nav$ = " $GPGGA,221919,3242.35,N,11714.16,W,1,6,01.1,000033.4,M,-00033.3,M*78" GPShour$ = MID$(nav$, 9, 2) LocalHour$ = MID$(TIME$, 1, 2) GPSmin$ = MID$(nav$, 11, 2) GPSsec$ = MID$(nav$, 13, 2) TIME$ = LocalHour$ + ":" + GPSmin$ + ":" + GPSsec$ LocalTime$ = TIME$ TimeGPS$ = GPShour$ + ":" + GPSmin$ + ":" + GPSsec$ END SUB