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.

Is there a MonthIsBetween function?


chemgoof1010 Mar 16, 2022 09:08 PM

I am not very well versed in CRBasic, but I am trying to write an if/then statement to calculate a value. I want to calculate it such that between october 1 and june 30, it is using one equation (y = m1x +b1) and july - september using another (y = m2x + b2). I know there is a function for TimeisBetween for time of the day, but I was wondering if there was a similar function for the months of the year. I am using a CR1000


smile Mar 17, 2022 07:40 AM

with realtime instruction you have all this information in public and you can create all desirable filters.

Public rTime(9)               'declare as public and dimension rTime to 9

Alias rTime(1) = Year         'assign the alias Year to rTime(1)

Alias rTime(2) = Month        'assign the alias Month to rTime(2)

Alias rTime(3) = DOM          'assign the alias DOM to rTime(3)

Alias rTime(4) = Hour         'assign the alias Hour to rTime(4)

Alias rTime(5) = Minute       'assign the alias Minute to rTime(5)

Alias rTime(6) = Second       'assign the alias Second to rTime(6)

Alias rTime(7) = uSecond      'assign the alias uSecond to rTime(7)

Alias rTime(8) = WeekDay      'assign the alias WeekDay to rTime(8)

Alias rTime(9) = Day_of_Year  'assign the alias Day_of_Year to rTime(9)

 


chemgoof1010 May 2, 2022 04:57 PM

Thanks. I had tried this code before, but didn't realize how to call data into the variables. RealTime( rTime ) is the code I was missing.

It all works now though. Thank you

M903 connected by null modem to RS232 on CR1000. A fan with a ball valve are connected to the SW12.

 

'Radiance Research RNeph Variables
Public RNeph(2) As String
Alias RNeph(1) = BScat
Alias RNeph(2) = BSCal

Public Flow_Neph
'Neph reset variables
Dim WarmUpWait
Dim NephResetFlag

Public numBytesRet
Dim inString As String * 438

Dim Neph_AZ As Boolean
Public Neph_MZ As Boolean
Public Neph_ManualReset As Boolean

Public Scatter As Float
Public Scat As Float
Public PMEst
Dim rTime(9)               'declare as public and dimension rTime to 9
 Alias rTime(1) = Year         'assign the alias Year to rTime(1)
 Alias rTime(2) = Month        'assign the alias Month to rTime(2)
 Alias rTime(3) = DOM          'assign the alias DOM to rTime(3)
 Alias rTime(4) = Hour         'assign the alias Hour to rTime(4)
 Alias rTime(5) = Minute       'assign the alias Minute to rTime(5)
 Alias rTime(6) = Second       'assign the alias Second to rTime(6)
 Alias rTime(7) = uSecond      'assign the alias uSecond to rTime(7)
 Alias rTime(8) = WeekDay      'assign the alias WeekDay to rTime(8)
 Alias rTime(9) = Day_of_Year  'assign the alias Day_of_Year to rTime(9)

Units PMEst = ug/m3

'5 minute meteorological data table
DataTable(Neph_1_Min,true,-1)
  DataInterval(0,1,min,10)
  Average(1,BScat,IEEE4,False)
  Average(1,BSCal,IEEE4,False)
  Average(1,Flow_Neph,FP2,False)
	Average(1, PMEst, FP2, False)
EndTable


DataTable(Neph_5_Min,true,-1)
  DataInterval(0,5,min,10)
  Average(1,BScat,IEEE4,False)
  Average(1,BSCal,IEEE4,False)
  Average(1,Flow_Neph,FP2,False)
	Average(1, PMEst, FP2, False)
EndTable

DataTable(Neph_60_Min,true,-1)
  DataInterval(0,60,min,10)
  Average(1,BScat,IEEE4,False)
  Average(1,BSCal,IEEE4,False)
  Average(1,Flow_Neph,FP2,False)
	Average(1, PMEst, FP2, False)
EndTable

DataTable(Neph_1440_Min,true,-1)
  DataInterval(0,1440,min,10)
  Average(1,BScat,IEEE4,False)
  Average(1,BSCal,IEEE4,False)
  Average(1,Flow_Neph,FP2,False)
	Average(1, PMEst, FP2, False)
EndTable
  
