100% found this document useful (1 vote)
178 views19 pages

CR 1000 X

This document contains program code and configuration settings for a CR1000X datalogger. It defines variables for internal temperature, battery voltage, and modem/AWS center connectivity checks. It also contains constants for station information like ID code and contact details. Wiring diagrams and sensor configuration are provided for wind speed/direction, temperature/humidity, barometric pressure, and solar radiation sensors connected to the datalogger. Calibration factors and data ranges are defined for converting sensor measurements to engineering units.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
178 views19 pages

CR 1000 X

This document contains program code and configuration settings for a CR1000X datalogger. It defines variables for internal temperature, battery voltage, and modem/AWS center connectivity checks. It also contains constants for station information like ID code and contact details. Wiring diagrams and sensor configuration are provided for wind speed/direction, temperature/humidity, barometric pressure, and solar radiation sensors connected to the datalogger. Calibration factors and data ranges are defined for converting sensor measurements to engineering units.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 19

'CR1000X Series Datalogger

'date: 20 Februari 2021


'program modified by : AWS IRK - Team
'Edited by : Trojans(121220)
'===========================================================================
'Logger : CR1000X
'Versi : Master 3.2-2021

Public PTemp 'Internal pannel temperature


Public batt_volt 'Battery voltage
Public PingModem
Public PingAWSCenter

'###########################################################################
'===========================================================================
'================= VARIABLE STASIUN--WAJIB ISI =============================
'===========================================================================
Const Kode_Stasiun = "STA2156"
Const Nomor_Kartu = "0852xxxxxxxxx"
Const Nomor_Penjaga = "081xxxxxxxx"
Const Waktu_Pengiriman = 10 '(menit) BISA DILAKUKAN UJI COBA PENGIRIMAN 1 MENIT
Const IPModem = "192.168.0.1" 'diisi berdasarkan alamat ip modem default
Const AWSCenter = "202.90.198.206"
Const Folder_FTP = "aws"
Const Pass_FTP = "aws"
Const Attach_File = "Ethernet_10M"
Const Time_update = "time.bmkg.go.id"

Const ALTITUDE = 40 'Altitude of the site above sea level in m (AWS IRK)
Const SENSORLEVEL = 2 'Pressure sensor height from station or runway level in m

'###########################################################################
'===========================================================================
'============================ FAKTOR KALIBRASI =============================
'===========================================================================
'HANYA DIISI OLEH SUBBID KALIBRASI KLIMAT ATAU BALAI BESAR BMKG !!!!!!!!!!!
'Faktor koreksi Kalibrasi
Const Fkal_WS = 0
Const Fkal_WD = 0
Const Fkal_Temp = 0
Const Fkal_RH = 0
Const Fkal_Press = 0
Const Fkal_SR = 0

'=============================================================================
'============= 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
'Sensor RMY 05108/05305 [Frequency Output] (Nomor 2)
' White | WS Exc | VX1 |
' Green | WD Sig | SE6 |
' Red | WS Sig | P1 |
' Black | WD REF | G | Jumper
' Black | WS REF | G | Jumper
' Black | EARTH GND | G | Jumper

'Sensor RMY - 03002 Wind Sentry (Nomor 3)


' Red | Wind Spd Sig. | P1 |
' Black | Wind Spd Ref. | AG |
' Clear | Shield. | AG |
' Green | Wind Dir Sig. | SE16 |
' White | Wind Dir Excite | VX1 |

' Sensor Lufft WS200-UMB (SDI-12) (Nomor 4)


' White | Ground | G |
' Brown | Power Supply | 12V / SW12_1 |
' Yellow | SDI-12 Data | C1 |

'WAJIB DIISI !!!!!!!!!!!!!!!!!!!!!!!!!!


'Pemilihan Tipe Wind_Sensor, cth : (Const TRH_sensor = 2)
Const Wind_Sensor = 1

