Our full technical support staff does not monitor this forum. If you need assistance from a member of our staff, please submit your question from the Ask a Question page.


Log in or register to post/reply in the forum.

Rainfall Reset


PILKO Dec 13, 2024 10:05 AM

Hi Crew, 

I'm new to the programming in CR Basic. Please bare with me...

I am trying to write a code that will record rainfall tip data, but also create a cumulative rainfall variable that is a running total. Furthermore, a secondary table for 'calibration mode' and reset function for both. I've used 'TotalRun' to create the total(s), however if I input the number of seconds to record the total over (4 months worth of data per say) I recieve 'out of memory'. Is there a better way to do this?  

                        'Program begins below' 
'---------------------------------------------------------------------------
'---------------------------------------------------------------------------
'---------------------------------------------------------------------------
                        'Logger Compile Mode'
SequentialMode 
'---------------------------------------------------------------------------
'---------------------------------------------------------------------------
                  'Variables/Alias/ReadOnly Declarations'
'System Data'
Public SITE_ID As String *30 'Go to Main Program to set ID
Public Pannel_Temp As Float 'Default measurement of logger pannel temperature
Public External_Battery_V As Float ' Defult measurement of external battery voltage

'Air Temperature'
Public AirTemp_DegC As Float

'4-20mA sensor with 2 outputs (Temperature and EC)
Public Electrical_Conductiviy_4_20mA_uS As Float '4-20mA EC Sensor
Public Water_Temperature_4_20mA_DegC As Float ' 4-20mA Temperature Sensor

'SDI-12 Data + Configuration'
Public Sensor_ID As String * 32 'SDI12 sensor identification
Public Water_Level_m As Float 'This is stage height which can be adjusted to match SG readings via 'Water_Level_Offste_m'
Public Water_Level_Offset_m As Float 'Adjustable water level offset (m) 
Public Water_Temperature_DegC 'This is the reported water temperature
Public Microsiemens_uS 'This is for an EC measurement
Dim SDI12(3) As Float 'HIDDEN (So the nurmerical display hides the raw data - Raw data still saved to "RAWDATA table"). This declares there is 1 SDI12 sensor (connected to 1 com port) with 3 associated measurements (Temp, WL, WQ) 

'Rainfall Data + Rainfall Calibration'
Public Rainfall_mm As Float 'This is just the tip data
Public Rainfall_Cumulative_mm As Float 'This is Rainfall Cumlative (This can be Reset via 'Rainfall_RESET')
Public Rainfall_Calibration_Cumulative_mm As Float 
Public Rainfall_RESET As Boolean 'Resets "Rainfall_Cumulative_mm"
Public Rainfall_Calibration_Mode As Boolean
Public Rainfall_Calibration_Timer As Float 'Set Rainfall calibration timer duration in "Rainfall Totalizing, Data Tables and Calibration Mode"
Dim Rainfall_Calibration_AUTOZERO As Boolean

'Alias Declarations'
Alias SDI12(1) = Raw_Water_Level_mm
Alias SDI12(2) = Raw_Water_Temperature_DegC
Alias SDI12(3) = Raw_Microsiemens_uS

'ReadOnly Declarations'
ReadOnly SITE_ID
'---------------------------------------------------------------------------
'---------------------------------------------------------------------------
                           'Units Declaration'
Units Electrical_Conductiviy_4_20mA_uS = uS
Units Water_Temperature_4_20mA_DegC = DegC
Units External_Battery_V = V
Units Pannel_Temp = Deg C
Units Raw_Water_Level_mm = mm
Units Water_Level_Offset_m = m
Units Water_Temperature_DegC = Deg C
Units Rainfall_mm = mm
Units AirTemp_DegC = Deg C
Units Rainfall_Calibration_Timer = Sec
Units Raw_Microsiemens_uS  = uS/cm
'---------------------------------------------------------------------------
'---------------------------------------------------------------------------
  'Constant Declaration For Site Configuration i.e What gear is on site'
        'This is not functional...... yet'
ConstTable (Site_Instrumentation)
  Const Rain_Gauge = False 
  Const LT500 = False
  Const Thermocouple = False
  Const AD375 = False
EndConstTable 
'---------------------------------------------------------------------------
'Other Constant Declarations 
  Const Timer_Start_Value_Sec = 1800
'---------------------------------------------------------------------------
'---------------------------------------------------------------------------
DataTable(Reported_Data,True,-1)
	DataInterval(0,10,Min,0)
	Sample (1,Water_Level_m,FP2) 
	Sample (1,Water_Temperature_DegC,FP2)
  Sample (1,AirTemp_DegC,FP2)
  Average (1,Electrical_Conductiviy_4_20mA_uS,FP2,False)
  Average (1,Water_Temperature_4_20mA_DegC,FP2,False)
EndTable

DataTable (RAW_Data,True,-1)
    DataInterval(0,10,Min,0)
    Sample (1,Raw_Water_Level_mm,FP2)
    Sample (1,Raw_Water_Temperature_DegC,FP2)
EndTable

DataTable (Reported_RF_Data,(Rainfall_mm >= 0.2),1000)
  DataInterval (0,2,sec,0)
  Sample (1,Rainfall_mm,FP2)
  Sample (1,Rainfall_Cumulative_mm,FP2)
