
'CR1000X
'Programas PCDs APAC
'Campbell Scientific do Brasil
'em 12/03/2019
'Observacoes:
'Programa baseado no AESA

'Revisoes:
'V1- adicionado rotina de reset do modem no intervalo de 15 minutos

'**********************************************************************
'Declarao das variveis
'Tensao da Bateria
Public BattV
Units BattV=Volts

'Temperatura interna do datalogger
Public PTemp_c
Units PTemp_c=DegC 

'Sensor de radiacao solar
Public SlrkW
Public SlrMJ
Units SlrkW=kW/m^2
Units SlrMJ=MJ/m^2

'Sensor de umidade interna da caixa
Public Enc_RH
Units Enc_RH=%

'Sensor de umidade do ar
Dim sensor_rh,Vout

'Sensor de chuva 
Public Rain_mm
Units Rain_mm=mm

'Regulador de voltagem 
Public CH200Data(9)
Alias CH200Data(1)=BattV_2
Alias CH200Data(2)=BattI
Alias CH200Data(3)=LoadI
Alias CH200Data(4)=ChgInV
Alias CH200Data(5)=ChgInI
Alias CH200Data(6)=ChgTempC
Alias CH200Data(7)=ChgState
Alias CH200Data(8)=ChgSource
Alias CH200Data(9)=ChkBatt
Units BattV_2=V
Units BattI=A
Units LoadI=A
Units ChgInV=V
Units ChgInI=A
Units ChgTempC=Deg C
Units ChgState=code
Units ChgSource=code
Units ChkBatt=code

'Sensor de temperatura e umidade do solo
Public SDI12_2(6)
Alias SDI12_2(1)=Umid1
Alias SDI12_2(2)=Umid2
Alias SDI12_2(3)=Umid3
Alias SDI12_2(4)=Umid4
Alias SDI12_2(5)=Umid5
Alias SDI12_2(6)=Umid6
Units Umid1=%
Units Umid2=%
Units Umid3=%
Units Umid4=%
Units Umid5=%
Units Umid6=%

Public SDI12_3(6)
Alias SDI12_3(1)=Temp1
Alias SDI12_3(2)=Temp2
Alias SDI12_3(3)=Temp3
Alias SDI12_3(4)=Temp4
Alias SDI12_3(5)=Temp5
Alias SDI12_3(6)=Temp6
Units Temp1=degC
Units Temp2=degC
Units Temp3=degC
Units Temp4=degC
Units Temp5=degC
Units Temp6=degC

'Sensor de pressao baromtrica
Public BP_mbar
Units BP_mbar=mbar

'Sensor de temperatura e umidade do ar
Public AirTC
Public RH
Units AirTC=Deg C
Units RH=%

'Sensores de velocidade e direcao de vento
'Para 4 metros
Public RMY86000_4 (4) As Float
Public Serial86000_4 As String *25
Alias RMY86000_4(2) = Wind_Speed_4
Alias RMY86000_4(3) = Wind_Direction_4
Alias RMY86000_4(4) = Status86004_4
Units Wind_Speed_4 = m/s
Units Wind_Direction_4= Deg

'Para 10 metros
Public RMY86000_10 (4) As Float
Public Serial86000_10 As String *25
Alias RMY86000_10(2) = Wind_Speed_10
Alias RMY86000_10(3) = Wind_Direction_10
Alias RMY86000_10(4) = Status86004_10
Units Wind_Speed_10 = m/s
Units Wind_Direction_10= Deg

Public FTPResult1 ,FTPResult2 ,FTPResult3

'Declaracao das tabelas
'Tabela Horaria
  DataTable(Horaria,True,-1)
  DataInterval(0,60,Min,10)
  CardOut(0,-1)
  
'Umidade Interna
  Minimum (1,Enc_RH,FP2,False,True)
'Tensao da bateria 
  Minimum(1,BattV,FP2,False,False)
'Dados do Painel solar
  Minimum (1,ChgInV,FP2,False,True)
  Minimum (1,ChgInI,FP2,False,True)
'Pressao Barometrica, amostra para os ultimos 10 minutos
  Sample(1,BP_mbar,FP2, False)
'Temperatura do ar
  Average(1,AirTC,FP2,False)
  Maximum(1,AirTC,FP2,False,True)
  Minimum(1,AirTC,FP2,False,True)
'Umidade do ar
  Average(1,RH,FP2,False)
  Maximum(1,RH,FP2,False,True)
  Minimum(1,RH,FP2,False,True)