'Parameter Datasheet Wind_Sensor --> WAJIB ISI !!!!!!!!!!!!!!!!!!!!!!!!!


'NB : Hanya untuk Sensor dengan output Analog, jika output Frekuensi/Serial tidak
usah di isi
'Datasheet WS
Const Range_atas_WS = 100
Const Range_bawah_WS = 0
Const Teg_atas_WS = 5 '(satuan volt)
Const Teg_bawah_WS = 0 '(satuan volt)
'Datasheet WD
Const Range_atas_WD = 360
Const Range_bawah_WD = 0
Const Teg_atas_WD = 5 '(satuan volt)
Const Teg_bawah_WD = 0 '(satuan volt)

'NB : Hanya untuk Sensor dengan output Frekuensi, jika output Analog/Serial tidak
usah di isi
'Datasheet WS Frekuensi
Const mult_WS_frek = 0.102 '(datasheet sensor)
Const offset_WS_frek = 0
'Datasheet WD Frekuensi
Const mult_WD_frek = 355 '(datasheet sensor)
Const offset_WD_frek = 0

'###################### 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
'HMP 155E Humidity and Temp. Serial Sensor RS485 (Nomor 2)| Versi Pabrikan
' Pink | RS485A | C8 |
' Brown | RS485B | C7 |
' Blue | Power | 12V |
' Red | Power Ground | G |
' Green | Analog Ground | G |
' Black | Shield | G |

'HMP 155E Humidity and Temp. Serial Sensor RS485 (Nomor 3)| Versi Modif
' Pink | RS485A | C8 | WAJIB SETTING SENSOR !!!
' Brown | RS485B | C7 | TUTORIAL ADA DI LINK
BERIKUT :
' Blue | Power | 12V | https://youtu.be/ZSXR3G40ddM
' Red | Power Ground | G |
' Green | Analog Ground | G |
' Black | Shield | G |

'EYC THS307 Humidity and Temp. Serial Sensor RS485 (Nomor 4)


' Brown | Power Supply | 12V |
' Blue | Ground | G |
' White | D- | C7 |
' Black | D+ | C8 |

'WAJIB DIISI !!!!!!!!!!!!!!!!!!!!!!!!!!


'Pemilihan Tipe TRH_sensor, cth : (Const TRH_sensor = 2)
Const TRH_sensor = 1

'Parameter Datasheet TRH Sensor --> WAJIB ISI !!!!!!!!!!!!!!!!!!!!!!!!!


'NB : Hanya untuk Sensor dengan output Analog, jika output Serial tidak usah di isi
'Datasheet Temp
Const Range_atas_Temp = 60
Const Range_bawah_Temp = -40
Const Teg_atas_Temp = 1 '(satuan volt)
Const Teg_bawah_Temp = 0 '(satuan volt)
'Datasheet RH
Const Range_atas_RH = 100
Const Range_bawah_RH = 0
Const Teg_atas_RH = 1 '(satuan volt)
Const Teg_bawah_RH = 0 '(satuan volt)

'##################### PRESSURE SENSOR WIRING ################################


'-------------|-----------------|-------------------|-----------|
'Wires Colour | Function | CR1000X Connection| Connector |
'-------------|-----------------|-------------------|-----------|
'Barometric Pressure PTB110 [Analog Output] (Nomor 1)
' White | AGND | AGND |
' Green | Sig Ref | SE7 |
' Red | PWR | 12V |
' Black | PWR Ground | G |

'Barometric PTB210 [Analog Output] (Nomor 2)


' White | Vout | SE7 |
' Brown | Analog GND | AG |
' Pink | PWR / Supply | 12V |
' Blue | Ground / Ref | G |

'Barometric PTB210 (RS485 Output) (Nomor 3)


' Pink | PWR | 12V |
' Blue | GND | GND |
' Yellow | PWR Control | C3 |
' White | RS485+ | C5 |
' Brown | RS485- | C6 |