'//////////////////////////////////////////////////////////////////////////////////////////////////
'////////                              Main Program                                      //////////
'//////////////////////////////////////////////////////////////////////////////////////////////////
SequentialMode

BeginProg
    

'Begin main scan
Scan(1,Sec,3,0)
  
'initialize Neph Reset Flag & Neph warm up counter
NephResetFlag = FALSE
WarmUpWait = 100

  SerialOpen(ComRS232,9600,3,0,219)
		SerialInRecord(ComRS232,inString,13,109,0,numBytesRet,00) 'Get data from Radiance Research Nephelometer RNeph
    SplitStr(RNeph,inString,"  ",2,6)
  'check if the bscat exceeded expected range
  'Threshold for bscat filter is set to 20. Adjust as needed.    
  If (BScat > 20) Then
    NephResetFlag = TRUE
  Else
    NephResetFlag = FALSE
  EndIf
    
  '''''''''''''''''''''''''''''''''''''''''''''''
  'remove the observation while the Neph warms up
  'this is set to 1 min
  '''''''''''''''''''''''''''''''''''''''''''''''
  If (WarmUpWait < 1) Then
    
    BScat = -99
    BSCal = -99
     
  EndIf

      
  'Dwyer MS-621 Digital Magnehelic flow measurement:
  VoltSe(Flow_Neph,1,mv5000,13,True,0,_60Hz,0.00004,-0.1)
    
  'Begin M903 "Auto Zero" sequence
  If TimeIsBetween(350,365,1440,Min)
    Neph_AZ = True
  EndIf  
  
  If TimeIsBetween(365,350,1440,Min)
    Neph_AZ = False
  EndIf  
  
  If Neph_AZ = True Then
    SW12(0)
  ElseIf Neph_AZ = True OR Neph_MZ = True Then
    SW12(0)
  ElseIf Neph_AZ = True AND Neph_MZ = False Then
    SW12(0)
  ElseIf Neph_AZ = False AND Neph_MZ = True Then
    SW12(0)
  Else
    SW12(1)

  EndIf
  
  'Begin slope selection for wildfire season -> July-September
  Scatter = RNeph(1)
  Scat = 10000 * Scatter
  RealTime( rTime )
  If Month = 7 AND Scat > 1.58 Then
    PMEst = Scat * 13.31 + 2.96
  ElseIf Month = 8 AND Scat > 1.58 Then
    PMEst = Scat * 13.31 + 2.96
  ElseIf Month = 9 AND Scat > 1.58 Then
    PMEst = Scat * 13.31 + 2.96
  Else
    PMEst = Scat * 17.2 - 2.3
  EndIf


'Neph Manual Reset 
Neph_ManualReset = False
SerialOpen(ComRS232,9600,3,0,219)

 If Neph_ManualReset = True Then
      'reset the Neph to make sure it is not in the wrong mode
      'SerialOut(ComRS232,"S","message.",1,500)
      SerialOut(ComRS232,"S","",1,500)
      SerialOut(ComRS232,CHR(13),"",1,100)    
      SerialOut(ComRS232,"Q","",1,300)
      SerialOut(ComRS232,CHR(13),"",1,500)
      Neph_ManualReset = False
      EndIf
      
'Call Data Tables and Store Data
		'CallTable Neph_5_Sec		
		CallTable Neph_1_Min
		CallTable Neph_5_min
		CallTable Neph_60_Min
		CallTable Neph_1440_min
  
NextScan
SlowSequence
 Scan(20,Sec,3,0)
   
  
	NextScan
     
   'Slow scan checks if Neph was reset to an unexpected mode 
  'and sets the Neph back to the expected S mode
  SlowSequence
  
    Scan(1, Min, 0 ,0)
        If NephResetFlag = True Then
          
          'reset the Neph to make sure it is not in the wrong mode
          SerialOut(ComRS232,"S","message.",1,500)
          SerialOut(ComRS232,CHR(13),"",1,100)    
          SerialOut(ComRS232,"Q","",1,300)
          SerialOut(ComRS232,CHR(13),"",1,500)
      
          'let the Neph warm up
          WarmUpWait = 0 
          
        Else
          
          WarmUpWait = WarmUpWait + 1 'add 1 min to the counter 
          
        EndIf
        
    NextScan
EndProg

 

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