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.

24-Hour Rolling Rainfall


Larry@UFL Apr 25, 2017 09:03 PM

Hello All,

I wrote a short CR200X program to test whether my programming for a rolling 24-hour accumulated rainfall would work. We report data every 15-minutes so a days worth of data would be from the last 96 samples. I used a For-Next loop and the TableName.FieldName function to pull the data from the last 96 arrays. However, my Rain_24HR variable is always NAN so here is a copy of my code below and thanks for any help!

Larry Treadaway - University of Florida

Public batt_volt
Public Rain_in
Public Rain_24HR

Dim R

Units Rain_in=inches
Units Rain_24HR=inches

'Define Data Tables.
DataTable (Test,1,-1) 'Set table size to # of records, or -1 to autoallocate.
  DataInterval (0,15,Min)
  Minimum (1,batt_volt,False,0)
  Totalize (1,Rain_in,0)
EndTable

DataTable (Rainfall_24Hour,True,-1)
  DataInterval (0,15,Min)
  Sample (1,Rain_24HR)
EndTable

'Define Subroutines
Sub (Rain_24HR_Cal)
  Rain_24HR=0
  For R = 1 To 96
    Rain_24HR=Test.Rain_in_tot(1,R)+Rain_24HR
  Next R
EndSub

'Main Program
BeginProg
  Scan (15,Sec)
    Battery (batt_volt)
    PulseCount (Rain_in,P_SW,2,0,0.01,0)
    CallTable Test
    Call Rain_24HR_Cal
    CallTable Rainfall_24Hour
  NextScan
EndProg


JDavis Apr 25, 2017 10:11 PM

If you add NAN into a total, the total will be NAN.

If you try to access a record that doesn't exist, it will return NAN. My guess is that you didn't have 24 hours of data in your 15 minute table yet.


Larry@UFL Apr 26, 2017 12:20 PM

Thanks JDavis, much appreciated!

Larry


jra Apr 26, 2017 01:28 PM

For anyone else wanting to do a 24-hour running total, it is supported in ShortCut in the Calculations & Control folder. 


Larry@UFL Apr 26, 2017 03:11 PM

Thanks jra, unfortunately the ShortCut method does not do a 'true' running total, it resets the total at some time during the day. You can pick your time but still not what I would call a 'running total'. I am trying to get the datalogger to calculate the rainfall for the last 24 hours for each data array and do not want the total since midnight or whatever time. I think JDavis has the right idea so will do a test to see.

Regards,

Larry


Larry@UFL May 2, 2017 12:31 PM

The above program example works! Once you get the required number of arrays the NAN goes away and you get a running total of the last 24-hours. Thanks again to JDavis for the insight, very much appreciated.

Regards,

Larry


ET May 29, 2020 05:18 PM

Newer data logger OS's support an easier instruction.

NOTE: THIS IS NOT SUPPORTED IN THE CR200Series DATA LOGGERS!

Try TotalRun instruction for this.

Here is an example used with a CR300 data logger. Note 1440 minutes in 24 hours, scan rate is 1 minute in this example program:

BeginProg
Scan (1,Min,0,0)
PulseCount(Rain_in,1,P_SW,2,0,0.01,0)
TotalRun (Rain24HourRun,1,Rain_in,1440)

In this example, Rain24HourRun would show the running rain total for 24 hours updated every minute.


Nigel Jun 3, 2020 01:50 AM

I found the total run semi useful, tidy code, but had the same problem as the original post with a true running tally.

I did it slightly differently. So with this method I have a running last 24 hours total, plus can also see in real time upon which hour the event(s) happen. In the following example I had two gauges, one under an irrigator and one as rain. This allows me a real time quick view logging in remotely to the logger.

 

'CR800 Series Datalogger
'AshleyDene
'AD Trench
'=======================
'program author: NDB
'Date 2020/05/21
'Name: 'ADT_pb92.CR8
'=======================
' Rain gauges(2), Rain and Trench Irrigation

' 2 * Pronamic Rain gauges tipping spoon
' Both model DK-8600
'rainIrr = 100.53/adj 1.00mm
'rain = Serial no. P4219/2008 adj 0.20mm item no. 300.023-20

