'CR1000X Series Datalogger 'date: 21 Desember 2021 'program modified by : AWS IRK - Team 'Edited by : Limestone '=========================================================================== 'Logger = CR1000X 'Script_Version = Master 4.3_2021 '########################################################################### '=========================================================================== '================= VARIABLE STASIUN--WAJIB ISI ============================= '=========================================================================== Const Kode_Stasiun = "160010" Const Nama_Stasiun = "AWS Tambi" Const Provinsi = "jateng" 'untuk topic MQTT (singkat) Const Nomor_Kartu = "0852xxxxxxxxx" Const Nomor_Penjaga = "081xxxxxxxx" Const IPModem = "192.168.0.1" 'diisi berdasarkan alamat ip modem default Const Time_update = "time.bmkg.go.id" Const AWSCenter = "202.90.198.212" 'Konfigurasi Altitude, Sensor Level, Long, Lat Const LONGITUDE = 98.7182 Const LATITUDE = 3.6154 Const ALTITUDE = 25 'Altitude of the site above sea level in m (AWS IRK) Const SENSORLEVEL = 2 'Pressure sensor height from station or runway level in m 'METODE PENGIRIMAN 'FTP Const Met_FTP = 1 '(1 = ON, 0 = OFF) Const FTP_Interval = 10 '(menit) Const AWSCenter_FTP = "202.90.198.212" Const Folder_FTP = "aws" Const Pass_FTP = "aws" Const Attach_File = "Ethernet_10M" '============================================================================= '============= WIRING SENSOR AWS DAN MODEM =================================== '============================================================================= '###################### WIND SENSOR WIRING ################################### '-------------|-----------------|-------------------|-----------|------------| 'Wires Colour | Function | CR1000X Connection| Connector |kabel_hitam-| '-------------|-----------------|-------------------|-----------|------------| 'Sensor RMY 05103V [Voltage Output] (Nomor 1) ' Red | Power 12V | 12V | ' Green | WS Sig | SE5 | ' White | WD Sig | SE6 | ' Black | WD REF | G | Jumper ' Black | WS REF | G | Jumper ' Black | EARTH GND | G | Jumper '###################### TRH SENSOR WIRING #################################### '-------------|-----------------|-------------------|-----------| 'Wires Colour | Function | CR1000X Connection| Connector | '-------------|-----------------|-------------------|-----------| 'HMP 155 Humidity and Temp. Active Sensor (Nomor 1) ' White | Temp Sig. | SE1 | Pin 1 ' Yellow | RH Sig. | SE2 | Pin 2 ' Green | Signal Ref | AG | Pin 5 ' Blue | Power | 12V | Pin 3 ' Red | Power Ground | G | Pin 4 '##################### PRESSURE SENSOR WIRING ################################ '-------------|-----------------|-------------------|-----------| 'Wires Colour | Function | CR1000X Connection| Connector | '-------------|-----------------|-------------------|-----------| 'Barometric PTB210 (RS232C Output) (Nomor 4) ' Pink | PWR | 12V | ' Blue | GND | GND | ' Yellow | PWR Control | C3 | ' Grey | RX | C5 | ' Green | TX | C6 | '###################### SOLARRAD SENSOR WIRINNG ############################## '-------------|-----------------|-------------------|-----------| 'Wires Colour | Function | CR1000X Connection| Connector | '-------------|-----------------|-------------------|-----------| ' Pyranometer CMP3 / CMP6 / SP Lite 2 ' Red | Signal | Diff2(H) | ' Blue | Signal Ref | Diff2(L) | ' Black | Signal GND | G | '############################ TB SENSOR WIRING ############################### '-------------|-----------------|-------------------|-----------| 'Wires Colour | Function | CR1000X Connection| Connector | '-------------|-----------------|-------------------|-----------| ' Tipping Bucket Rain Gauge ' Red | Signal | P2 | ' Black | Signal Return | G | ' Jika channel P rusak, dpt menggunakan port C1-C8 dengan mengganti script + Pconfig (switch closure) ' Red | Signal | C1 - C8 (pilih) | ' Black | Signal Return | 5V | '################################### MODEM ################################### '-------------|-----------------|-------------------|-----------| 'Wires Colour | Function | CR1000X Connection| Connector | '-------------|-----------------|-------------------|-----------| ' Modem Robustel (Nomor 1) ' Red | PWR | SW12_2 | ' Black | GND | G | ' LAN Cable | Ethernet | Ethernet | '============================================================================= '==================DEKLARASI VARIABEL DAN UNIT =============================== '============================================================================= 'datalogger Public SN_logger As String Public OS_Version As String Public Prog_Name As String Public Lithium_Battery Units Lithium_Battery = V 'Wind_Sensor Public WS_meas 'Wind speed in m/s Measurement Public WS_Max Public ws_knot 'Wind speed in knots Measurement Public ws_Kph 'Wind speed in KM/H Measurement Public WD_meas 'Wind direction Measurement Units WS_meas = m/s Units WS_Max = m/s Units WD_meas = deg Units ws_knot = Knots Units ws_Kph = Km/h 'TRH_Sensor Public TA_meas 'Temperature Measurement Public TA_Fah 'Temperature in Fahrenheit Public TA_Max 'Max Temperature Measurement Public TA_Min 'Min Temperature Measurement Public RH_meas 'Relative Humidity measurement Public RH_Max 'Max Relative Humidity measurement Public RH_Min 'Min Relative Humidity measurement Units TA_meas = degC Units TA_Max = degC Units TA_Min = degC Units RH_meas = % Units RH_Max = % Units RH_Min = % 'Pressure_Sensor Public PA_meas 'Barometric Pressure Measurement Public PA_QFE 'Barometric pressure adjusted to runway or station level Public PA_QFF_Csi 'Barometric Pressure adjusted to sea level-formula calculation Public PA_QFF 'Barometric Pressure adjusted to sea level-depend Temp. sensor Public Estimasi_QNH Units PA_meas = mbar Units PA_QFF_Csi = mbar Units PA_QFE = mbar Units PA_QFF = mbar Units Estimasi_QNH = mbar 'SR_Sensor Public SR_meas 'Solar Radiation Measurement Public SR_Max Units SR_meas = W/m^2 Units SR_Max = W/m^2 'Typing_Sensor Public PR_meas 'Rain Measurement Public PR_meas_Total 'As String 'Total Rain 'Public PR_meas_Tot Public RainIntensity5min '5 minute rainfall intensity Public rain10min '10 minute intensity Public rainHourly '60 min intensity Public RainDaily Units PR_meas = mm Units PR_meas_Total = mm 'Deklarasi PUBLIC lain-lain Public PTemp 'Internal pannel temperature Public batt_volt 'Battery voltage Public PingModem Public PingAWSCenter '============================================================================= '============================= DEKLARASI OUTPUT DATA ========================= '============================================================================= Public FTPResult Public FTPname As String * 100 Public FTPdate As String Public FTPtime As String Public TimeOffset As Long Public time (9) Public days As String, months As String, years As String Public hours As String, minutes As String, seconds As String '============================================================================= '========================= DEKLARASI KONSTANTA =============================== '============================================================================= Const StrLen= 1023 Const scan_rate = 10 Const b = 0.0086 'deg C/m of QFE and QFF calculation Const A = 0.021286 'Empirical constand for NR-lite wind correction Const CR=CHR(13) Const LF=CHR(10) Const CRLF=CR+LF Const Over="-999" Const NC="errr" '============================================================================= '========================= DEKLARASI VARIABEL LAIN =========================== '============================================================================= Dim rfAvg 'Running average to calculate intensity Dim DisableRainfall_10 As Boolean Dim DisableRainfall_Hour As Boolean 'DEKLARASI CURAH HUJAN Dim hujan Dim ch Dim chharian ''deklarasi perhitungan QFE dan QFF Dim xQFE Dim xQFF Dim QFF_offset Dim poll As String Dim PTB210 As String '============================================================================= '=========================== DEFINE DATA TABLES ============================== '============================================================================= '******************TABEL 1 MENITAN******************** DataTable (one_minute,1,-1) DataInterval (0,1,Min,10) Average (1,TA_meas,FP2,False) Average (1,RH_meas,FP2,False) Average (1,PA_meas,IEEE4,False) Average (1,SR_meas,IEEE4,False) Average (1,WS_meas,IEEE4,False) Average (1,WD_meas,FP2,False) Sample (1,PR_meas,FP2) Sample (1,PR_meas_Total,FP2) WindVector (1,WS_meas,WD_meas,FP2,False,0,0,0) FieldNames("WS_meas_S_WVT,WindDir_D1_WVT,WindDir_SD1_WVT") Average (1,ws_knot,IEEE4,False) EndTable '*******************TABEL 10 MENIT******************** DataTable (ten_minute,1,-1) DataInterval (0,10,Min,10) Average (1,TA_meas,FP2,False) Maximum (1,TA_meas,FP2,False,False) Minimum (1,TA_meas,FP2,False,False) Average (1,RH_meas,FP2,False) Average (1,PA_meas,IEEE4,False) Average (1,PA_QFE,IEEE4,False) Average (1,PA_QFF,IEEE4,False) Average (1,SR_meas,IEEE4,False) Maximum (1,SR_meas,IEEE4,False,False) Maximum (1,WS_meas,IEEE4,False,False) Average (1,WS_meas,IEEE4,False) Minimum (1,WS_meas,IEEE4,False,False) '============================= m/s to knot Maximum (1,ws_knot,IEEE4,False,False) Average (1,ws_knot,IEEE4,False) '============================== Average (1,WD_meas,FP2,False) WindVector (1,WS_meas,WD_meas,IEEE4,False,0,0,0) FieldNames("WS_meas_S_WVT,WindDir_D_WVT,WindDir_SD_WVT") Sample (1,rain10min * 6,FP2) FieldNames ("RainIntensity:mm/hour") Maximum (1,RainIntensity5min,FP2,DisableRainfall_10,False) Totalize (1,PR_meas,FP2,False) Sample (1,PR_meas_Total,FP2) EndTable '********************TABEL 1 JAM*********************** DataTable (one_hour,1,-1) DataInterval (0,1,Hr,10) Sample (1,PTemp,FP2) Average (1,TA_meas,FP2,False) Average (1,RH_meas,FP2,False) Average (1,PA_meas,IEEE4,False) Average (1,PA_QFE,IEEE4,False) Average (1,PA_QFF,IEEE4,False) Average (1,SR_meas,IEEE4,False) ' Average (1,NR_meas,FP2,False) Maximum (1,WS_meas,IEEE4,False,False) Average (1,WS_meas,IEEE4,False) Minimum (1,WS_meas,IEEE4,False,False) '============================= m/s to knot Maximum (1,ws_knot,IEEE4,False,False) Average (1,ws_knot,IEEE4,False) '============================== Average (1,WD_meas,FP2,False) WindVector (1,WS_meas,WD_meas,IEEE4,False,0,0,0) FieldNames("WS_meas_S_WVT,WindDir_D1_WVT,WindDir_SD1_WVT") Sample (1,rainHourly,FP2) FieldNames ("CH_1Jam") Maximum (1,RainIntensity5min,FP2,DisableRainfall_Hour,False) Totalize (1,PR_meas,FP2,False) EndTable '********************TABEL 1 HARI*********************** DataTable (one_day,1,-1)'True,365) DataInterval(0,1,Day,10) Sample (1,PTemp,FP2) Average (1,TA_meas,FP2,False) Maximum(1,TA_meas,FP2,False,False) Minimum(1,TA_meas,FP2,False,False) Average (1,RH_meas,FP2,False) Maximum(1,RH_meas,FP2,False,False) Minimum(1,RH_meas,FP2,False,False) Average (1,PA_meas,IEEE4,False) Maximum (1,PA_meas,IEEE4,False,False) Minimum (1,PA_meas,IEEE4,False,False) Average (1,PA_QFE,IEEE4,False) Maximum (1,PA_QFE,IEEE4,False,False) Minimum (1,PA_QFE,IEEE4,False,False) Average (1,PA_QFF,IEEE4,False) Maximum (1,PA_QFF,IEEE4,False,False) Minimum (1,PA_QFF,IEEE4,False,False) Average (1,SR_meas,IEEE4,False) Maximum (1,SR_meas,IEEE4,False,False) Minimum (1,SR_meas,IEEE4,False,False) Maximum (1,WS_meas,IEEE4,False,False) Average (1,WS_meas,IEEE4,False) Minimum (1,WS_meas,IEEE4,False,False) Average (1,WD_meas,FP2,False) Average (1,ws_knot,IEEE4,False) Maximum (1,ws_knot,IEEE4,False,False) Minimum (1,ws_knot,IEEE4,False,False) WindVector (1,WS_meas,WD_meas,IEEE4,False,0,0,0) FieldNames("WS_meas_S_WVT,WindDir_D1_WVT,WindDir_SD1_WVT") Sample (1,rainHourly,FP2) FieldNames ("RainIntensity:mm/hour") Maximum (1,RainIntensity5min,FP2,DisableRainfall_Hour,False) Totalize(1,PR_meas,FP2,False) EndTable '***********TABEL KIRIM DATA VIA MODEM ETHERNET***************** DataTable (Ethernet_10M,1,-1) 'Set table size to -1 to autoallocate. DataInterval (0,FTP_Interval,Min,10) 'Interval data tabel Sample(1,FTPdate,String) Sample(1,FTPtime,String) Average (1,WS_meas,FP2,False) Maximum (1,WS_meas,FP2,False,False) Average (1,WD_meas,FP2,False) Average (1,TA_meas,FP2,False) Sample (1,TA_Max,FP2) Sample (1,TA_Min,FP2) Average (1,RH_meas,FP2,False) Average (1,PA_meas,IEEE4,False) Sample (1,PR_meas_Total,FP2) Average (1,SR_meas,FP2,False) Sample (1,SR_Max,FP2) Sample (1,batt_volt,FP2) Average (1,PTemp,FP2,False) Sample (1,Lithium_Battery,FP2) EndTable '***********TABEL KIRIM DATA VIA MQTT***************** DataTable (MQTT_Table,1,-1) 'Set table size to -1 to autoallocate. DataInterval (0,1,Min,10) 'Interval data tabel Sample(1,Kode_Stasiun,String) Sample(1,FTPdate,String) Sample(1,FTPtime,String) Average (1,WS_meas,FP2,False) Sample (1,WS_Max,FP2,False) Average (1,WD_meas,FP2,False) Average (1,TA_meas,FP2,False) Sample (1,TA_Max,FP2) Sample (1,TA_Min,FP2) Average (1,RH_meas,FP2,False) Average (1,PA_meas,IEEE4,False) Sample (1,PR_meas_Total,FP2) Average (1,SR_meas,FP2,False) Sample (1,SR_Max,FP2) Sample (1,batt_volt,FP2) Average (1,PTemp,FP2,False) Sample (1,Lithium_Battery,FP2) MQTTPublishTable(0,0,1,Min,1,NaN,NaN,NaN) EndTable '============================================================================= '================================ PROGRAM ==================================== '============================================================================= 'Main Program BeginProg SerialOpen (ComC1,9600,0,0,100) 'COM1 OPEN 'SerialOpen (ComC3,9600,0,0,100) 'COM2 OPEN 'SerialOpen (ComC5,9600,0,0,100) 'COM3 OPEN SerialOpen (ComC7,9600,0,0,100) 'COM4 OPEN 'Deklarasi awal nilai Suhu Min TA_Min = 60 RH_Min = 100 Scan (scan_rate,Sec,10,0) RealTime (time()) days = FormatFloat (time(3),"%02.0f") months = FormatFloat (time(2),"%02.0f") years = FormatFloat (time(1),"%02.0f") hours = FormatFloat (time(4),"%02.0f") minutes = FormatFloat (time(5),"%02.0f") seconds = FormatFloat (time(6),"%02.0f") FTPdate = days&"/"&months&"/"&years FTPtime = hours&":"&minutes&":"&seconds If IfTime(0,10,Min) Then DisableRainfall_10 = True If IfTime(5,10,Min) Then DisableRainfall_10 = False If IfTime(0,60,Min) Then DisableRainfall_Hour = True If IfTime(5,60,Min) Then DisableRainfall_Hour = False PanelTemp (PTemp,50) Battery (batt_volt) PingModem = PingIP(IPModem,100) PingAWSCenter = PingIP(AWSCenter,100) If IfTime (0,1,Hr) Then TimeOffset = NetworkTimeProtocol (Time_update, 0,1000) EndIf 'Status Logger SN_logger = status.SerialNumber OS_Version = status.OSVersion Prog_Name = status.ProgName Lithium_Battery = status.LithiumBattery '============================================================================= '############### WIND SENSOR CALCULATION #################################### '============================================================================= 'Sensor RMY 05103V Measurements (Voltage Output) VoltSe (WS_meas,1,mV5000,5,1,0,_50Hz,0.02,0) VoltSe (WD_meas,1,mV5000,6,0,0,_50Hz,0.072,0) 'Convert Value If WS_meas < 0.2 Then WS_meas = 0 ws_knot = WS_meas * 1.9438445 ws_Kph = WS_meas * 3.6 If WD_meas >= 360 OR WD_meas <0 Then WD_meas = 0 'Update WS Max 1 hari If WS_meas > WS_Max Then WS_Max = WS_meas '============================================================================= '######################## TRH SENSOR CALCULATION ########################### '============================================================================= 'HMP155A Output Voltage VoltSe (TA_meas,1,mV5000,1,0,0,_50Hz,0.1,-40) VoltSe (RH_meas,1,mV5000,2,0,0,_50Hz,0.1,0) 'Convert C to F TA_Fah = 9/5*TA_meas+32 If TA_meas>60 Then TA_meas=Over If TA_meas<-40 Then TA_meas=NC If RH_meas<0 Then RH_meas=0 If RH_meas>100 Then RH_meas=100 If TA_meas="NAN" Then TA_meas=0 If RH_meas="NAN" Then RH_meas=0 'Update TRH Max & Min 1 hari If TA_meas > TA_Max Then TA_Max = TA_meas If TA_meas < TA_Min Then TA_Min = TA_meas If RH_meas > RH_Max Then RH_Max = RH_meas If RH_meas < RH_Min Then RH_Min = RH_meas If TA_Min < 5 Then TA_Min = TA_meas If RH_Min < 20 Then RH_Min = RH_meas '============================================================================= '############### PRESSURE SENSOR CALCULATION ################################ '============================================================================= 'PTB210 Output RS232 SerialOpen (ComC5,9600,10,0,10000,0) poll = CHR(46)+CHR(80)+CHR(13)+CHR(10) PortSet (C3,0) SerialOut (ComC5,poll,"",1,0) SerialIn (PTB210,ComC5,200,CHR(10),9) PA_meas=PTB210 'PA_meas = PA_meas + Fkal_Press If PA_meas<500 Then PA_meas=NC If PA_meas>1100 Then PA_meas=Over If PA_meas="NAN" Then PA_meas=0 'Using Altitude, calculate Barometric Pressure offset To adjust pressure To sealevel QFF_offset = (1013.25*(1-(1-(ALTITUDE/44307.69231))^5.25328)) PA_QFF_Csi = PA_meas + QFF_offset Estimasi_QNH = PA_QFF_Csi 'Tekanan dihitung berdasar ketinggian sensor tekanan dari landasan atau level stasiun dan suhu udara sensor TA_meas xQFE = SENSORLEVEL/(7996+(b*SENSORLEVEL)+(29.33*TA_meas)) PA_QFE = PA_meas*(EXP(1)^xQFE) 'Tekanan dihitung berdasar Altitude dan suhu udara sensor TA_meas xQFF = ALTITUDE/(7996+(b*ALTITUDE)+(29.33*TA_meas)) PA_QFF = PA_QFE*(EXP(1)^xQFF) '============================================================================= '#################### SR SENSOR CALCULATION ################################## '============================================================================= 'CMP3, CMP6. SPLITE -2 VoltDiff (SR_meas,1,mV5000,2,True,0,_50Hz,81.9672131147541,0) If SR_meas<0.3 Then SR_meas=0 'Update SR Max 1 hari If SR_meas > SR_Max Then SR_Max = SR_meas '============================================================================= '#################### TB SENSOR CALCULATION ################################## '============================================================================= 'TB3 / TB4 / HYDROLOGICAL / PulseCount (PR_meas,1,P2,1,0,0.2,0) PR_meas_Total = PR_meas + PR_meas_Total ch = PR_meas+ch hujan = PR_meas+hujan chharian = PR_meas+chharian If PR_meas_Total >= 350 Then PR_meas_Total=Over '-----(keep 10 minute rainfall total)--------------- '-----------rain10min += PR_meas-------------------- rain10min = ch '-------(keep hourly rainfall total)---------------- '-----------rainHourly += PR_meas------------------- rainHourly = hujan RainDaily = chharian '-------Take a 5 minute running average------------- AvgRun (rfAvg,1,PR_meas,300) '--Calculate the rainfall intensity in mm/hour------ RainIntensity5min = rfAvg * 300 * 12 '============================================================================= SW12(SW12_1,1) ' SW12V 1 aktif SW12(SW12_2,1) ' SW12V 2 aktif If TimeIntoInterval (1,1440,Min) Then Delay (0,10,Sec) SW12(SW12_2,0) ' SW12V off di jam 00 menit 00 EndIf '============================================================================= '=========================== CALL TABLE ====================================== '============================================================================= CallTable one_minute CallTable ten_minute CallTable one_hour CallTable one_day CallTable Ethernet_10M CallTable MQTT_Table '============================================================================= '========================== RAIN RESET ======================================= '============================================================================= 'reset rain every 10 minute If IfTime(0,10,Min) Then rain10min = 0 ch=0 EndIf 'reset rain every 1 hour If IfTime(0,60,Min) Then rainHourly = 0 hujan=0 EndIf 'reset rain every 1 day If TimeIntoInterval (0,1,Day) Then Delay (0,5,Sec) PR_meas = 0 PR_meas_Total = 0 RainDaily = 0 chharian = 0 ' PR_meas_Tot = 0 EndIf '========================== TRH & SR RESET ======================================= 'Reset nilai If TimeIntoInterval (0,1,Day) Then Delay (0,5,Sec) TA_Min = 60 RH_Min = 100 TA_Max = 0 RH_Max = 0 SR_Max = 0 WS_Max = 0 EndIf '============================================================================= '============================= SEND DATA ===================================== '============================================================================= 'data WS_meas = FormatFloat (WS_meas,"%2.1f") WS_Max = FormatFloat (WS_Max,"%2.1f") WD_meas = FormatFloat (WD_meas,"%3.1f") TA_meas = FormatFloat (TA_meas,"%2.2f") TA_Max = FormatFloat (TA_Max,"%2.2f") TA_Min = FormatFloat (TA_Min,"%2.2f") RH_meas = FormatFloat (RH_meas,"%3.2f") RH_Max = FormatFloat (RH_Max,"%3.2f") RH_Min = FormatFloat (RH_Min,"%3.2f") PA_meas = FormatFloat (PA_meas,"%4.2f") PR_meas_Total = FormatFloat (PR_meas_Total,"%3.1f") SR_meas = FormatFloat (SR_meas,"%4.1f") SR_Max = FormatFloat (SR_Max,"%3.1f") batt_volt = FormatFloat (batt_volt,"%2.1f") PTemp = FormatFloat (PTemp,"%2.2f") Lithium_Battery = FormatFloat (Lithium_Battery,"%1.2f") '*****Pengiriman Via FTP****** FTPname = Kode_Stasiun&years&months&days&hours&minutes&".txt" FTPResult = FTPClient (AWSCenter_FTP,Folder_FTP,Pass_FTP, Attach_File ,FTPname, 0, 0, FTP_Interval, Min,1015) NextScan EndProg '============================================================================= '=============================== FINISH ====================================== '=============================================================================