'Temperatura do solo
'Temperatura do solo 10cm 
  Average(1,Temp1,FP2,False)
  Maximum(1,Temp1,FP2,False,True)
  Minimum(1,Temp1,FP2,False,True)
'Temperatura do solo 20cm 
  Average(1,Temp2,FP2,False)
  Maximum(1,Temp2,FP2,False,True)
  Minimum(1,Temp2,FP2,False,True)
'Temperatura do solo 30cm 
  Average(1,Temp3,FP2,False)
  Maximum(1,Temp3,FP2,False,True)
  Minimum(1,Temp3,FP2,False,True)
'Temperatura do solo 40cm 
  Average(1,Temp4,FP2,False)
  Maximum(1,Temp4,FP2,False,True)
  Minimum(1,Temp4,FP2,False,True)
'Temperatura do solo 50cm 
  Average(1,Temp5,FP2,False)
  Maximum(1,Temp5,FP2,False,True)
  Minimum(1,Temp5,FP2,False,True)
'Temperatura do solo 60cm 
  Average(1,Temp6,FP2,False)
  Maximum(1,Temp6,FP2,False,True)
  Minimum(1,Temp6,FP2,False,True)
'Umidade do solo 10cm
  Average(1,Umid1,FP2,False)
  Maximum(1,Umid1,FP2,False,True)
  Minimum(1,Umid1,FP2,False,True)
'Umidade do solo 20cm
  Average(1,Umid2,FP2,False)
  Maximum(1,Umid2,FP2,False,True)
  Minimum(1,Umid2,FP2,False,True)
'Umidade do solo 30cm
  Average(1,Umid3,FP2,False)
  Maximum(1,Umid3,FP2,False,True)
  Minimum(1,Umid3,FP2,False,True)
'Umidade do solo 40cm
  Average(1,Umid4,FP2,False)
  Maximum(1,Umid4,FP2,False,True)
  Minimum(1,Umid4,FP2,False,True)
'Umidade do solo 50cm
  Average(1,Umid5,FP2,False)
  Maximum(1,Umid5,FP2,False,True)
  Minimum(1,Umid5,FP2,False,True)
'Umidade do solo 60cm
  Average(1,Umid6,FP2,False)
  Maximum(1,Umid6,FP2,False,True)
  Minimum(1,Umid6,FP2,False,True)
 
'Radiacao solar
  Totalize(1,SlrMJ,IEEE4,False)
'Pluviometro 
  Totalize(1,Rain_mm,FP2,False)
'Velocidade e direcao do vento
  WindVector (1,Wind_Speed_4,Wind_Direction_4,FP2,False,0,0,0)
  FieldNames("Vel_Vento_S_WVT_4,Dir_Vento_D1_WVT_4,Dir_Vento_SD1_WVT_4")
  Sample (1,Wind_Direction_4,FP2,False)
  Maximum(1,Wind_Speed_4,FP2,False,True)
  Minimum(1,Wind_Speed_4,FP2,False,True)
  
  WindVector (1,Wind_Speed_10,Wind_Direction_10,FP2,False,0,0,0)
   FieldNames("Vel_Vento_S_WVT_10,Dir_Vento_D1_WVT_10,Dir_Vento_SD1_WVT_10")
  Sample (1,Wind_Direction_10,FP2,False)
  Maximum(1,Wind_Speed_10,FP2,False,True)
  Minimum(1,Wind_Speed_10,FP2,False,True)
'ETO calculada
  ETsz(AirTC,RH,Wind_Speed_4,SlrMJ,360,0,0,10,0,FP2,False)
  FieldNames("ETos,Rso")


EndTable

DataTable(Diaria,True,-1)
  DataInterval(0,1440,Min,10)
  CardOut(0,-1)
'Umidade Interna
  Minimum (1,Enc_RH,FP2,False,True)
'Tensao da bateria 
  Minimum(1,BattV,FP2,False,False)
'Dados do Painel solar
  Minimum (1,ChgInV,FP2,False,True)
  Minimum (1,ChgInI,FP2,False,True)
'Pressao Barometrica, amostra para os ultimos 10 minutos
  Sample(1,BP_mbar,FP2, False)
'Temperatura do ar
  Average(1,AirTC,FP2,False)
  Maximum(1,AirTC,FP2,False,True)
  Minimum(1,AirTC,FP2,False,True)
'Umidade do ar
  Average(1,RH,FP2,False)
  Maximum(1,RH,FP2,False,True)
  Minimum(1,RH,FP2,False,True)
'Temperatura do solo
'Temperatura do solo 10cm 
  Average(1,Temp1,FP2,False)
  Maximum(1,Temp1,FP2,False,True)
  Minimum(1,Temp1,FP2,False,True)