'Barometric PTB210 (RS232C Output) (Nomor 4)


' Pink | PWR | 12V |
' Blue | GND | GND |
' Yellow | PWR Control | C3 |
' Grey | RX | C5 |
' Green | TX | C6 |

'Barometric Pressure 61302V (Analog Output) (Nomor 5)


' White | Vout | SE7 |
' Green | REF | G |
' Red | +PWR | 12V |
' Black | -PWR | G |

'Barometric Pressure 61302V (RS232 Output) (Nomor 6)


' White | RX | C5 |
' Green | TX | C6 |
' Red | +PWR | 12V |
' Black | -PWR | G |
' Shield | REF | G |

'WAJIB DIISI !!!!!!!!!!!!!!!!!!!!!!!!!!


'Pemilihan Tipe Sensor Pressure, cth : (Const Press_sensor = 2)
Const Press_sensor = 1

'Parameter Datasheet Pressure Sensor --> WAJIB ISI !!!!!!!!!!!!!!!!!!!!!!


'NB : Hanya untuk Sensor dengan output Analog, jika output Serial tidak usah di isi
Const Range_atas_Press = 1100
Const Range_bawah_Press = 500
Const Teg_atas_Press = 5 '(satuan volt)
Const Teg_bawah_Press = 0 '(satuan volt)

'###################### 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 |

'WAJIB DIISI !!!!!!!!!!!!!!!!!!!!!!!!!!


'Parameter SR_Sensor
Const Sensitivy_SR = 14.6

'############################ 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 |
'WAJIB DIISI !!!!!!!!!!!!!!!!!!!!!!!!!!
'Parameter TB_sensor
Const Resolusi_TB = 0.2

'################################### MODEM ###################################


'-------------|-----------------|-------------------|-----------|
'Wires Colour | Function | CR1000X Connection| Connector |
'-------------|-----------------|-------------------|-----------|
' Modem Robustel (Nomor 1)
' Red | PWR | SW12_2 |
' Black | GND | G |
' LAN Cable | Ethernet | Ethernet |

' Modem Sierra RV50 (Nomor 2)


' Red | PWR | SW12_2 |
' Black | GND | G |
' White | Enable ON/OFF | SW12_2 |
' LAN Cable | Ethernet | Ethernet |

' Modem Inhand (Nomor 3)


' Red | PWR | SW12_2 |
' Black | GND | G |
' LAN Cable | Ethernet | Ethernet |

' Modem MiniLog (Nomor 4)


' Red | PWR | SW12_2 |
' Black | GND | G |
' Green | TX | C7 |
' White | RX | C8 |

' Modem MX2Turbo (Nomor 5)


' Red | PWR | SW12_2 |
' Black | GND | G |
' Green | TX | C7 |
' White | RX | C8 |

' Modem Sierra FXT009 / GL6100 (Nomor 6)


' Red | PWR | SW12_2 |
' Black | GND | G |
' Green | TX | C8 |
' White | RX | C7 |

'WAJIB DIISI !!!!!!!!!!!!!!!!!!!!!!!!!!


'Pemilihan Tipe Modem, cth : (Const Modem = 1)
Const Modem = 1

'########################### OUTPUT DISPLAY #################################


'Output Display
' Jika tidak menggunakan Display 7 Segment (Nomor 0)

' Display 7 Segment (Nomor 1)


' Red | PWR | 12V |
' Black | GND | G |
' Green | TX | C5 |
' White | RX | C6 |

'WAJIB DIISI !!!!!!!!!!!!!!!!!!!!!!!!!!


'Pemilihan Tipe Output Display, cth : (Const Display = 1)
Const Display = 0

