'Program name: CUES_logger1_Program_20100825.CR3
'SPN1 read by serial port
'Updated:  08/25/2010 -- Kerry J. Claffey (CRREL)
'Phone 603-646-4634, e-mail: kclaffey@crrel.usace.army.mil

'Date written: 10/29/2009
'Jesse Stanley CRREL for CUES Site replaced CR10X Logger with CR3000

'DECLARATIONS
'Use Degrees NOT Radians
AngleDegrees

'Change these constants when you change the Radiometers

Const PSP_Up=118.2  'SN30309F3 - Installed 04/30/2010 
Const PSP_Dwn=161.55 'SN10276f4 - Installed 08/21/2010 14:45

Const PSP_RED_Up=113.64 'SN30102f3 - Installed 04/30/2010
Const PSP_RED_Dwn=119.33 'SN17315f3 - Installed 08/21/2010 14:45

Const PSP_SHDWBND=109.17 'SN27784f3 - Installed 08/21/2010 14:45

Const PIR=269.45 'SN29338F3 - Installed 06/02/2010 13:48

Const con1=0.0010295
Const con2=0.0002391
Const con3=0.0000001568
Const const_S_B=5.6704*PWR(10,-8)

Public Time(9)
Alias Time(1)=year
Alias Time(2)=month
Alias Time(3)=jour
Alias Time(4)=hour
Alias Time(5)=minute


Public Sunrise As String *20
Public Sunset As String *20
Public SunFlag As Boolean

'Public Flag(8) As Boolean
'Public Battery

'LongWave Radiatioln Terms
Public LongWave_in
Public therm_mv
Public therm_ohm
Public LW_Temp_K
Public up_therm2
Public LongWaveIn_mv
Public ref_temp
Public batt

'Wind Speed from RM Young Terms
Public upper_ws
Public upper_dir

' Radiometers
Public up_clr
Public Shadow_bd
Public up_red
Public down_clr
Public down_red

'Sonic Anemometer data
'Public SonicString As String * 45
'Public SonicSplit(6) As String * 10
'Public Sonic_UString As String *10
'Public Sonic_U
'Public Sonic_VString As String *10
'Public Sonic_V
'Public Sonic_WString As String *10
'Public Sonic_W
'Public Sonic_TString As String *10
'Public Sonic_T
'Public Sonic_wnd_Spd_String As String *10
'Public Sonic_Wnd_Spd
'Public Sonic_Wnd_Dir_String As String *10
'Public Sonic_Wnd_Dir

' Delta T shadow band
Public SPN_total
Public SPN_diff
Public sun As Boolean
Public SPN1String As String *18
Public SPN1(3)
'Output Table

DataTable(Radiometers,1,-1)
  CardOut(0,-1)
	DataInterval(0,1,Min,0)
  Sample (1, sun, Boolean)

  Average(1, up_clr, IEEE4, 0)
	Average(1, down_clr, IEEE4, 0)

	Average(1, up_red, IEEE4, 0)
	Average(1, down_red, IEEE4, 0)
 
  Average(1, SPN_total, IEEE4,0)
	Average(1, SPN_diff,IEEE4,0)
	
	Average(1, LongWave_in, IEEE4, 0)
	Average(1, LongWaveIn_mv, IEEE4,0)
  Average(1,LW_Temp_K, IEEE4, 0)
  
  Average(1, Shadow_bd, IEEE4, 0)
EndTable

DataTable(Winds,1,-1)
  CardOut(0,-1)
	DataInterval(0,1,Min,0)
	WindVector(1, upper_ws, upper_dir, IEEE4, 0, 0, 0, 0)
	FieldNames("PV_WindSpeed:m/s,PV_WindDir:m/s,PV_SD_WndDir:none")
'	WindVector(1, Sonic_Wnd_Spd, Sonic_Wnd_Dir, IEEE4, 0, 0, 0, 0)
'	FieldNames("Sonic_WindSpeed:m/s,Sonic_WindDir:m/s,Sonic_SD_WndDir:none")
EndTable

'DataTable(Sonic,1,-1)  MOVED to Logger #3
'  CardOut(0,-1)
'  Sample(1, Sonic_U, IEEE4)
'	Sample(1, Sonic_V, IEEE4)
'	Sample(1, Sonic_W, IEEE4)
'	Sample(1, Sonic_T, IEEE4)
'	Sample(1,SonicString,String)
'EndTable

'DataTable for SPN1 Sunshine Parameter 
DataTable(daily,1,-1)
  CardOut(0,-1)
  DataInterval(23,24,Hr,0)
