'atks1.cr1 'CR1000 Series 'Created by Short Cut (4.0) '06-15-2021 - Modified by Joel Bailey '08-18-2021 - Modified on site '08-10-2022 - Added timed Camera power control, installed SW12 on CP4 to turn camera on/off at 59/02 mins '08-19-2022 - Changed SR50A to multiple measurements '04-16-2023 - Added initial n=1 and changed tables to -1 instead of true Const PT_PSI_TO_CM = 70.377285 'Constants ConstTable Const PAKBUS_INFO = 392 Const P_MODL = "TE525M" Const P_SN = "xx" Const P_TIP = 0.1 Const P_UNITS = "mm" Const P_PP = 1 Const RH_RELAY_CP = 2 Const RH_MODL = "HC2S3" Const RH_SN = "XX" Const RH_MULT = 0.1 Const RH_OFS = 0 Const AT_MULT = 0.1 Const AT_OFS = -40 Const AT_SE = 1 Const RH_SE = 2 Const WS_MODL = "RMY 05108" Const WS_UNITS = "m/s" Const WS_MULT = 0.1666 Const WD_UNITS = "deg" Const WD_OFS = 0 Const WD_MULT = 355 Const WS_PP = 2 Const WD_SE = 8 Const WD_EX = Vx1 Const PB_MODL = "CS106" Const PB_SN = "XX" Const PB_UNITS = "mBar" Const PB_MULT = 0.240 Const PB_OFS = 500 Const PB_SE = 3 Const PB_EN_CP = 1 Const NR_MODL = "NR-LITE2" Const NR_SN = "xx" Const NR_CALIB = 14.3 Const NR_CALIB_UNITS = "uV/W/m^2" Const NR_UNITS = "W/m^2" Const NR_DIFF = 3 Const SNW_MODL = "SR50AH" Const SNW_SN = "XX" Const SNW_HT_CM = 153.3 Const SNW_SDI_ADDR = "0" Const SNW_SDI12_CP = 3 Const MODM_MODL = "RF451" Const MODM_SN = "XX" Const MODM_ON_MIN = 0 Const MODM_OFF_MIN = 10 Const MODM_PERIOD = 60 Const MODM_V_LIM = 12.0 Const CAM_TRIG_CP = 6 Const CAM_MODL = "CCFC" Const CAM_SN = "1292" Const CAM_COM_CP = Com4 Const CAM_PWR_CP = 4 Const CAM_ON_MIN = 57 Const CAM_OFF_MIN =3 Const CAM_PERIOD = 60 Const CAM_V_LIM = 12.0 Const PT_MODL = "INW AquiStar PT12" Const PT1_SN = "?" Const PT2_SN = "?" Const PT1_SDI_ADDR = 1 Const PT2_SDI_ADDR = 2 Const SDI12__CP = 5 EndConstTable 'Declare Variables and Units Dim ModSecsInt As Long Public progSig As Long Public BattV Public PTemp_C Public AT Public RH Public PB Public P Public WS Public WD Public SR50A(2) Public SD Public sr50_down Public sr50_height_cm Public SW12State As Boolean Public SW12_2State As Boolean Public NR_raw Public NR ' pt-aquistar: Public pt1(3), pt2(3) Alias pt1 = pt1stage, pt1temp, pt1batt Alias pt2 = pt2stage, pt2temp, pt2batt Units pt1stage = cm Units pt2stage = cm Units pt1temp = degC Units pt2temp = degC Units pt1batt = Volts Units pt2batt = Volts Alias SR50A(1)=DT Alias SR50A(2)=Q Units BattV=Volts Units PTemp_C=Deg C Units AT=Deg C Units RH=% Units PB=mbar Units P=mm Units WS=meters/second Units WD=degrees Units NR_raw=W/m^2 Units NR=W/m^2 Units SD=cm 'Define Data Tables DataTable(HrlyAtms,1,-1) DataInterval(0,60,Min,10) Sample(1,progSig,uint2) Totalize(1,P,FP2,False) Sample(1,AT,FP2) Average(1,AT,FP2,False) Minimum(1,AT,FP2,False,False) Maximum(1,AT,FP2,False,False) Sample(1,RH,FP2) Minimum(1,RH,FP2,False,False) Maximum(1,RH,FP2,False,False) Sample(1,WS,FP2) Sample(1,WD,FP2) WindVector(1,WS,WD,FP2,False,0,0,0) FieldNames("WS_S_WVT,WD_D1_WVT,WD_SD1_WVT") Maximum(1,WS,FP2,False,False) Sample(1,PB,IEEE4) Average(1,PB,IEEE4,False) Average(1,NR,FP2,False) Average(1,SD,FP2,False) EndTable DataTable(Daily,1,-1) DataInterval(0,1440,Min,10) Sample(1,progSig,uint2) Minimum(1,BattV,FP2,False,False) 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(HrlyDiag,1,-1) DataInterval(0,60,Min,10) Sample(1,progSig,uint2) Sample(1,BattV,FP2) Average(1,BattV,FP2,False) Minimum(1,BattV,FP2,False,False) Sample(1,PTemp_C,FP2) Average(1,PTemp_C,FP2,False) EndTable ' Hydro: base pt-aquistar turbidity-obs500 DataTable(Hydro,1,-1) DataInterval(0,15,Min,0) Sample(1,progSig,uint2) Average(1,pt1stage,fp2,0) Average(1,pt1temp,fp2,0) Average(1,pt2stage,fp2,0) Average(1,pt2temp,fp2,0) EndTable DataTable(MET,1,-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,False) WindVector(1,WS,WD,FP2,False,0,0,0) FieldNames("WS_S_WVT,WD_D1_WVT,WD_SD1_WVT") Average(1,PB,IEEE4,False) Average(1,NR,FP2,False) Average(1,SD,FP2,False) EndTable DataTable(SR50,1,-1) DataInterval(0,60,Min,10) Sample(1,progSig,uint2) Sample(1,AT,FP2) Average(1,SD,FP2,False) Sample(1,DT,FP2) Average(1,Q,FP2,False) EndTable ' QtrHrWtr: base pt-aquistar turbidity-obs500 DataTable(QtrHrWtr,1,-1) DataInterval(0,15,Min,0) Sample(1,progSig,uint2) Sample(1,pt1stage,fp2) Maximum(1,pt1stage,fp2,0,0) Minimum(1,pt1stage,fp2,0,0) Sample(1,pt1temp,fp2) Sample(1,pt2stage,fp2) Maximum(1,pt2stage,fp2,0,0) Minimum(1,pt2stage,fp2,0,0) Sample(1,pt2temp,fp2) EndTable 'Main Program BeginProg ' for base: progSig = status.ProgSignature sr50_height_cm = SNW_HT_CM ' for camera communication SerialOpen(CAM_COM_CP,115200,4,0,1000) SW12(1) 'Main Scan Scan(60,Sec,1,0) 'Default CR1000X Datalogger Battery Voltage measurement 'BattV' Battery(BattV) 'Default CR1000X Datalogger Wiring Panel Temperature measurement 'PTemp_C' PanelTemp(PTemp_C,15000) 'H2SC3 (panel switched power) Temperature & Relative Humidity Sensor measurements 'AT' and 'RH' PortSet(RH_RELAY_CP,1) Delay(0,3,Sec) VoltSe(AT,1,mV2500,AT_SE,True,0,250,AT_MULT,AT_OFS) VoltSe(RH,1,mV2500,RH_SE,True,0,250,RH_MULT,RH_OFS) PortSet(RH_RELAY_CP,0) If RH>100 AND RH<103 Then RH=100 '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,mV5000,PB_SE,True,0,15000,PB_MULT,PB_OFS) PortSet(PB_EN_CP,0) EndIf 'TE525MM/TE525M Rain Gauge measurement 'P' PulseCount(P,1,P_PP,2,0,P_TIP,0) '05108-45 Wind Speed & Direction Sensor measurements 'WS' and 'WD' PulseCount(WS,1,WS_PP,1,1,WS_MULT,0) BrHalf(WD,1,mV5000,WD_SE,WD_EX,1,2500,True,20000,15000,WD_MULT,0) If WD>=355 OR WD<0 Then WD=0 'SR50AH Heated Sonic Ranging Sensor (SDI-12 Output) measurements 'DT' and 'Q' and calculations 'SD' and 'DBTCDT' SDI12Recorder(SR50A(),SNW_SDI12_CP,SNW_SDI_ADDR,"M1!",1,0,-1) DT = DT * 100.0 sr50_down=DT*SQR((AT+273.15)/273.15) SD=sr50_height_cm-sr50_down 'NR-LITE2 Net Radiometer (dynamic wind speed correction) measurement 'NR_raw' and 'NR' VoltDiff(NR_raw,1,mV250,NR_DIFF,True,0,15000,1000/NR_CALIB,0) If WS>=5 Then NR=NR_raw*(1+0.021286*(WS-5)) Else NR=NR_raw EndIf 'SW12 Timed Control 'Get seconds since 1990 and do a modulo divide by the interval period (60 minutes or 3600 seconds) ModSecsInt=Public.TimeStamp(1,1) MOD 3600 'Turn ON SW12 for 10 minutes every 60 minutes If (ModSecsInt>=0 AND ModSecsInt<600) Then SW12State=True Else SW12State=False EndIf 'Always turn OFF SW12 if battery drops below 12 volts If BattV