'==================================================================================
==============================
' Wiring PC ke Logger (dengan jarak >50m) {B&B Electronics}
|
'
|----------------------------------------------------------------------------------
---------------------------|
' | CR1000X | RS232 Male to Naked | Conv. RS232 - RS485 | Conv. RS485 - RS232 |
RS232 to USB | PC/LAPTOP |
'
|----------------------------------------------------------------------------------
---------------------------|
' | GND | pin 5 | GND | GND |
ATEN / Prolific | USB PORT |
' | Rx (C2) | pin 2 | RDB(+) | TDB(+) |
atau lainnya | |
' | Tx (C1) | pin 3 | RDA(-) | TDA(-) |
| |
' |------------| | TDB(+) | RDB(+) |
| |
' | Sesuaikan | | TDA(-) | RDA(-) |
| |
' |dengan sisa | | Power Supply | Power Supply |
| |
' | port COM, | | (5V - 12V) | (5V - 12V) |
| |
' | Bisa Pakai PORT CSIO
'==================================================================================
==============================
'==================================================================================
==============================
' Wiring PC ke Logger (dengan jarak >50m) {MOXA TCC-80} --> [Mode 4 Wires RS485]
[SW1 : ON , SW2 : OFF] |
'
|----------------------------------------------------------------------------------
---------------------------|
' | CR1000X | RS232 Male to Naked | Conv. RS232 - RS485 | Conv. RS485 - RS232 |
RS232 to USB | PC/LAPTOP |
'
|----------------------------------------------------------------------------------
---------------------------|
' | GND | pin 5 | GND | GND |
ATEN / Prolific | USB PORT |
' | Rx (C2) | pin 2 | R(+) | T(+) |
atau lainnya | |
' | Tx (C1) | pin 3 | R(-) | T(-) |
| |
' |------------| | T(+) | R(+) |
| |
' | Sesuaikan | | T(-) | R(-) |
| |
' |dengan sisa | | Power Supply | Power Supply |
| |
' | port COM, | | (5V - 12V) | (5V - 12V) |
| |
' | Bisa Pakai PORT CSIO
'==================================================================================
==============================
'==================================================================================
==============================
' Wiring PC ke Logger (dengan jarak >50m) {MOXA TCC-80} --> [Mode 2 Wires RS485]
[SW1 : ON , SW2 : ON] |
'
|----------------------------------------------------------------------------------
---------------------------|
' | CR1000X | RS232 Male to Naked | Conv. RS232 - RS485 | Conv. RS485 - RS232 |
RS232 to USB | PC/LAPTOP |
'
|----------------------------------------------------------------------------------
---------------------------|
' | GND | pin 5 | GND | GND |
ATEN / Prolific | USB PORT |
' | Rx (C2) | pin 2 | D(+) | D(+) |
atau lainnya | |
' | Tx (C1) | pin 3 | D(-) | D(-) |
| |
' | | | Power Supply | Power Supply |
| |
' | | | (5V - 12V) | (5V - 12V) |
| |
' | Bisa Pakai PORT CSIO
'==================================================================================
==============================

'=============================================================================
'==================DEKLARASI VARIABEL DAN UNIT ===============================
'=============================================================================
'Wind_Sensor
Public WS_meas 'Wind speed in m/s Measurement
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 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 RH_meas 'Relative Humidity measurement

Units TA_meas = degC


Units RH_meas = %

'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
Units SR_meas = 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

'=============================================================================
'========================= ALGORITMA PERHITUNGAN =============================
'=============================================================================
'Multip & Offset WSWD
Const Multip_WS = (Range_atas_WS - Range_bawah_WS) / ((Teg_atas_WS -
Teg_bawah_WS)*1000)
Const Offset_WS = Range_bawah_WS + Fkal_WS
Const Multip_WD = (Range_atas_WD - Range_bawah_WD) / ((Teg_atas_WD -
Teg_bawah_WD)*1000)
Const Offset_WD = Range_bawah_WD + Fkal_WD

'Multip & Offset TRH