'4 * CS616 Moisture sensors
'CS107 Temperature
'=======================
'------------------------------------------------------
' Sensors and datalogger connections
'------------------------------------------------------
'Diff1 H SE1 <== 1 - CS616
'Diff1 L SE2 <== 2 - CS616
'            RG <==
'-----------------
'Diff2 H SE3 <== 3 - CS616
'Diff2 L SE4 <== 4 - CS616
'            RG <==
'----------------
'Diff3 H SE5 <==
'Diff3 H SE6 <== Therm 107 Temp
'         RG <==Therm 107 Temp
'----------------
' EX1 ==> Therm 107 Temp
'  RG <==
' EX2 ==>
' RG <==
'  P1 <== rain DK-8600 (adj 0.20mm)  item no. 300.023-20)
' RG <==
'  P2 <== irrg DK-8600 100.53/adj 1.00mm
'----------------
'  G ==>
' 5v ==>
'----------------
'SW12 ==>
'      G ==>
'----------------SDM
'      12v ==>
'        G ==>
' Tx C1 <==>
' Rx C2 <==>
' Tx C3 <==>
'----------------SDM
' Rx C4 <==> CS616 Signal
'         G ==>
'--------------------------------------------------------



'Declare Variables and Units
PreserveVariables
'Dim num
Public BattV As Float
Public PTemp As Float

Public soilTemp As Float

Public TempCorrIO As Boolean = false
Public vw(4) As Float
Public vwt(4) As Float
Public VWc(4) As Float

Public rTime(9) As Float
Alias rTime(4) = Hour
Dim t
Public rain As Float
Public rainIrr As Float
Public rainhr(24) As Float
Public rainIrrhr(24) As Float
Public rain24 As Float
Public rainIrr24 As Float

'Define Data Tables

DataTable(Hourly,True,-1)
     DataInterval(0,1,Hr,10)
     Average (1,BattV,FP2,False)
     Totalize (1,rain,FP2,False)
     Totalize (1,rainIrr,FP2,False)
     Average(1,soilTemp,FP2,False)
     Average(4,VWc(),FP2,False)
     Average(4,vw(),FP2,False)
EndTable

DataTable(Daily,True,-1)
     DataInterval(23,24,Hr,10)
     Maximum (1,BattV,FP2,False,False)
     Minimum (1,BattV,FP2,False,False)
     Totalize (1,rain,FP2,False)
     Totalize (1,rainIrr,FP2,False)
     Average(1,soilTemp,FP2,False)
     Average(4,VWc(),FP2,False)
     Maximum (1,soilTemp,FP2,False,False)
     Minimum (1,soilTemp,FP2,False,False)
     Maximum (4,VWc(),FP2,False,False)
     Minimum (4,VWc(),FP2,False,False)
EndTable

'Main Program

BeginProg
     'Main Scan

     Scan(1,Min,1,0)
          RealTime (rTime())
          Battery(BattV)
          PanelTemp(PTemp,_50Hz)
          Therm107(soilTemp,1,6,1,0,_50Hz,1,0)
          PulseCount (rain,1,1,2,0,0.2,0)
          PulseCount (rainIrr,1,2,2,0,1,0)
          'Just for public viewing
          'Each hour rain for 24 hours
          'Note 24hr clock 0 to 23
          'Note hour 1 = 0 to 1, Hour 24 = 23 to 24
          If IfTime (0,60,Min) Then rainhr(Hour + 1) = 0
          If IfTime (0,60,Min) Then rainIrrhr(Hour + 1) = 0
          rainhr(Hour + 1) = rainhr(Hour + 1) + rain
          rainIrrhr(Hour + 1) = rainIrrhr(Hour + 1) + rainIrr
          rain24 = 0
          rainIrr24 = 0
          For t = 1 To 24
               rain24 = rain24 + rainhr(t)
               rainIrr24 = rainIrr24 + rainIrrhr(t)
          Next t
          
          If IfTime (0,10,Min) Then'testing 1 minute, then 10min
               CS616 (vw(1),4,1,4,4,1.0,0)
               
               If ((10 <= soilTemp) AND (soilTemp <= 40)) Then
                    If TempCorrIO = true Then
                    vwt() = vw() + (20 - soilTemp) * (0.526 + vw() * (-0.052 + vw() * 0.00136))
                    Else
                      vwt() = vw()
                    EndIf   
               Else
                    vwt() = vw()
               EndIf
               
               VWc() = -0.0663 + vwt() * (-0.0063 + vwt() * 0.0007)
          EndIf
         
          'Call Data Tables and Store Data
          CallTable Hourly
          CallTable Daily
     NextScan

EndProg

 

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