'  Sample(1,batt,IEEE4)
'  Sample(1,ref_temp,IEEE4)
  Sample(1,sunrise,String)
  Sample(1,sunset,String)
EndTable

'Main Program

BeginProg

	Scan(1,Sec, 3, 0)  'One second scan rate
	'	Battery(Battery)
		
		'SPN1 NOW sampled through serial port
		'VoltSe(SPN_total, 1, mV5000, 7,True, 0,_60Hz, 1, 0)
		'VoltSe(SPN_diff, 1, mV5000, 8,True, 0,_60Hz, 1, 0)
		'VoltDiff (SPN_total,1,mV5000,4,true,0,250,1.0,0)
		'VoltDiff (SPN_diff,1,mV5000,5,true,0,250,1.0,0)
		'PortGet(sun,6)
   		
		'Young Wind Speed and Direction
		
		PulseCount(upper_ws,1, 1, 1, 1, 0.098, 0)
		BrHalf(upper_dir, 1,mV1000, 1, VX1, 1, 1000,True, 0,_60Hz,355, 0)
		'BrHalf(lower_dir, 1, mV5000, 2, VX2, 1, 2500, False, 50000, 250, 3550, 0)
		
		'Longwave Eppley - IN
		VoltDiff(LongWaveIn_mv, 1, mV20, 2, True, 0,_60Hz, PIR, 0)
		' settleing time was 0 -- changed to 10000
		BrHalf(therm_mv, 1,mV200, 5, VX3, 1, 100,True,0,_60Hz, 1, 0)
		' Calculation for non battery powered PIR.
		therm_ohm = (7.5*(therm_mv/(1.0-therm_mv)))*1000
		
		LW_Temp_K = 1/(con1+con2*LN(therm_ohm)+con3*(LN(therm_ohm))^3)
		LongWave_in = LongWaveIn_mv+const_S_B*(LW_Temp_K)^4
		
		'ShortWave Radiomter Measurements
		VoltDiff(up_clr, 1,AutoRange, 8, true, 0,_60Hz, PSP_Up, 0)
		VoltDiff(up_red, 1,AutoRange, 9, true,0,_60Hz, PSP_RED_Up, 0)
		VoltDiff(down_clr, 1,AutoRange, 10, true, 0,_60Hz, PSP_Dwn, 0)
		VoltDiff(down_red, 1,AutoRange,11, true, 0,_60Hz, PSP_RED_Dwn, 0)
		VoltDiff(Shadow_bd, 1,AutoRange, 12, true, 0,_60Hz,PSP_SHDWBND , 0)
				
		'Converted Sonic to RS-232 input/output
		
      SerialOpen(Com4,9600,0,0,0)
      Delay(1,5,mSec)
      SerialOut(Com4,"S","",0,0)
      'Delay(1,5,mSec)
      'SerialOut(Com4,"B","",0,0)
      'Delay(1,5,mSec)
      'SerialOut(Com4,"!","",0,0)
      '** read Sonic Output as string
      SerialIn(SPN1String,Com4,100,13,18)
      SerialClose(Com4)
      ' ** Changes Sonic String into Sonic component numbers
      
      'Sonic_U = Mid(SonicString,1,7)
      'Sonic_V = Mid(SonicString,8,7)
      'Sonic_W = Mid(SonicString,15,7)
      'Sonic_T = Mid(SonicString,22,8)
      'Sonic_Wnd_Spd = Mid(SonicString,30,7)
      'Sonic_Wnd_Dir = Mid(SonicString,38,6)
       		
		  SplitStr(SPN1(1),Spn1String,"none",3,0)
		  SPN_total = SPN1(1)
		  SPN_diff = SPN1(2)
		  Sun = SPN1(3)
		  
		 	If (sunflag = False)
		   If (sun = True)
		        RealTime(time())
		        Sunrise = year+"/"+month+"/"+jour+"  "+hour+":"+minute
		        sunflag = True
		   EndIf
	    EndIf
	 
	    If (sunflag = True)
		   If (sun = False)
		        RealTime(time())
		        Sunset = year+"/"+month+"/"+jour+"  "+hour+":"+minute
		        sunflag = False
		   EndIf
	   EndIf
	 

		'  Sonic_T = SonicSplit(4)
		'  Sonic_Wnd_Spd = SonicSplit(5)
		'  Sonic_Wnd_Dir = SonicSplit(6)
		  
'		PanelTemp(ref_temp, 250)
'		Battery (batt)
		
'		CallTable Sonic
		CallTable Winds
		CallTable Radiometers
		CallTable daily
	
	NextScan
EndProg'
