'CR1000 Series Datalogger
'JASTREBARSKO METEO STATION
'version A3
'date: 19/09/2007
'program author: Giorgio Alberti, DISAA, University of Udine, Udine
' Note: FLAG 1 controls the output of the data in mV if High
' ************************** WIRING DIAGRAM **************************************
' ------------------------------- CR1000  ----------------------------------------
'Analog Channels
'  H1 AM16/32 ODD H1
'  L1 AM16/32 ODD L1
'  H2 AM16/32 EVEN H2
'  L2 AM16/32 EVEN L2
'  H3 Battery pack voltage + (with voltage divider)
'  L3 Battery pack voltage - (with voltage divider)
'  H4 Thermocouple to the Palm box (High)
'  L4 Thermocouple to the Palm box (Low)
'  H5 
'  L5 
'  H6 
'  L6
'  H7
'  L7
'  H8
'  L8
'Control Channels
'  C1 LI-7500 SDM Data
'  C2 LI-7500 SDM Clock
'  C3 LI-7500 SDM Enable
'  C4 AM16/32 RES
'  C5 AM16/32 CLK
'  C6 To TDR1, TDR2 control (orange)
'  C7
'  C8 
'  12Vsw to 
'  12V 
'Excitation channels
'  EX1 Wind sensor excitation
'  EX2
'  EX3
'Pulse channels
'  P1 Raingage
'  P2 Wind speed
'
' Grounds (the order they are connecteder is irrelevant all together)
'  G  GND raingage
'  G  GND wind speed
'  G  
'  G  
'  G  LI-7500 SDM reference
'
' Shields (the order they are connecteder is irrelevant all together)
'  Shield  LI-7500 SDM shield

' --------------------------------- AM16/32 ----------------------------------------
'1  H1 CMP3 High
'   L1 CMP3 Low           
'   H2 NR Lite High
'   L2 NR Lite Low           
'2  H1 Li-190 up High  Q37658
'   L1 Li-190 up Low          
'   H2 Li-190 down High Q37649
'   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, main_PWR, Ta_palm
UNITS Vbat = mV
UNITS Ta_palm = Celsius
UNITS main_PWR = 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)

ALIAS Tc = Canopy_temp

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)
PUBLIC AGC as LONG
PUBLIC CO2, H2O, Press

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

' Flags
PUBLIC FLAG(8) AS BOOLEAN

' ******************************* 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 = 13.20/1000

' NR-Lite Net radiation
CONST M2 = 0.0148

' 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,main_PWR,FP2,0)
	Average (1,Ta_palm,FP2,0)
	Average(1,Ta,FP2,0)
	Average(1,Rh,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,co2_raw,IEEE4,0)
	Average (1,h2O_raw,IEEE4,0)
	Average (1,press_raw,IEEE4,0)
	Average (1,AGC,IEEE4,0)
EndTable

DataTable (Meteo_mV,1,-1)
	OpenInterval
	DataInterval (0,30,Min,10)
	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(2,periodc(),IEEE4,0)
	Average (4,shf_mV(),IEEE4,False)
EndTable

' ************************************ MAIN PROGRAM ******************************
' Run the program every 10 s

BeginProg
	Scan (10,Sec,3,0)
		PanelTemp (Tref,250)
		Battery (Vbat)

'Read CR1000 

	' Read main power status
				VoltDiff (main_PWR,1,mV5000,3,True ,0,250,0.0104,0)
					
	' Read thermocouple in the palm box
				TCDiff (Ta_palm,1,mV2_5C,4,TypeT,TRef,True ,0,250,1.0,0)
		
	' Rain
				PulseCount (P,1,1,2,0,0.1,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)
	
				CO2 = co2_raw
				H2O = h2o_raw
				Press = press_raw
				
				' 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,mV25,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,mV25,1,True ,0,250,1,0)
				VoltDiff (PPFDd_mV,1,mV25,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 (Vaisala)
				VoltDiff (Ta,1,mV2500,2,True ,0,250,0.1,0)
				Ta = Ta - 40
				
				PulsePort (5,35000)
				VoltDiff (Rh,1,mV2500,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 6 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),1,mV250C,1,True ,200,250,1.0,0)
					VoltDiff (shf_mV(2),1,mV250C,2,True ,200,250,1.0,0)
					PulsePort (5,35000)
					VoltDiff (shf_mV(3),1,mV250C,1,True ,200,250,1.0,0)
					VoltDiff (shf_mV(4),1,mV250C,2,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
		
' Ouput also meteo_mV (data in mV) if flag1 is High
		If Flag(1) = True Then
 
				CallTable meteo_mV
		
		EndIf 
			
	NextScan
EndProg