EndTable

DataTable (Calibration_RF_Data,(Rainfall_mm >= 0.2),500)
  DataInterval (0,2,sec,0)
  Sample (1,Rainfall_mm,FP2) 
  Sample (1,Rainfall_Calibration_Cumulative_mm,FP2)
EndTable

 DataTable(SystemData,True,-1)
	DataInterval(0,1,Hr,10)
	Minimum(1,External_Battery_V,FP2,False,False)
	Average(1,Pannel_Temp,FP2,False)
EndTable
'---------------------------------------------------------------------------
'---------------------------------------------------------------------------
'Main Program
BeginProg 
'---------------------------------------------------------------------------
PreserveVariables 

	'Main Scan
	Scan(1,Sec,0,0)
	  'Site Identification
	  SITE_ID = "10 Jessamine Court Rain Gauge"
	  'Default CR800 Datalogger Battery Voltage measurement 'BattV'
		Battery (External_Battery_V)
		'Default CR800 Datalogger Wiring Panel Temperature measurement 'PTemp_C'
    PanelTemp (Pannel_Temp,_50Hz)
    'Generic Voltage Diff measurement 'AirTemp'     
    TCDiff (AirTemp_DegC,1,AutorangeC,3,TypeT,Pannel_Temp,True ,0,250,1.0,0)
'---------------------------------------------------------------------------
	'Rainfall Pulse measurement -
    PulseCount (Rainfall_mm,1,1 ,2,0,0.2,0)
        'Normal Rainfall Operation
        If Rainfall_Calibration_Mode = False Then TotalRun (Rainfall_Cumulative_mm,1,Rainfall_mm,90000000,Rainfall_RESET)'
        If Rainfall_Calibration_Mode = False Then CallTable Reported_RF_Data
        If Rainfall_Cumulative_mm = 0 Then Rainfall_RESET = False 

        'Rainfall Calibration Mode 
        If Rainfall_Calibration_Mode = True Then TotalRun (Rainfall_Calibration_Cumulative_mm,1,Rainfall_mm,18000,Rainfall_Calibration_AUTOZERO = True)
        If Rainfall_Calibration_Mode = False Then Rainfall_Calibration_Timer = Timer_Start_Value_Sec
        If Rainfall_Calibration_Mode = True Then Rainfall_Calibration_Timer = Timer_Start_Value_Sec - Timer (1,Sec,0)
        IF Rainfall_Calibration_Mode = True Then CallTable Calibration_RF_Data
        If Rainfall_Calibration_Timer = 1 Then Rainfall_Calibration_AUTOZERO = True 
        If Rainfall_Calibration_Timer = 0 Then Rainfall_Calibration_Mode = False       
        If Rainfall_Calibration_Timer = 0 Then Timer (1,Sec,3)
        If Rainfall_Calibration_Timer = 0 Then Rainfall_Calibration_AUTOZERO = False
        If Rainfall_Calibration_Mode = False Then Timer (1,Sec,3)
        If Rainfall_Calibration_Timer = Timer_Start_Value_Sec Then Rainfall_Calibration_AUTOZERO = True Else Rainfall_Calibration_AUTOZERO = False
        If Rainfall_Calibration_AUTOZERO = True Then Rainfall_Calibration_Cumulative_mm = 0      
'---------------------------------------------------------------------------
'Moved Sensor Readings to Slow Sequence to update every 60secs
NextScan
SlowSequence 
Scan (60,Sec,3,0)
'---------------------------------------------------------------------------
'4-20mA Sensor Read EC
    VoltDiff (Electrical_Conductiviy_4_20mA_uS,1,mV2500,1,True ,0,_50Hz,43.75,-17500)
'4-20mA Sensor Read Water Temp   
    VoltDiff (Water_Temperature_4_20mA_DegC,1,mV2500,2,True,0,_50Hz,0.03125,-12.5)
'---------------------------------------------------------------------------
 'SDI-12 Sensor query of ID 
    SDI12Recorder(Sensor_ID,1,"0","I!",1,0,-1)
    'SDI-12 Sensor measurements 'Raw_Water_Level', 'Water_Temperature' and 'Left_Blank_For_WQ_Readings_uS'
		SDI12Recorder(SDI12(),1,"0","M!",1,-1)
		'Water level offset
    Water_Level_m = (Raw_Water_Level_mm/1000) + (Water_Level_Offset_m)
    'Water Temperature
    Water_Temperature_DegC = Raw_Water_Temperature_DegC
    'Water Quality Measurment
    Microsiemens_uS  =  Raw_Microsiemens_uS + 99
'---------------------------------------------------------------------------
            'Call Data Tables for Non Rainfall Tables
            CallTable Reported_Data
            CallTable Raw_Data
            CallTable SystemData             
	NextScan
'---------------------------------------------------------------------------	
'---------------------------------------------------------------------------
EndProg

 

Thank you! 


PILKO Dec 15, 2024 03:56 AM

Please ignore this. Figured it out - I was making it way harder than it had to be. 

Missing this simplification:

"Rainfall_Cumulative_mm = Rainfall_mm + Rainfall_Cumulative_mm"

TotalRun not required.... solving all my issues.


Emmmmaaaaaa Dec 18, 2024 03:28 PM

This post is under review.

Log in or register to post/reply in the forum.