Const Multip_Temp = (Range_atas_Temp - Range_bawah_Temp) / ((Teg_atas_Temp -
Teg_bawah_Temp)*1000)
Const Offset_Temp = Range_bawah_Temp + Fkal_Temp
Const Multip_RH = (Range_atas_RH - Range_bawah_RH) / ((Teg_atas_RH -
Teg_bawah_RH)*1000)
Const Offset_RH = Range_bawah_RH + Fkal_RH

'Multip & Offset Press


Const Multip_Press = (Range_atas_Press - Range_bawah_Press) / ((Teg_atas_Press -
Teg_bawah_Press)*1000)
Const Offset_Press = Range_bawah_Press + Fkal_Press

'Multip $ Offset SR
Const Multip_SR = ((1000 / Sensitivy_SR) + Fkal_SR)
Const Offset_SR = 0

'=============================================================================
'============================= DEKLARASI OUTPUT DATA =========================
'=============================================================================
Public FTPResult
Public FTPname As String * 100
Public FTPdate As String
Public FTPtime As String
Public TimeOffset As Long

'Public ten_minute_out (30)


Public ten_second_out (12)
Public ten_second_msg_out As String * 100
'Public ten_minute_msg_out As String * 200

Public time (9)


Public days As String, months As String, years As String
Public days_1 As String, months_1 As String, years_1 As String
Public hours As String, minutes As String, seconds As String
Public avTA_out As String
'Public maxTA_out As String
'Public minTA_out As String
Public avRH_out As String
Public avPA_out As String
Public avSR_out As String
'Public maxSR_out As String
Public avWSmeas_out As String
Public avWDmeas_out As String
'Public minWSmeas_out As String
'Public maxWSmeas_out As String
Public tot_ch_out As String

'=============================================================================
'========================= DEKLARASI KONSTANTA ===============================
'=============================================================================

Const StrLen= 1023


Const scan_rate = 2
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 ModemStr As String * StrLen


Dim RecWritten As Boolean

Dim poll As String


Dim PTB210 As String

'=============================================================================
'=========================== DEFINE DATA TABLES ==============================
'=============================================================================

'*******************TABEL 10 DETIK********************
DataTable (ten_second,1,-1)
DataInterval (0,10,Sec,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)
' WindVector (1,WS_meas,WD_meas,FP2,False,0,0,0)
' FieldNames("WS_meas_S_WVT,WindDir_D1_WVT,WindDir_SD1_WVT")
Sample (1,PR_meas_Total,FP2)
EndTable

'******************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)
' Average (1,PA_QFE,IEEE4,False)
' Average (1,PA_QFF,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)
'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)
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 10 menit untuk Modem MX2Turbo -------'


DataTable(MXTurbo_10m,True,-1)
DataInterval(0,10,Min,10)
Sample(1,PR_meas_Total,FP2)
Average(1,WS_meas,FP2,False)
Maximum(1,WS_meas,FP2,False,False)
WindVector (1,WS_meas,WD_meas,FP2,False,0,0,3)
FieldNames("WD_D1_WVT")
Maximum(1,TA_meas,FP2,False,False)
Average(1,TA_meas,FP2,False)
Minimum(1,TA_meas,FP2,False,False)
Sample(1,RH_meas,FP2)
Average(1,PA_meas,IEEE4,False)
Average(1,SR_meas,FP2,SR_meas=NaN)
Maximum(1,SR_meas,FP2,SR_meas=NaN,False)
EndTable

'***********TABEL KIRIM DATA VIA MODEM ETHERNET*****************


