'CR6 Series 'Created by Short Cut (3.2) ' Modified 7/1/2016 Joel Bailey - Customized program ' 9/30/2016 - Joel Bailey - Changed the camera control to come on at 58 minutes past the hour and off at 3 minutes past the hour ConstTable Const PAKBUS_INFO = 163 Const P_MODL = "TE525M" Const P_SN = "65551-615" Const P_TIP = 0.1 Const P_UNITS = "mm" Const P__U = U4 Const RH_EN__CP = C2 Const RH_MODL = "HC2S3" Const RH_SN = "20052953" Const RH_MULT = 0.1 Const RH_OFS = 0 Const AT_MULT = 0.1 Const AT_OFS = -50 Const AT__U = U2 Const RH__U = U5 Const WS_MODL = "RMY 05103" Const WS_SN = "" Const WS_UNITS = "m/s" Const WS_MULT = 0.098 Const WD_UNITS = "deg" Const WD_OFS = 0 Const WD_MULT = 355 Const WS__U = U10 Const WD__U = U7 Const WD_EX__U = U6 Const PB_MODL = "CS106" Const PB_SN = "D5020029" Const PB_UNITS = "mBar" Const PB_MULT = 0.24 Const PB_OFS = 500 Const PB__U = U1 Const PB_EN__U = U3 Const NR_MODL = "NR-LITE2" Const NR_SN = "114119" Const NR_CALIB = 12.3 Const NR_CALIB_UNITS = "uV/W/m^2" Const NR_UNITS = "W/m^2" Const NR__U = U11 Const SNW_MODL = "SR50A" Const SNW_SN = "7292" Const SNW_HT_CM = 200 Const SNW_SDI_ADDR = 0 Const SDI12__CP = C1 Const MODM_PWR__SW12 = 1 Const MODM_MODL = "9522B" Const MODM_MSISDN = "" Const MODM_ON_MIN = 0 Const MODM_OFF_MIN = 10 Const MODM_PERIOD = 60 Const MODM_V_LIM = 12.4 Const MODM_HOLD_V_LIM = 12.6 Const CAM_PWR__SW12 = 2 Const CAM_MODL = "CAM-CC5MPX" Const CAM_SN = "2152" EndConstTable 'Declare Variables and Units Public progSig As Long Public Battery Public PTemp_C Public Pb Public P Public AT Public RH Public DP Public NR Public sr50_raw(2), sr50_down, sd, sr50_height Public WS Public WD Public Camera_SW12State As Boolean Alias sr50_raw(2) = sr50_quality Units Battery=Volts Units PTemp_C=Deg C Units Pb=mbar Units P=mm Units AT=Deg C Units RH=% Units NR=W/m^2 Units WS=meters/second Units WD=degrees Units DP=Deg C ' 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(Daily,True,-1) DataInterval(0,1440,Min,10) Sample(1,progSig,uint2) Totalize(1,p,FP2,False) Average(1,at,FP2,False) Average(1,ws,FP2,False) WindVector(1,ws,wd,FP2,False,0,0,0) FieldNames("ws_S_WVT,wd_D1_WVT,wd_SD1_WVT") Average(1,NR,FP2,False) Average(1,sd,FP2,False) EndTable DataTable(HrlyAtms,1,-1) DataInterval(0,60,Min,0) Sample(1,progSig,uint2) Totalize(1,p,fp2,0) Sample(1,at,fp2) Average(1,at,fp2,0) Minimum(1,at,fp2,0,0) Maximum(1,at,fp2,0,0) Sample(1,rh,fp2) Minimum(1,rh,fp2,0,0) Maximum(1,rh,fp2,0,0) Sample(1,dp,fp2) Average(1,dp,fp2,0) Minimum(1,dp,fp2,0,0) Maximum(1,dp,fp2,0,0) Sample(1,ws,fp2) Sample(1,wd,fp2) WindVector(1,ws,wd,fp2,0,0,0,0) Maximum(1,WS,fp2,0,0) Sample(1,Pb,fp2) Average(1,Pb,fp2,0) Average(1,nr,fp2,0) Average(1,sd,fp2,0) EndTable DataTable(HrlyDiag,True,-1) DataInterval(0,60,Min,10) Sample(1,progSig,uint2) Minimum(1,battery,FP2,False,False) Average(1,PTemp_C,FP2,False) EndTable DataTable(Met,True,-1) DataInterval(0,60,Min,10) Sample(1,progSig,uint2) Totalize(1,p,FP2,False) Average(1,at,FP2,False) Sample(1,rh,FP2) Average(1,ws,fp2,0) WindVector(1,ws,wd,FP2,False,0,0,0) FieldNames("ws_S_WVT,wd_D1_WVT,wd_SD1_WVT") Average(1,Pb,FP2,False) Average(1,nr,FP2,False) Average(1,sd,FP2,False) EndTable DataTable(SR50,True,-1) DataInterval(0,60,Min,10) Sample(1,progSig,uint2) Sample(1,at,FP2) Average(1,sd,FP2,False) Sample(1,sr50_height,FP2) Average(1,sr50_quality,FP2,False) EndTable ' modem control Sub relayControl(onMin,offMin,period,Vlimit,holdVlimit,hold,force) ' uses globals thisMinute, battery If force Then SW12(MODM_PWR__SW12,1,0) If thisMinute MOD period = onMin AND Battery >= Vlimit Then SW12(MODM_PWR__SW12,1,0) If thisMinute MOD period = onMin AND Battery < holdVlimit Then hold = 0 If thisMinute MOD period = offMin AND NOT hold Then SW12(MODM_PWR__SW12,0,0) EndSub 'Main Program BeginProg ' for base: progSig = status.ProgSignature sr50_height = SNW_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 modemforce = 1 ' for camera communication SerialOpen(ComC3,115200,0,0,1000,0) 'Main Scan Scan(60,Sec,1,0) 'Default CR6 Datalogger Battery Voltage measurement 'BattV' Battery(Battery) 'Default CR6 Datalogger Wiring Panel Temperature measurement 'PTemp_C' PanelTemp(PTemp_C,15000) 'CS106 Barometric Pressure Sensor measurement 'Pb' If TimeIntoInterval(59,60,Min) Then PortSet(PB_EN__U,1) If TimeIntoInterval(0,60,Min) Then VoltSe(Pb,1,mV5000,PB__U,True,0,15000,PB_MULT,PB_OFS) PortSet(PB_EN__U,0) EndIf 'TE525MM/TE525M Rain Gauge measurement 'Precip' PulseCount(P,1,P__U,1,0,P_TIP,0) 'HC2S3 (panel switched power) Temperature & Relative Humidity Sensor measurements 'AT' and 'RH' PortSet(RH_EN__CP,1,0) Delay(0,3,Sec) VoltSe(AT,1,mV1000,AT__U,False,0,15000,AT_MULT,AT_OFS) VoltSe(RH,1,mV1000,RH__U,False,0,15000,RH_MULT,RH_OFS) DewPoint(DP,AT,RH) PortSet(RH_EN__CP,0,0) 'NR-LITE2 Net Radiometer (dynamic wind speed correction) measurement 'NR' and 'CNR' VoltDiff(NR,1,mV200,NR__U,True,0,15000,1000/NR_CALIB,0) If WS>=5 Then NR=NR*(1+0.021286*(WS-5)) Else NR=NR EndIf ' snow-sr50a: '' read SR50A snow depth sensor: '' read distance in m (positive) and quality number into sr50_raw() '' make distance down negative, convert to cm '' apply correction for speed of sound as f(temperature, 0C) '' calculate snow depth as sum of sensor height and distance down If TimeIntoInterval(0,10,Min) Then SDI12Recorder(sr50_raw, SDI12__CP, SNW_SDI_ADDR, "M1!", 1, 0) sr50_raw = sr50_raw * -100.0 sr50_down = sr50_raw * SQR((AT+273.15) / 273.15) sd = sr50_height + sr50_down EndIf '05103 Wind Speed & Direction Sensor measurements 'WS' and 'WD' PulseCount(WS,1,WS__U,5,1,WS_MULT,0) BrHalf(WD,1,mV5000,WD__U,WD_EX__U,1,2500,True,20000,15000,WD_MULT,WD_OFS) If WD>=360 OR WD<0 Then WD=0 ' time-variables: RealTime(Time()) 'SW12 Camera Control 'Turn ON SW12 for 5 minutes every 60 minutes If TimeIsBetween(58,3,60,Min) Then Camera_SW12State=True Else Camera_SW12State=False EndIf 'Always turn OFF SW12 if battery drops below 12.3 volts If Battery<12.3 Then Camera_SW12State=False 'Set SW12-1 to the state of 'SW12State' variable SW12(CAM_PWR__SW12,Camera_SW12State,0) ' modem: relayControl(modemOnMin,modemOffMin,modemPeriod,modemVlim,modemHldVlim,modemHold,modemForce) 'Call Data Tables and Store Data CallTable Daily CallTable HrlyAtms CallTable HrlyDiag CallTable Met CallTable SR50 NextScan EndProg