'Temperatura do solo 20cm 
  Average(1,Temp2,FP2,False)
  Maximum(1,Temp2,FP2,False,True)
  Minimum(1,Temp2,FP2,False,True)
'Temperatura do solo 30cm 
  Average(1,Temp3,FP2,False)
  Maximum(1,Temp3,FP2,False,True)
  Minimum(1,Temp3,FP2,False,True)
'Temperatura do solo 40cm 
  Average(1,Temp4,FP2,False)
  Maximum(1,Temp4,FP2,False,True)
  Minimum(1,Temp4,FP2,False,True)
'Temperatura do solo 50cm 
  Average(1,Temp5,FP2,False)
  Maximum(1,Temp5,FP2,False,True)
  Minimum(1,Temp5,FP2,False,True)
'Temperatura do solo 60cm 
  Average(1,Temp6,FP2,False)
  Maximum(1,Temp6,FP2,False,True)
  Minimum(1,Temp6,FP2,False,True)
'Umidade do solo 10cm
  Average(1,Umid1,FP2,False)
  Maximum(1,Umid1,FP2,False,True)
  Minimum(1,Umid1,FP2,False,True)
'Umidade do solo 20cm
  Average(1,Umid2,FP2,False)
  Maximum(1,Umid2,FP2,False,True)
  Minimum(1,Umid2,FP2,False,True)
'Umidade do solo 30cm
  Average(1,Umid3,FP2,False)
  Maximum(1,Umid3,FP2,False,True)
  Minimum(1,Umid3,FP2,False,True)
'Umidade do solo 40cm
  Average(1,Umid4,FP2,False)
  Maximum(1,Umid4,FP2,False,True)
  Minimum(1,Umid4,FP2,False,True)
'Umidade do solo 50cm
  Average(1,Umid5,FP2,False)
  Maximum(1,Umid5,FP2,False,True)
  Minimum(1,Umid5,FP2,False,True)
'Umidade do solo 60cm
  Average(1,Umid6,FP2,False)
  Maximum(1,Umid6,FP2,False,True)
  Minimum(1,Umid6,FP2,False,True)
 
'Radiacao solar
  Totalize(1,SlrMJ,IEEE4,False)
'Pluviometro 
  Totalize(1,Rain_mm,FP2,False)
'Velocidade e direcao do vento
  WindVector (1,Wind_Speed_4,Wind_Direction_4,FP2,False,0,0,0)
  FieldNames("Vel_Vento_S_WVT_4,Dir_Vento_D1_WVT_4,Dir_Vento_SD1_WVT_4")
  Sample (1,Wind_Direction_4,FP2,False)
  Maximum(1,Wind_Speed_4,FP2,False,True)
  Minimum(1,Wind_Speed_4,FP2,False,True)
  
  WindVector (1,Wind_Speed_10,Wind_Direction_10,FP2,False,0,0,0)
   FieldNames("Vel_Vento_S_WVT_10,Dir_Vento_D1_WVT_10,Dir_Vento_SD1_WVT_10")
  Sample (1,Wind_Direction_10,FP2,False)
  Maximum(1,Wind_Speed_10,FP2,False,True)
  Minimum(1,Wind_Speed_10,FP2,False,True)
'ETO calculada
  ETsz(AirTC,RH,Wind_Speed_4,SlrMJ,360,0,0,10,0,FP2,False)
  FieldNames("ETos,Rso")
EndTable

DataTable(Chuva,True,-1)
  DataInterval(0,15,Min,10)
'Pluviometro 
  Totalize(1,Rain_mm,FP2,False )
EndTable

'Main Program
BeginProg
'86000_4 e 86000_10
	SerialOpen(ComC3,9600,3,0,505)
	SerialOpen(ComC5,9600,3,0,505)
	
	'Main Scan
	Scan(30,Sec,1,0)
		'Default CR1000X Datalogger Battery Voltage measurement 'BattV'
		Battery(BattV)
    
    'Leitura da temperatura do painel do Datalogger
    PanelTemp (PTemp_c,60)		

		'liga o Modem
		SW12 (SW12_2,1 )
			
		'LI200R Pyranometer measurements 'SlrMJ' and 'SlrkW'
		VoltDiff(SlrkW,1,mV200,2,True,0,60,1,0)
		If SlrkW<0 Then SlrkW=0
    'DIGITE O RESULTADO DA EQUACAO (1/MULTIPLIER) ENCONTRADO NO TERCEIRO 
		'PARAMETRO DO CERTICATE OF CALIBRATION FOR LI-COR SENSOR
		SlrkW=SlrkW*0.066844
		SlrMJ=SlrkW/2
		
		'CS210 measurement 'Enc_RH'