DataTable (Ethernet_10M,1,-1) 'Set table size to -1 to autoallocate.
DataInterval (0,Waktu_Pengiriman,Min,10) 'Interval data tabel
Sample(1,FTPdate,String)
Sample(1,FTPtime,String)
Average (1,WS_meas,FP2,False)
Average (1,WD_meas,FP2,False)
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)
Sample (1,PR_meas_Total,FP2)
Average (1,SR_meas,FP2,False)
Maximum (1,SR_meas,FP2,False,False)
Sample (1,batt_volt,FP2)
Average (1,PTemp,FP2,False)
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
Scan (scan_rate,Sec,3,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")

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

'=============================================================================
'############### WIND SENSOR CALCULATION ####################################
'=============================================================================
If Wind_Sensor = 1 Then
'Sensor RMY 05103V Measurements (Voltage Output)
VoltSe (WS_meas,1,mV5000,5,1,0,_50Hz,Multip_WS,Offset_WS)

VoltSe (WD_meas,1,mV5000,6,0,0,_50Hz,Multip_WD,Offset_WD)

ElseIf Wind_Sensor = 2 Then


'05108/05305/Wind Sentry 03002 Measurements (Frequency Output)
PulseCount (WS_meas,1,P1,1,1,mult_WS_frek,offset_WS_frek)

BrHalf (WD_meas,1,mV5000,6,Vx1,1,2500,True ,
0,_50Hz,mult_WD_frek,offset_WD_frek)

ElseIf Wind_Sensor = 3 Then


'Sensor WS200-UMB (SDI-12)
'*****Lufft WS200-UMB SDI-12********
Public Wind_SDI12(4)
Alias Wind_SDI12(1)=WS_meas_Luft
Alias Wind_SDI12(2)=WS_Lufft_max
Alias Wind_SDI12(3)=WD_Lufft_avg
Alias Wind_SDI12(4)=WD_meas_Luft
SDI12Recorder(Wind_SDI12(),C1,"0","R0!",1,0)
WS_meas = WS_meas_Luft
WD_meas = WD_meas_Luft
EndIf
'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

'=============================================================================
'######################## TRH SENSOR CALCULATION ###########################
'=============================================================================
If TRH_sensor = 1 Then
'HMP155A Output Voltage
VoltSe (TA_meas,1,mV5000,1,0,0,_50Hz,Multip_Temp,Offset_Temp)

VoltSe (RH_meas,1,mV5000,2,0,0,_50Hz,Multip_RH,Offset_RH)

ElseIf TRH_sensor = 2 Then


'HMP155E serial RS485 versi pabrik
Public NBytesReturned As Long
Public SerialIndest As String * 26
Public HMP155(2)
Alias HMP155(1)=RH_meas_HMP
Alias HMP155(2)=TA_meas_HMP
Public String_1 As String
Public String_2 As String
'SequentialMode
SerialOpen (ComC7,4800,10,0,53,4)
String_1 = "SMODE RUN"+CRLF
String_2 = "R"+CRLF
SerialOut (ComC7,String_1,"RUN",3,100)
Delay (0,200,mSec)
SerialOut (ComC7,String_2,"RH",3,100)
SerialInRecord (ComC7,SerialIndest,00,25,&H0D0A,NBytesReturned,00)
SplitStr (HMP155(1),SerialIndest,"=",2,0)
TA_meas = TA_meas_HMP + Fkal_Temp
RH_meas = RH_meas_HMP + Fkal_RH

ElseIf TRH_sensor = 3 Then


'HMP155E serial RS485 versi modif
Public TempRH As String * 200
Public UNR As Long
'SequentialMode
SerialOpen (ComC7,9600,16,0,53,4)
SerialInRecord(ComC7,TempRH,42,0,35,UNR,01)
SplitStr (HMP155(),TempRH,"",2,0)
TA_meas = TA_meas_HMP + Fkal_Temp
RH_meas = RH_meas_HMP + Fkal_RH

ElseIf TRH_sensor = 4 Then


'EYC THS307 serial RS485
Public TH307_PollResult As Long
Public THS307_Data(2)
Alias THS307_Data(1) = TA_meas_ECY
Alias THS307_Data(2) = RH_meas_ECY
SerialOpen (ComC7,9600,3,0,500,4)
ModbusMaster (TH307_PollResult,ComC7,9600,1,3,THS307_Data(),1025,2,1,25)
TA_meas = TA_meas_ECY + Fkal_Temp
RH_meas = RH_meas_ECY + Fkal_RH

EndIf
'Convert C to F
TA_Fah = 9/5*TA_meas+32
If TA_meas>40 Then TA_meas=Over
If TA_meas<10 Then TA_meas=NC
If RH_meas<5 Then RH_meas=NC
If RH_meas>100 Then RH_meas=Over
If TA_meas="NAN" Then TA_meas=0
If RH_meas="NAN" Then RH_meas=0

'=============================================================================
'############### PRESSURE SENSOR CALCULATION ################################
'=============================================================================
If Press_sensor = 1 Then
'PTB110 output voltage
VoltSe (PA_meas,1,mv5000,7,False,0,_50Hz,Multip_Press,Offset_Press)

ElseIf Press_sensor = 2 Then


'PTB210 output voltage
VoltSe (PA_meas,1,mv5000,7,False,0,_50Hz,Multip_Press,Offset_Press)

ElseIf Press_sensor = 3 Then


'PTB210 Output RS485
SerialOpen (ComC5,9600,10,0,10000,4)
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

ElseIf Press_sensor = 4 Then


'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

ElseIf Press_sensor = 5 Then


'RM Young 61302V output voltage
VoltSe (PA_meas,1,mv5000,7,False,0,_50Hz,Multip_Press,Offset_Press)

ElseIf Press_sensor = 6 Then


'RM Young 61302V RS232 Output
Public BP_string As String
Public lngBPBytesReturned
Alias BP_string = BP_61302V
SerialInRecord(ComC5,BP_61302V,&H0A,0,&H0D,lngBPBytesReturned,01)
PA_meas = BP_61302V
PA_meas = PA_meas + Fkal_Press
EndIf

If PA_meas<Range_bawah_Press Then PA_meas=NC


If PA_meas>Range_atas_Press 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,Multip_SR,Offset_SR)
If SR_meas<0.3 Then SR_meas=0

