'CR1000 Series Datalogger
'JASTREBARSKO METEO STATION
'version A2
'date: 18/09/2007
'program author: Giorgio Alberti, DISAA, University of Udine, Udine

' ************************** WIRING DIAGRAM **************************************
' ------------------------------- CR1000  ----------------------------------------
'Analog Channels
'  H1 AM416 COM1 H1
'  L1 AM416 COM1 L1
'  H2 AM416 COM2 H2
'  L2 AM416 COM2 L2
'  H3 
'  L3
'  H4
'  L4
'  H5 
'  L5 
'  H6 
'  L6
'Control Channels
'  C1 LI-7500 SDM Data
'  C2 LI-7500 SDM Clock
'  C3 LI-7500 SDM Enable
'  C4 AM416 RES
'  C5 AM416 CLK
'  C6 To TDR1, TDR2, TDR3 control (orange)
'  C7
'  C8 
'  12Vsw to HFP01SC power (red)
'  12V To power box at the top of the tower
'Excitation channels
'  E1 Wind sensor excitation
'  E2
'Pulse channels
'  P1 Raingage
'  P2 Wind speed
'  G  To power box at the top of the tower
'  G  GND raingage
'  G  GND wind speed
'  G  HFP01SC ground (black)
'  G  HFP01SC shield (clear)
'  G  LI-7500 SDM reference
'  G  LI-7500 SDM shield
' AG  

' --------------------------------- AM416 ----------------------------------------
'1  H1 CMP3 High
'   L1 CMP3 Low           
'   H2 NR Lite High
'   L2 NR Lite Low           
'2  H1 Li-190 up High
'   L1 Li-190 up Low          
'   H2 Li-190 down High
'   L2 Li-190 down Low             
'3  H1 Calex IR Temp. High
'   L1 Calex IR Temp. Low           
'   H2 Vaisala HMCP Ta High
'   L2 To Ch. 4 L1            
'4  H1 Vaisala HMP45C RH High
'   L1 Vaisala HMP45C RH Low and to CR1000 AG               					
'   H2 Wind direction High
'   L2 Wind direction Low              								
'5  H1 Soil Tcp 1-4 blue
'   L1 Soil Tcp 1-4 red              									
'   H2 Soil Tcp 2-5 blue
'   L2 Soil Tcp 2-5 red               									
'6  H1 Soil Tcp 3-6 blue
'   L1 Soil Tcp 3-6 red
'   H2 Soil Tcp 7-10 blue
'   L2 Soil Tcp 7-10 red
'7  H1 Soil Tcp 8-11 blue
'   L1 Soil Tcp 8-11 red                                    
'   H2 Soil Tcp 9-12 blue
'   L2 Soil Tcp 9-12 red
'8  H1 SHF plates 1 red H073143
'   L1 SHF plates 1 black                                     
'   H2 SHF plates 2 red H073145
'   L2 SHF plates 2 black
'9  H1 SHF plates 3 red H073146
'   L1 SHF plates 3 black
'   H2 SHF plates 4 red H073144
'   L2 SHF plates 4 black
'10 H1 TDR1
'   L1 TDR2
'   H2 
'   L2 
'11 H1 
'   L1 
'   H2 
'   L2     
'12 H1 
'   L1                    
'   H2 
'   L2  
'13 H1 
'   L1 
'   H2 
'   L2  
'14 H1
'   L1
'   H2
'   L2
'15 H1
'   L1
'   H2
'   L2
'16 H1
'   L1                     
'   H2
'   L2
'

' ******************************** VARIABLES *************************************

PUBLIC I,j
PUBLIC Vbat, time
UNITS Vbat = mV

PUBLIC Tref
UNITS Tref = Celsius

PUBLIC P, WS, WD, Rn, Rg, PPFD, PPFDd, Tc, Ta, Rh
PUBLIC WD_mV, Rg_mV, Rn_mV, PPFD_mV, PPFDd_mV, Tc_mV
PUBLIC Ts(6)

UNITS P = mm
UNITS WD = m/s
UNITS WD = degree
UNITS Rn = W/m^2
UNITS Rg = W/m^2
UNITS PPFD = umol/(m^2*s)
UNITS PPFDd = umol/(m^2*s)
UNITS Tc = Celsius
UNITS Ta = Celsius
UNITS Rh = percentage
UNITS Ts(6) = Celsius

PUBLIC period(2)
PUBLIC periodc(2)
PUBLIC SWC(2)
PUBLIC shf_cal(4), shf_mV(4), shf(4)
DIM irga_raw(4)
DIM AGC as LONG

UNITS period(2) = unitless
UNITS periodc(2) = unitless
UNITS shf(4) = W/m^2
UNITS AGC = unitless

' HFP01SC plates
ALIAS shf(1) = H073143
ALIAS shf(2) = H073145
ALIAS shf(3) = H073146
ALIAS shf(4) = H073144

' IRGA VARIABLES
ALIAS irga_raw(1) = co2_raw
ALIAS irga_raw(2) = h2O_raw
ALIAS irga_raw(3) = press_raw
ALIAS irga_raw(4) = diag_irga_raw

UNITS co2_raw = umol/m^3
UNITS h2O_raw = umol/m^3
UNITS press_raw = kPa
UNITS diag_irga_raw = unitless


' ******************************* CONSTANTS ****************************************

' TDR CS616 Water Content Reflectometry
CONST C0 = -0.0663
CONST C1 = -0.0063
CONST C2 = 0.0007
CONST C3 = 0.526
CONST C4 = -0.052
CONST C5 = 0.00136

