'roche_mount_river.csi 'written by Joel Bailey 7/14/2015 'CR1000 'Created by Short Cut (3.1) ConstTable Const PAKBUS_INFO = 150 Const PB_MODL = "CS106" Const PB_SN = " " Const PB_UNITS = "mBar" Const PB_MULT = 0.24 Const PB_OFS = 600 Const PB__SE = 15 Const SDI__CP = 5 Const MODM_PWR__CP = 9 Const MODM_MODL = "Iridium" Const MODM_SN = "" Const MODM_ON_MIN = 0 Const MODM_OFF_MIN = 10 Const MODM_PERIOD = 30 Const MODM_V_LIM = 12.4 Const MODM_HOLD_V_LIM = 12.6 Const PT1_MODL = "INW Aquistar PT12" Const PT1_SN = "" Const PT1_SDI_ADDR = 1 Const PT2_MODL = "INW AquiStar PT12" Const PT2_SN = "?" Const PT2_SDI_ADDR = 2 Const PT_PSI_TO_CM = 70.377285 EndConstTable ' base: Public progSig As Long 'Declare Variables and Units Public BattV Public PTemp_C Public Pb Public SDI_1(3) Public SDI_2(3) Alias SDI_1(1)=pt1_stage Alias SDI_1(2)=pt1_temp Alias SDI_1(3)=pt1_batt Alias SDI_2(1)=pt2_stage Alias SDI_2(2)=pt2_temp Alias SDI_2(3)=pt2_batt ' 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 Units BattV=Volts Units PTemp_C=Deg C Units Pb=mbar Units pt1_stage=cm Units pt1_temp=degC Units pt1_batt=V Units pt2_stage=cm Units pt2_temp=degC Units pt2_batt=V 'Define Data Tables DataTable(Hydro,True,-1) DataInterval(0,15,Min,10) Average(1,pt1_stage,FP2,False) Average(1,pt1_temp,FP2,False) Average(1,pt1_batt,FP2,False) Average(1,pt2_stage,FP2,False) Average(1,pt2_temp,FP2,False) Average(1,pt2_batt,FP2,False) EndTable DataTable(HrlyDiag,True,-1) DataInterval(0,60,Min,10) Minimum(1,BattV,FP2,False,False) Average(1,PTemp_C,FP2,False) EndTable DataTable(QtrHrWtr,True,-1) DataInterval(0,15,Min,10) Maximum(1,pt1_stage,FP2,False,False) Minimum(1,pt1_stage,FP2,False,False) Sample(1,pt1_stage,FP2) Sample(1,pt1_temp,FP2) Maximum(1,pt2_stage,FP2,False,False) Minimum(1,pt2_stage,FP2,False,False) Sample(1,pt2_stage,FP2) Sample(1,pt2_temp,FP2) EndTable DataTable(Met,True,-1) DataInterval(0,60,Min,10) Average(1,Pb,FP2,False) EndTable ' relay-control-sub:relayControl() Sub relayControl(relayPort,onMin,offMin,period,Vlimit,holdVlimit,hold,force) ' uses globals thisMinute, battery If force Then Call setRelayState(relayPort,1) If thisMinute MOD period = onMin AND BattV >= Vlimit Then Call setRelayState(relayPort,1) If thisMinute MOD period = onMin AND BattV < holdVlimit Then hold = 0 If thisMinute MOD period = offMin AND NOT hold Then Call setRelayState(relayPort,0) EndSub ' relay-control-sub:setPortState() Sub setRelayState(relay,state As Boolean) ' portSet() does not allow variable for port, so brute force it: If relay = 9 Then PortSet(9,state) Else If relay = 8 Then PortSet(8,state) Else If relay = 7 Then PortSet(7,state) Else If relay = 6 Then PortSet(6,state) Else If relay = 5 Then PortSet(5,state) Else If relay = 4 Then PortSet(4,state) Else If relay = 3 Then PortSet(3,state) Else If relay = 2 Then PortSet(2,state) Else If relay = 1 Then PortSet(1,state) EndIf EndSub 'Main Program BeginProg ' for base: progSig = status.ProgSignature ' 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 Datalogger Battery Voltage measurement 'BattV' Battery(BattV) 'Default Wiring Panel Temperature measurement 'PTemp_C' PanelTemp(PTemp_C,_60Hz) 'CS106 Barometric Pressure Sensor measurement 'Pb' If TimeIntoInterval(59,60,Min) Then PortSet(1,1) If TimeIntoInterval(0,60,Min) Then VoltSe(Pb,1,mV2500,PB__SE,1,0,_60Hz,PB_MULT,PB_OFS) PortSet(1,0) EndIf 'Reset Generic SDI-12 Sensor measurements Move(SDI_1(),3,NaN,1) 'Generic SDI-12 Sensor measurements 'pt2_stage', 'pt2_temp', 'pt2_batt' SDI12Recorder(SDI_1(),SDI__CP,PT1_SDI_ADDR,"M!",1,0) SDI_1(1) = SDI_1(1) * PT_PSI_TO_CM 'Reset Generic SDI-12 Sensor measurements Move(SDI_2(),3,NaN,1) 'Generic SDI-12 Sensor measurements 'pt2_stage', 'pt2_temp', 'pt2_batt' SDI12Recorder(SDI_2(),SDI__CP,PT2_SDI_ADDR,"M!",1,0) SDI_2(1) = SDI_2(1) * PT_PSI_TO_CM 'Call Data Tables and Store Data ' time-variables: RealTime(Time()) ' modem: relayControl(MODM_PWR__CP,modemOnMin,modemOffMin,modemPeriod,modemVlim,modemHldVlim,modemHold,modemForce) CallTable Hydro CallTable HrlyDiag CallTable QtrHrWtr CallTable Met NextScan EndProg