'CR1000 'Created by Short Cut (3.2) ' Modified by Joel Bailey 5/5/2017 ConstTable Const PAKBUS_INFO = 167 Const PB_MODL = "CS106" Const PB_SN = "D5020027" Const PB_UNITS = "mBar" Const PB_MULT = 0.24 Const PB_OFS = 500 Const PB__SE = 1 Const PB_EN__CP = 1 Const SR50_MODL = "SR50A" Const SR50_SN = "2001" Const SR50_HT_CM = 98.773 Const SR50_SDI_ADDR = 0 Const SR50__CP = 3 Const MODM_MODL = "Iridium" Const MODM_SN = "881692489565" Const MODM_ON_MIN = 57 Const MODM_OFF_MIN = 10 Const MODM_PERIOD = 60 Const MODM_V_LIM = 12.4 Const MODM_HOLD_V_LIM = 12.6 Const AT__SE = 16 'FIXED RESISTOR VALUE FOR GWS THERMISTOR CIRCUITS Const Rf = 1 'FIXED RESISTOR 1 (kOHM) HERE ' For YSI thermistors -- conversion of kOHM to deg C Const a = 0.0014654354 Const b = 0.0002386780 Const c = 0.0000001000 EndConstTable 'Declare Variables and Units Public progSig As Long Public Battery Public PTemp_C Public Pb Public sr50_raw(2), stage, sr50_height Public at_kOhm, AT ' for GWS Atb Dim at_x, at_ln ' for GWS Atb Alias sr50_raw(1)=sr50_down Alias sr50_raw(2)=sr50_quality Units Battery=Volts Units PTemp_C=Deg c Units AT=C Units Pb=mbar Units stage = m ' time-variables: Dim Time(9) Alias Time(4) = thisHour Alias Time(5) = thisMinute Alias Time(9) = thisDOY ' modem: Public modemOnMin, modemOffMin, modemPeriod, modemVlim, modemHldVlim Public modemHold As Boolean, modemForce As Boolean 'Define Data Tables DataTable(Hydro,True,-1) DataInterval(0,15,Min,10) Sample(1,progSig,uint2) Sample(1,AT,FP2) Average(1,AT,FP2,False) Sample(1,sr50_down,FP2) Sample(1,sr50_quality,FP2) Sample(1,stage,IEEE4) Average(1,stage,IEEE4,False) Average(1,Pb,FP2,False) Sample(1,Pb,FP2) EndTable DataTable(HrlyDiag,True,-1) DataInterval(0,60,Min,10) Sample(1,progSig,uint2) Sample(1,Battery,FP2) Average(1,Battery,FP2,False) Average(1,PTemp_C,FP2,False) EndTable ' modem control Sub relayControl(onMin,offMin,period,Vlimit,holdVlimit,hold,force) ' uses globals thisMinute, battery If force Then SW12(1) If thisMinute MOD period = onMin AND Battery >= Vlimit Then SW12(1) If thisMinute MOD period = onMin AND Battery < holdVlimit Then hold = 0 If thisMinute MOD period = offMin AND NOT hold Then SW12(0) EndSub 'Main Program BeginProg ' for base: progSig = status.ProgSignature sr50_height = SR50_HT_CM ' for modem: modemOnMin = (MODM_ON_MIN + MODM_PERIOD) MOD MODM_PERIOD modemOffMin = (MODM_OFF_MIN + MODM_PERIOD) MOD MODM_PERIOD modemPeriod = MODM_PERIOD modemVlim = MODM_V_LIM modemHldVlim = MODM_HOLD_V_LIM 'Main Scan Scan(60,Sec,1,0) 'Default CR1000 Datalogger Battery Voltage measurement 'BattV' Battery(Battery) 'Default CR1000 Datalogger Wiring Panel Temperature measurement 'PTemp_C' PanelTemp(PTemp_C,250) 'AT using GWS thermistors BrHalf (at_x,1,mV2500,AT__SE,Vx2,1,2500,True ,0,_60Hz,1.0,0) at_kOhm = Rf*at_x/(1-at_x) at_ln = LN (1000*at_kOhm) 'ln resistance (ohm) AT = (1/(a + b*at_ln + c*(at_ln)^3)) - 273.15 'Steinhart & Hart Equation 'SR50A Sonic Ranging Sensor (SDI-12 Output) measurements SDI12Recorder(sr50_raw(),SR50__CP,"0","M1!",1,0,-1) sr50_down=sr50_raw*SQR((AT+273.15)/273.15) stage = sr50_height - sr50_down 'CS106 Barometric Pressure Sensor measurement 'Pb' If TimeIntoInterval(59,60,Min) Then PortSet(PB_EN__CP,1) If TimeIntoInterval(0,60,Min) Then VoltSe(Pb,1,mV2500,PB__SE,1,0,250,PB_MULT,PB_OFS) PortSet(PB_EN__CP,0) EndIf ' time-variables: RealTime(Time()) ' modem: relayControl(modemOnMin,modemOffMin,modemPeriod,modemVlim,modemHldVlim,modemHold,modemForce) 'Call Data Tables and Store Data CallTable Hydro CallTable HrlyDiag NextScan EndProg