' CMP3 Global radiation sensor
CONST M1 = 10.85/1000

' NR-Lite Net radiation
CONST M2 = 14.8/1000

' Wind speed and direction
CONST m_WS = 1
CONST m_WD = 1

' HFT Rebs Soil heat flux plates
CONST H073143_cal = 34.5
CONST H073145_cal  = 35.1
CONST H073146_cal  = 37.4
CONST H073144_cal  = 33.5

' *********************************** OUTPUT VARIABLES ****************************
DataTable (Meteo,1,-1)
	OpenInterval
	DataInterval (0,30,Min,10)
	Average(1,Vbat,FP2,0)
	Average(1,Ta,FP2,0)
	Average(1,Tc,FP2,0)
	Totalize(1,P,FP2,0)
	Average(1,WD,FP2,0)
	Totalize(1,WS,FP2,0)
	Average(1,Rn,FP2,0)
	Average(1,Rg,FP2,0)
	Average(1,PPFD,FP2,0)
	Average(1,PPFDd,FP2,0)
	Average(6,Ts(),FP2,0)
	Average(2,SWC(),FP2,0)
	Average (4,shf(),IEEE4,False)
	Average(1,WD_mV,FP2,0)
	Average(1,Rn_mV,IEEE4,0)
	Average(1,Rg_mV,IEEE4,0)
	Average(1,PPFD_mV,IEEE4,0)
	Average(1,PPFDd_mV,IEEE4,0)
	Average(1,Tc_mV,IEEE4,0)
	Average(2,period(),IEEE4,0)
	Average (4,shf_mV(),IEEE4,False)
	Average (1,co2_raw,IEEE4,0)
	Average (1,h2O_raw,IEEE4,0)
	Average (1,press_raw,IEEE4,0)
	Average (1,AGC,IEEE4,0)
EndTable

' ************************************ MAIN PROGRAM ******************************
' Run the program every 10 s

BeginProg
	Scan (10,Sec,3,0)
		PanelTemp (Tref,250)
		Battery (Vbat)

'Read CR1000 

	' Rain
					PulseCount (P,1,1,2,0,0.2,0)
					
	' Wind speed
					PulseCount(WS,1,2,0,0,1,0)
					WS = WS * m_WS
					
	' LI-7500 CO2, H2O, air pressure and diagnostic
					CS7500 (co2_raw,1,7,6)
	
				' Compute the AGC
				AGC = INT ((diag_irga_raw AND &h000f) * 6.25 + 0.5)
	
' Read multiplexer
				PortSet (4,1)
				PulsePort(5,35000)
						
		' Global radiation (CMP3)
				VoltDiff (Rg_mV,1,mV25,1,True ,0,250,1.0,0)
				Rg=Rg_mV / M1
		
		' Net radiometer (NR - Lite)
				VoltDiff (Rn_mV,1,mV250,2,True ,0,_60Hz,1.0,0)
				Rn = Rn_mV / M2		
			
		' Incoming and outcoming PPFD (0V = 0 - 5 mV = 1000 umol m-2 s-1)
				PulsePort(5,35000)
				VoltDiff (PPFD_mV,1,mV7_5,1,True ,0,250,1,0)
				VoltDiff (PPFDd_mV,1,mV7_5,2,True ,0,250,1,0)
				PPFD=PPFd_mV*200
				PPFDd=PPFDd_mV*200
				
		' Outcoming long wave radiation (0V = -20 - 5V = 100 C)
				PulsePort (5,35000)
				VoltDiff (Tc_mV,1,mV5000,1,True ,0,250,1.0,0)
				Tc = Tc_mV * 0.024 - 20
		
		' Air temperature and air humidity
				VoltDiff (Ta,1,mV5000,2,True ,0,250,0.1,0)
				Ta = Ta - 40
				
				PulsePort (5,35000)
				VoltDiff (Rh,1,mV5000,1,True ,0,250,0.1,0)
				
		' Wind direction
				VoltDiff (WD_mV,1,mV5000,2,True ,0,250,1,0)
				WD = WD_mV * m_WD
		
		' Soil temperature				
				For I=1 To 3 Step 2
																		
					PulsePort (5,35000)
					TCDiff (Ts(I),2,mV2_5C,1,TypeT,TRef,True ,0,250,1.0,0)
																					
				Next I
		
		' Read HFP01SC plates
		
							
					PulsePort (5,35000)
					VoltDiff (shf_mV(1),2,mV250C,1,True ,200,250,1.0,0)
					PulsePort (5,35000)
					VoltDiff (shf_mV(3),2,mV250C,1,True ,200,250,1.0,0)
		
				' Load the HFP01SC factory calibration
					shf_cal(1) = H073143_cal
					shf_cal(2) = H073145_cal
					shf_cal(3) = H073146_cal
					shf_cal(4) = H073144_cal
				
					' Apply HFP01SC soil heat flux plate calibration
					For I = 1 to 4
						shf(I) = shf_mV(I) * shf_cal(I)
					next I
											
		' Read CS616 Water Content Reflectometry
				PulsePort (5,35000)
				CS616 (period(),2,1,6,4,1.0,0)	
				
						' Correct CS616 for soil temperature
						For I=1 To 2
									
							periodc(I)= period(I) + (20-Ts(1))*(0.526 - 0.052*period(I) + 0.00136 * (period(I))^2)
							SWC(I)=C0 + C1 * periodc(I) + C2 * period(I)^2
				
						Next I
			
			' Tutnoff multiplexer		
			PortSet (4,0)
				
' ****************************** DO OUTPUT ***************************************		
			
		CallTable meteo
	NextScan
EndProg