'=============================================================================
'#################### TB SENSOR CALCULATION ##################################
'=============================================================================
'TB3 / TB4 / HYDROLOGICAL /
PulseCount (PR_meas,1,P2,1,0,Resolusi_TB,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 ten_second
CallTable one_minute
CallTable ten_minute
CallTable one_hour
CallTable one_day
CallTable MXTurbo_10M
CallTable Ethernet_10M

'=============================================================================
'========================== 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

'=============================================================================
'====================== VARIABEL RESET =======================================
'=============================================================================
If (hours<23) Then
days_1 = days
months_1 = months
years_1 = years
EndIf

NextScan
'=============================================================================
'============================= SEND DATA =====================================
'=============================================================================
SlowSequence
Do
Delay(1,10,uSec)
If Modem <= 3 Then
'*****MODEM Ethernet******
FTPdate = days&"/"&months&"/"&years
FTPtime = hours&":"&minutes&":"&seconds
FTPname = Kode_Stasiun&years&months&days&hours&minutes&".txt"

FTPResult=FTPClient (AWSCenter,Folder_FTP,Pass_FTP, Attach_File ,FTPname, 0,


0, Waktu_Pengiriman, Min,1015)

ElseIf Modem = 4 Then


''*****MODEM MINILOG******
RecWritten = Ethernet_10M.Output(1,1)
If RecWritten
GetRecord(ModemStr,Ethernet_10M,1)
SerialOut(ComC7,ModemStr,"",0,0)
EndIf
ElseIf Modem = 5 Then
'*****MODEM MX2Turbo******
RecWritten = MXTurbo_10m.Output(1,1)
If RecWritten
GetRecord(ModemStr,MXTurbo_10m,1)
SerialOut(ComC7,ModemStr,"",0,0)
EndIf

ElseIf Modem = 6 Then


'*****MODEM SIERRA Versi Klimat******
If ten_second.output (1.1) Then
GetRecord (ten_second_out(),ten_second,1)
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")
avTA_out = FormatFloat (ten_second_out(1),"%0.1f")
avRH_out = FormatFloat (ten_second_out(2),"%0.1f")
avPA_out = FormatFloat (ten_second_out(3),"%0.1f")
avSR_out = FormatFloat (ten_second_out(4),"%0.1f")
avWSmeas_out = FormatFloat (ten_second_out(5),"%0.1f")
avWDmeas_out = FormatFloat (ten_second_out(6),"%0.0f")
tot_ch_out = FormatFloat (ten_second_out(7),"%0.1f")
'Compile
ten_second_msg_out =
days+"/"+months+"/"+years+","+hours+":"+minutes+":"+seconds+","+avWDmeas_out+","+av
WSmeas_out+","+avTA_out+","+avRH_out+","+avPA_out+","+avSR_out+","+tot_ch_out'+CHR(
10)+CHR(13)
SerialOut (ComC7,ten_second_msg_out,"",0,0) ' Com C7/C8
(Modem Sierra FXT009 / GL6100)
EndIf
EndIf
If TimeIntoInterval (0,1,Day) Then
FTPdate = days&"/"&months&"/"&years
FTPtime = hours&":"&minutes&":"&seconds
FTPname = Kode_Stasiun&years_1&months_1&days_1&".txt"