'		VoltSE(Enc_RH,1,mV5000,5,True,0,60,0.1,0)
    VoltSe (Vout,1,mV5000,5,1,0,250,1.0,0)
    SENSOR_RH=(((Vout/1000)-0.958)/0.0307)
    Enc_RH =(sensor_rh/1.0546-(0.00216*PTemp_C))

		'TB4/TB4MM Rain Gauge measurement 'Rain_mm'
		PulseCount(Rain_mm,1,P1,1,0,0.2,0)
		
		'PS200/CH200 12 V Charging Regulator measurements 'BattV_2', 'BattI', 'LoadI',
		'ChgInV', 'ChgInI', 'ChgTempC', 'ChgState', 'ChgSource', and 'ChkBatt'
		SDI12Recorder(CH200Data(),C1,"1","MC!",1,0,-1)
		
		'Generic SDI-12 Sensor measurements 'Umid1', 'Umid2', 'Umid3', 
		'Umid4', 'Umid5', 'Umid6'
		SDI12Recorder(SDI12_2(),C1,"0","M!",1,0,-1)
		
		'Generic SDI-12 Sensor measurements 'Temp1', 'Temp2', 'Temp3', 
		'Temp4', 'Temp5', 'Temp6'
		SDI12Recorder(SDI12_3(),C1,"0","M4!",1,0,-1)
		
		'R. M. Young 61302V Barometric Pressure Sensor measurement 'BP_mbar'
		'R. M. Young 61302V Barometric Pressure Sensor measurement 'BP_mbar'
		SW12(SW12_1,1,0)
		VoltSe(BP_mbar,1,mV5000,6,True,0,60,0.120,500)
	
    SerialIn (Serial86000_4,ComC3,10,CHR(13),200)
    SerialIn (Serial86000_10,ComC5,10,CHR(13),200)
    SplitStr (RMY86000_4(),Serial86000_4," ",4,0)
    SplitStr (RMY86000_10(),Serial86000_10," ",4,0)
    SerialFlush (ComC3)
    SerialFlush (ComC5)
    If Wind_Speed_4 > 75 Then Wind_Speed_4 =0    
    If Wind_Speed_10 > 75 Then Wind_Speed_10 =0 
   
		'EE181 (constant power) Temperature & Relative Humidity Sensor measurements 'AirTC' and 'RH'
		VoltSe(AirTC,1,mV1000,1,False,0,60,0.1,-40)
		VoltSe(RH,1,mV1000,2,False,0,60,0.1,0)
		If RH>100 AND RH<103 Then RH=100

		'Call Data Tables and Store Data
		CallTable Horaria
		CallTable Diaria
		CallTable Chuva
		
	NextScan

 SlowSequence
 Do
 Delay(1,10,Sec)

'ONDE ESTA ESCRITO APACTESTE DEVE SER SUBSTITUIDO PELO NOME DA ESTACAO, OU SEJA, APAC01 ATE APAC20     
'    FTPResult1 = FTPClient ("ftp.campbellsci.com.br","APAC","@p@c","Horaria","/APAC05/Horaria.dat",9,0,5,Min,-1008)
'    FTPResult2 = FTPClient ("ftp.campbellsci.com.br","APAC","@p@c","Diaria","/APAC05/Diaria.dat",9,0,1440,Min,-1008)
'    FTPResult3 = FTPClient ("ftp.campbellsci.com.br","APAC","@p@c","Chuva","/APAC05/Chuva.dat",9,0,15,Min,-1008)
    
    FTPResult1 = FTPClient ("ftp.ana.gov.br","ftp.pcd","ftp@pcd2009","Horaria","/APAC/APAC05/Horaria.dat",9,0,1,Min,-1008)
    FTPResult2 = FTPClient ("ftp.ana.gov.br","ftp.pcd","ftp@pcd2009","Diaria","/APAC/APAC05/Diaria.dat",9,0,1440,Min,-1008)
    FTPResult3 = FTPClient ("ftp.ana.gov.br","ftp.pcd","ftp@pcd2009","Chuva","/APAC/APAC05/Chuva.dat",9,0,15,Min,-1008)
  Loop	

SlowSequence
Scan(15,Min,1,0)
		
  PPPClose
  Delay(0,10,sec)
  SW12(SW12_2,0)
  Delay(0,5,sec)  
  SW12(SW12_2,1)
  Delay(0,5,sec)
  PPPOpen	

	NextScan

EndProg