FTPResult=FTPClient
(AWSCenter,Folder_FTP,Pass_FTP,Attach_File,FTPname,8,0,Waktu_Pengiriman, Min,1015)

EndIf

'------Pengiriman Via TCP------


' Socket = TCPOpen ("202.90.199.132",443,0)
' koneksi = "* GETTIME "+id+CHR(10)+CHR(13)
' rawdata = avWS_out+" "+avWD_out+" "+avTA_out+" "+avRH_out+" "+avPA_out+"
"+tot_ch_out+" "+avSR_out+" " +0+" "+avWT_out+" "+avWL_Total+" "+avWSmax_out+"
"+avTAmax_out+" "+avTAmin_out+" "+avSRmax_out
' file = "$"+" "+id+" "+FTPdate+" "+FTPtime+" "+rawdata+CHR(10)+CHR(13)
' SerialOut (Socket,koneksi,0,1,0) 'send out a string
' Delay(1,200,mSec)
' SerialOut (Socket,file,0,1,0) 'send out a string
' Delay(1,200,mSec)
' TCPClose(Socket)'Close the socket; this can take up to 200 msec

'=============================================================================
'========================== OUTPUT DISPLAY ===================================
'=============================================================================

If Display = 1 Then
'*****DISPLAY 7 Segment******
If ten_second.output (1.1) Then
GetRecord (ten_second_out(),ten_second,1)
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")
avTA_out = FormatFloat (ten_second_out(1),"%0.1f")
avRH_out = FormatFloat (ten_second_out(2),"%0.1f")
avPA_out = FormatFloat (ten_second_out(3),"%0.1f")
avSR_out = FormatFloat (ten_second_out(4),"%0.1f")
avWSmeas_out = FormatFloat (ten_second_out(5),"%0.1f")
avWDmeas_out = FormatFloat (ten_second_out(6),"%0.0f")
tot_ch_out = FormatFloat (ten_second_out(7),"%0.1f")
'Compile
ten_second_msg_out =
days+"/"+months+"/"+years+","+hours+":"+minutes+":"+seconds+","+avWDmeas_out+","+av
WSmeas_out+","+avTA_out+","+avRH_out+","+avPA_out+","+avSR_out+","+tot_ch_out'+CHR(
10)+CHR(13)
SerialOut (ComC5,ten_second_msg_out,"",0,0) ' Com C5/C6
(Display 7 Segment)
EndIf
EndIf

Loop
EndProg
'=============================================================================
'=============================== FINISH ======================================
'=============================================================================

You might also like