I'm trying to compare 3 WXT520 sensors and a WXT536 all-in-one weather sensor. I have a program running on a CR1000 that collects data from either sensor using a serial rs-232 connection. The CR1000 has 4 COM ports available, so I can use Com1, Com2, Com3, Com4 to talk to these. I was thinking about creating 4 tables, one for each sensor, but how to handle the variables?
For example, I guess I need 4 copies of variables like this? (one for each sensor)
(snippets of program for one WXT520 - I may have copy/pasted things in the wrong order)
DataTable(WxData,True,-1)
DataInterval(0,5,Min,10)
' copied from CSI Forum post
' UTC and Local Data tables simultaneously
' https://www.campbellsci.com/forum?l=thread&forum=1&tid=15941
Sample (1,TmStamp_UTC,Nsec)
Average(1,AirTemp,FP2,False)
Maximum(1,AirTemp,FP2,False,False)
Minimum(1,AirTemp,FP2,False,False)
Average(1,RH,FP2,False)
Maximum(1,RH,FP2,False,False)
Minimum(1,RH,FP2,False,False)
Average(1,Pressure,FP2,False)
Maximum(1,Pressure,FP2,False,False)
Minimum(1,Pressure,FP2,False,False)
Average(1,DewPt,FP2,False)
Maximum(1,DewPt,FP2,False,False)
Minimum(1,DewPt,FP2,False,False)
Average(1,Windchill,FP2,False)
Average(1,HeatIndex,FP2,False)
Average(1,FeelTemp,FP2,False) 'GET THE AVERAGE REAL FEEL TEMPERATURE
Average (1,WindSpdAvg,FP2,False)
Average (1,WindDirAvg,FP2,False)
Maximum(1,WindSpdMax,FP2,False,False) 'GET THE MAXIMUM WINDSPEED
FieldNames("WindGst") 'RENAME THE VARIABLES
EndTable
'These are set so COM ports only have to be changed in one place in the code.
Const wxtCOM = Com4
Const wxtAddr = 1 'Set device address for WMT52, WXT520 here so it can be changed easily
Public Message_Pressure As String *30
Public PressureStr As String *30
Public PressureResult(3)
Alias PressureResult(1) = AirTemp
Alias PressureResult(2) = RH
Alias PressureResult(3) = Pressure
Public DewPt 'THIS IS THE DEWPOINT TEMPERATURE
'UNITS P=H,T=C
Units AirTemp = Deg C
Units RH = %
Units Pressure = hPa
Units DewPt = Deg C 'DEWPOINT UNITS ARE DEGREES CELSIUS
BeginProg
'THIS OPENS UP THE SERIAL PORT FOR THE WXT520 TO COMMUNICATE THROUGH. THEN WE SET UP THE VisMessage.
SerialOpen (wxtCOM,19200,0,100,1000)
Message_Pressure = "R2"+CHR(13)+CHR(10)
'WE GO AHEAD AND SCAN THROUGH THE SENSORS.
Scan(5,Sec,1,0)
'GET THE PRESSURE DATA
SerialFlush(wxtCOM)
SerialOut(wxtCOM,wxtAddr + Message_Pressure,0,0,10)
SerialIn(PressureStr,wxtCOM,50,-1,100)
SplitStr(PressureResult(1),PressureStr,"=",3,6)
CallTable WxData
NextScan
EndProg
Thanks for any help.
Looking through CRBasic help. I think the example program for the Dim and Public instructions may help.
Create a unique table for each sensor (e.g., WxData1, WxData2, WxData3, and WxData4). This way, the data from each sensor is stored separately, which is crucial for comparison.
Most people choose to store the data for the sensors they want to compare in the same table. It makes it easier post processing, because you only have to open one data file. You do have the option of creating separate tables for each sensor. The data logger allows creating a large number of tables, however you wish.
That example program you show is grabbing the pressure data by itself. I recommend setting the all-in-one to output a format with all the values you want in a single message. It will make getting values out faster. I know the manual for the WXT series is a challenge to read, but you can customize the output a lot.
I basically did use 4 tables. I was going back and forth on using 4 basically identical tables, or making one big table. I also had to have 4 copies of the varialbles, but what I was hoping for was to have something like a subroutine with the comPortt being an argument.
Here's what I ended up with:
'Modified from test520.cr1 and POL_Yard.cr3
' 3x WXT520, 1x WXT536
'VAISALA WXT520 WEATHER TRANSMITTER
'WIRING INFORMATION
'WHITE = C1
'BLUE = C2
'CLEAR/GREEN/PINK = G
'BROWN/YELLOW = 12V
'These are set so COM ports only have to be changed in one place in the code.
'Const wxtCOM = Com4
Const wxtAddr = 0 'Set device address for WMT52, WXT520 here so it can be changed easily
Const MPH = 0.44703999999999994 'MPH in m/s
' copied from CSI Forum post
' UTC and Local Data tables simultaneously
' https://www.campbellsci.com/forum?l=thread&forum=1&tid=15941
Public UTCOffset As Long
Public TmStamp_UTC As Long
Units TmStamp_UTC = TS
'Public WXTMessage As String *30 'MESSAGE WE SEND TO WXT520 TO REQUEST DATA
'Public WXTString As String *250 'MESSAGE SENT BACK BY WXT520 WITH WX DATA
Public Message_Wind As String *30 'THIS IS THE TEXT STRING WE SEND WMT50 TO REQUEST DATA
Public WindStr As String *120 'THIS IS THE TEXT STRING FROM THE WMT50 WITH ALL THE DATA
Public WindResult(4,6) 'THIS ARRAY HOLDS EACH PIECE OF WIND DATA ONCE WINDSTR IS PARSED OUT
Alias WindResult(1,1) = WindDirMin1: Units WindDirMin1 = Deg 'MINIMUM WIND DIRECTION
Alias WindResult(1,2) = WindDirAvg1: Units WindDirAvg1 = Deg 'AVERAGE WIND DIRECTION
Alias WindResult(1,3) = WindDirMax1: Units WindDirMax1 = Deg 'MAXIMUM WIND DIRECTION
Alias WindResult(1,4) = WindSpdMin1: Units WindSpdMin1 = m/s 'MINIMUM WIND SPEED
Alias WindResult(1,5) = WindSpdAvg1: Units WindSpdAvg1 = m/s 'AVERAGE WIND SPEED
Alias WindResult(1,6) = WindSpdMax1: Units WindSpdMax1 = m/s 'MAXIMUM WIND SPEED
Alias WindResult(2,1) = WindDirMin2: Units WindDirMin2 = Deg 'MINIMUM WIND DIRECTION
Alias WindResult(2,2) = WindDirAvg2: Units WindDirAvg2 = Deg 'AVERAGE WIND DIRECTION
Alias WindResult(2,3) = WindDirMax2: Units WindDirMax2 = Deg 'MAXIMUM WIND DIRECTION
Alias WindResult(2,4) = WindSpdMin2: Units WindSpdMin2 = m/s 'MINIMUM WIND SPEED
Alias WindResult(2,5) = WindSpdAvg2: Units WindSpdAvg2 = m/s 'AVERAGE WIND SPEED
Alias WindResult(2,6) = WindSpdMax2: Units WindSpdMax2 = m/s 'MAXIMUM WIND SPEED
Alias WindResult(3,1) = WindDirMin3: Units WindDirMin3 = Deg 'MINIMUM WIND DIRECTION
Alias WindResult(3,2) = WindDirAvg3: Units WindDirAvg3 = Deg 'AVERAGE WIND DIRECTION
Alias WindResult(3,3) = WindDirMax3: Units WindDirMax3 = Deg 'MAXIMUM WIND DIRECTION
Alias WindResult(3,4) = WindSpdMin3: Units WindSpdMin3 = m/s 'MINIMUM WIND SPEED
Alias WindResult(3,5) = WindSpdAvg3: Units WindSpdAvg3 = m/s 'AVERAGE WIND SPEED
Alias WindResult(3,6) = WindSpdMax3: Units WindSpdMax3 = m/s 'MAXIMUM WIND SPEED
Alias WindResult(4,1) = WindDirMin4: Units WindDirMin4 = Deg 'MINIMUM WIND DIRECTION
Alias WindResult(4,2) = WindDirAvg4: Units WindDirAvg4 = Deg 'AVERAGE WIND DIRECTION
Alias WindResult(4,3) = WindDirMax4: Units WindDirMax4 = Deg 'MAXIMUM WIND DIRECTION
Alias WindResult(4,4) = WindSpdMin4: Units WindSpdMin4 = m/s 'MINIMUM WIND SPEED
Alias WindResult(4,5) = WindSpdAvg4: Units WindSpdAvg4 = m/s 'AVERAGE WIND SPEED
Alias WindResult(4,6) = WindSpdMax4: Units WindSpdMax4 = m/s 'MAXIMUM WIND SPEED
Public Message_Pressure As String *30
Public PressureStr As String *30
Public PressureResult(4,3)
Alias PressureResult(1,1) = AirTemp1: Units AirTemp1 = Deg C
Alias PressureResult(1,2) = RH1: Units RH1 = %
Alias PressureResult(1,3) = Pressure1: Units Pressure1 = hPa
Alias PressureResult(2,1) = AirTemp2: Units AirTemp2 = Deg C
Alias PressureResult(2,2) = RH2: Units RH2 = %
Alias PressureResult(2,3) = Pressure2: Units Pressure2 = hPa
Alias PressureResult(3,1) = AirTemp3: Units AirTemp3 = Deg C
Alias PressureResult(3,2) = RH3: Units RH3 = %
Alias PressureResult(3,3) = Pressure3: Units Pressure3 = hPa
Alias PressureResult(4,1) = AirTemp4: Units AirTemp4 = Deg C
Alias PressureResult(4,2) = RH4: Units RH4 = %
Alias PressureResult(4,3) = Pressure4: Units Pressure4 = hPa
Public DewPt(4) 'THIS IS THE DEWPOINT TEMPERATURE
Alias DewPt(1) = Dewpt1: Units Dewpt1 = Deg C
Alias DewPt(2) = Dewpt2: Units Dewpt2 = Deg C
Alias DewPt(3) = Dewpt3: Units Dewpt3 = Deg C
Alias DewPt(4) = Dewpt4: Units Dewpt4 = Deg C
'
'THESE ARE VARIABLE USED TO DETERMINE HEAT INDEX, WINDCHILL, AND REAL-FEEL TEMPERATURES
'DECLARE VARIABLES
Dim WindSpdMaxMPH
Public HeatIndex(4)
Alias HeatIndex(1) = HeatIndex1: Units HeatIndex1 = Deg F 'THIS IS THE HEAT INDEX
Alias HeatIndex(2) = HeatIndex2: Units HeatIndex2 = Deg F
Alias HeatIndex(3) = HeatIndex3: Units HeatIndex3 = Deg F
Alias HeatIndex(4) = HeatIndex4: Units HeatIndex4 = Deg F
Public Windchill(4)
Alias Windchill(1) = Windchill1: Units Windchill1 = Deg F 'THIS IS THE WINDCHILL
Alias Windchill(2) = Windchill2: Units Windchill2 = Deg F
Alias Windchill(3) = Windchill3: Units Windchill3 = Deg F
Alias Windchill(4) = Windchill4: Units Windchill4 = Deg F
Public FeelTemp(4)
Alias FeelTemp(1) = FeelTemp1: Units FeelTemp1 = Deg F 'THIS IS THE REAL FEEL TEMP.
Alias FeelTemp(2) = FeelTemp2: Units FeelTemp2 = Deg F
Alias FeelTemp(3) = FeelTemp3: Units FeelTemp3 = Deg F
Alias FeelTemp(4) = FeelTemp4: Units FeelTemp4 = Deg F
Public AirTempF: Units AirTempF = Deg F
'UNITS P=H,T=C
Public Message_Rain As String *30
Public RainStr As String *120
Public RainResult(4,8)
Alias RainResult(1,1) = RainAmount1: Units RainAmount1 = mm
Alias RainResult(1,2) = RainDuration1: Units RainDuration1 = s
Alias RainResult(1,3) = RainIntensity1: Units RainIntensity1 = mm/h
Alias RainResult(1,4) = HailAmount1: Units HailAmount1 = hits/cm²
Alias RainResult(1,5) = HailDuration1: Units HailDuration1 = s
Alias RainResult(1,6) = HailIntensity1: Units HailIntensity1 = hits/cm²h
Alias RainResult(1,7) = RainPeak1: Units RainPeak1 = mm/h
Alias RainResult(1,8) = HailPeak1: Units HailPeak1 = hits/cm²h
Alias RainResult(2,1) = RainAmount2: Units RainAmount2 = mm
Alias RainResult(2,2) = RainDuration2: Units RainDuration2 = s
Alias RainResult(2,3) = RainIntensity2: Units RainIntensity2 = mm/h
Alias RainResult(2,4) = HailAmount2: Units HailAmount2 = hits/cm²
Alias RainResult(2,5) = HailDuration2: Units HailDuration2 = s
Alias RainResult(2,6) = HailIntensity2: Units HailIntensity2 = hits/cm²h
Alias RainResult(2,7) = RainPeak2: Units RainPeak2 = mm/h
Alias RainResult(2,8) = HailPeak2: Units HailPeak2 = hits/cm²h
Alias RainResult(3,1) = RainAmount3: Units RainAmount3 = mm
Alias RainResult(3,2) = RainDuration3: Units RainDuration3 = s
Alias RainResult(3,3) = RainIntensity3: Units RainIntensity3 = mm/h
Alias RainResult(3,4) = HailAmount3: Units HailAmount3 = hits/cm²
Alias RainResult(3,5) = HailDuration3: Units HailDuration3 = s
Alias RainResult(3,6) = HailIntensity3: Units HailIntensity3 = hits/cm²h
Alias RainResult(3,7) = RainPeak3: Units RainPeak3 = mm/h
Alias RainResult(3,8) = HailPeak3: Units HailPeak3 = hits/cm²h
Alias RainResult(4,1) = RainAmount4: Units RainAmount4 = mm
Alias RainResult(4,2) = RainDuration4: Units RainDuration4 = s
Alias RainResult(4,3) = RainIntensity4: Units RainIntensity4 = mm/h
Alias RainResult(4,4) = HailAmount4: Units HailAmount4 = hits/cm²
Alias RainResult(4,5) = HailDuration4: Units HailDuration4 = s
Alias RainResult(4,6) = HailIntensity4: Units HailIntensity4 = hits/cm²h
Alias RainResult(4,7) = RainPeak4: Units RainPeak4 = mm/h
Alias RainResult(4,8) = HailPeak4: Units HailPeak4 = hits/cm²h
DataTable(WxData1,True,-1)
DataInterval(0,1,Min,10)
' copied from CSI Forum post
' UTC and Local Data tables simultaneously
' https://www.campbellsci.com/forum?l=thread&forum=1&tid=15941
Sample (1,TmStamp_UTC,Nsec)
Sample (1,Status.PanelTemp,FP2)
Average(1,AirTemp1,FP2,False)
Maximum(1,AirTemp1,FP2,False,False)
Minimum(1,AirTemp1,FP2,False,False)
Average(1,RH1,FP2,False)
Maximum(1,RH1,FP2,False,False)
Minimum(1,RH1,FP2,False,False)
Average(1,Pressure1,FP2,False)
Maximum(1,Pressure1,FP2,False,False)
Minimum(1,Pressure1,FP2,False,False)
Average(1,Dewpt1,FP2,False)
Maximum(1,Dewpt1,FP2,False,False)
Minimum(1,Dewpt1,FP2,False,False)
Average(1,Windchill1,FP2,False)
Average(1,HeatIndex1,FP2,False)
Average(1,FeelTemp1,FP2,False) 'GET THE AVERAGE REAL FEEL TEMPERATURE
Average (1,WindSpdAvg1,FP2,False)
Average (1,WindDirAvg1,FP2,False)
Maximum(1,WindSpdMax1,FP2,False,False) 'GET THE MAXIMUM WINDSPEED
' FieldNames("WindGst1") 'RENAME THE VARIABLES
Average(1,RainAmount1,FP2,False) 'get average rain over Interval
Sample(1,RainDuration1,UINT2)
Sample(1,RainIntensity1,FP2)
Average(1,HailAmount1,FP2,False)
Sample(1,HailDuration1,UINT2)
Sample(1,HailIntensity1,FP2)
Sample (1,RainPeak1,FP2)
Sample (1,HailPeak1,FP2)
EndTable
DataTable(WxData2,True,-1)
DataInterval(0,1,Min,10)
' copied from CSI Forum post
' UTC and Local Data tables simultaneously
' https://www.campbellsci.com/forum?l=thread&forum=1&tid=15941
Sample (1,TmStamp_UTC,Nsec)
Sample (1,Status.PanelTemp,FP2)
Average(1,AirTemp2,FP2,False)
Maximum(1,AirTemp2,FP2,False,False)
Minimum(1,AirTemp2,FP2,False,False)
Average(1,RH2,FP2,False)
Maximum(1,RH2,FP2,False,False)
Minimum(1,RH2,FP2,False,False)
Average(1,Pressure2,FP2,False)
Maximum(1,Pressure2,FP2,False,False)
Minimum(1,Pressure2,FP2,False,False)
Average(1,Dewpt2,FP2,False)
Maximum(1,Dewpt2,FP2,False,False)
Minimum(1,Dewpt2,FP2,False,False)
Average(1,Windchill2,FP2,False)
Average(1,HeatIndex2,FP2,False)
Average(1,FeelTemp2,FP2,False) 'GET THE AVERAGE REAL FEEL TEMPERATURE
Average (1,WindSpdAvg2,FP2,False)
Average (1,WindDirAvg2,FP2,False)
Maximum(1,WindSpdMax2,FP2,False,False) 'GET THE MAXIMUM WINDSPEED
' FieldNames("WindGst") 'RENAME THE VARIABLES
Average(1,RainAmount2,FP2,False) 'get average rain over Interval
Sample(1,RainDuration2,UINT2)
Sample(1,RainIntensity2,FP2)
Average(1,HailAmount2,FP2,False)
Sample(1,HailDuration2,UINT2)
Sample(1,HailIntensity2,FP2)
Sample (1,RainPeak2,FP2)
Sample (1,HailPeak2,FP2)
EndTable
DataTable(WxData3,True,-1)
DataInterval(0,1,Min,10)
' copied from CSI Forum post
' UTC and Local Data tables simultaneously
' https://www.campbellsci.com/forum?l=thread&forum=1&tid=15941
Sample (1,TmStamp_UTC,Nsec)
Sample (1,Status.PanelTemp,FP2)
Average(1,AirTemp3,FP2,False)
Maximum(1,AirTemp3,FP2,False,False)
Minimum(1,AirTemp3,FP2,False,False)
Average(1,RH3,FP2,False)
Maximum(1,RH3,FP2,False,False)
Minimum(1,RH3,FP2,False,False)
Average(1,Pressure3,FP2,False)
Maximum(1,Pressure3,FP2,False,False)
Minimum(1,Pressure3,FP2,False,False)
Average(1,Dewpt3,FP2,False)
Maximum(1,Dewpt3,FP2,False,False)
Minimum(1,Dewpt3,FP2,False,False)
Average(1,Windchill3,FP2,False)
Average(1,HeatIndex3,FP2,False)
Average(1,FeelTemp3,FP2,False) 'GET THE AVERAGE REAL FEEL TEMPERATURE
Average (1,WindSpdAvg3,FP2,False)
Average (1,WindDirAvg3,FP2,False)
Maximum(1,WindSpdMax3,FP2,False,False) 'GET THE MAXIMUM WINDSPEED
' FieldNames("WindGst") 'RENAME THE VARIABLES
Average(1,RainAmount3,FP2,False) 'get average rain over Interval
Sample(1,RainDuration3,UINT2)
Sample(1,RainIntensity3,FP2)
Average(1,HailAmount3,FP2,False)
Sample(1,HailDuration3,UINT2)
Sample(1,HailIntensity3,FP2)
Sample (1,RainPeak3,FP2)
Sample (1,HailPeak3,FP2)
EndTable
DataTable(WxData4,True,-1)
DataInterval(0,1,Min,10)
' copied from CSI Forum post
' UTC and Local Data tables simultaneously
' https://www.campbellsci.com/forum?l=thread&forum=1&tid=15941
Sample (1,TmStamp_UTC,Nsec)
Sample (1,Status.PanelTemp,FP2)
Average(1,AirTemp4,FP2,False)
Maximum(1,AirTemp4,FP2,False,False)
Minimum(1,AirTemp4,FP2,False,False)
Average(1,RH4,FP2,False)
Maximum(1,RH4,FP2,False,False)
Minimum(1,RH4,FP2,False,False)
Average(1,Pressure4,FP2,False)
Maximum(1,Pressure4,FP2,False,False)
Minimum(1,Pressure4,FP2,False,False)
Average(1,Dewpt4,FP2,False)
Maximum(1,Dewpt4,FP2,False,False)
Minimum(1,Dewpt4,FP2,False,False)
Average(1,Windchill4,FP2,False)
Average(1,HeatIndex4,FP2,False)
Average(1,FeelTemp4,FP2,False) 'GET THE AVERAGE REAL FEEL TEMPERATURE
Average (1,WindSpdAvg4,FP2,False)
Average (1,WindDirAvg4,FP2,False)
Maximum(1,WindSpdMax4,FP2,False,False) 'GET THE MAXIMUM WINDSPEED
' FieldNames("WindGst") 'RENAME THE VARIABLES
Average(1,RainAmount4,FP2,False) 'get average rain over Interval
Sample(1,RainDuration4,UINT2)
Sample(1,RainIntensity4,FP2)
Average(1,HailAmount4,FP2,False)
Sample(1,HailDuration4,UINT2)
Sample(1,HailIntensity4,FP2)
Sample (1,RainPeak4,FP2)
Sample (1,HailPeak4,FP2)
EndTable
Sub wxtSetup()
SerialOpen(Com1,19200,0,100,1000)
SerialFlush(Com1)
SerialOpen(Com2,19200,0,100,1000)
SerialFlush(Com2)
SerialOpen(Com3,19200,0,100,1000)
SerialFlush(Com3)
SerialOpen(Com4,19200,0,100,1000)
SerialFlush(Com4)
'WIND
SerialOut(Com1,wxtAddr + "WU,R=1111110011111100"+CHR(13)+CHR(10),0,0,50)
SerialOut(Com2,wxtAddr + "WU,R=1111110011111100"+CHR(13)+CHR(10),0,0,50)
SerialOut(Com3,wxtAddr + "WU,R=1111110011111100"+CHR(13)+CHR(10),0,0,50)
SerialOut(Com4,wxtAddr + "WU,R=1111110011111100"+CHR(13)+CHR(10),0,0,50)
'I = 5 MEANS UPDATE EVERY 5 SECONDS
'A = 5 MEANS DO 5 SECOND AVERAGES
'G = 1 MEANS TRADITIONAL WIND SPEED MAX/MIN
'U = M MEANS WIND SPEED GIVEN IN m/s
'D = 0 MEANS DIRECTION OFFSET IS 0
'N = W MEANS MESSAGE INCLUDES WIND SPEED AND ANGLE
'F = 1 MEANS SAMPLE AT 1HZ
SerialOut(Com1,wxtAddr + "WU,I=5,A=5,G=1,U=M,D=0,N=W,F=1"+CHR(13)+CHR(10),0,0,50)
SerialOut(Com2,wxtAddr + "WU,I=5,A=5,G=1,U=M,D=0,N=W,F=1"+CHR(13)+CHR(10),0,0,50)
SerialOut(Com3,wxtAddr + "WU,I=5,A=5,G=1,U=M,D=0,N=W,F=1"+CHR(13)+CHR(10),0,0,50)
SerialOut(Com4,wxtAddr + "WU,I=5,A=5,G=1,U=M,D=0,N=W,F=1"+CHR(13)+CHR(10),0,0,50)
'PRESSURE, TEMPERATURE, HUMIDITY
SerialFlush(Com1)
SerialOut(Com1,wxtAddr + "TU,R=1101000011010000"+CHR(13)+CHR(10),0,0,50) 'BIT 3 IS INTERNAL TEMP USED IN PRESSURE CALCULATIONS
SerialFlush(Com1)
SerialFlush(Com2)
SerialOut(Com2,wxtAddr + "TU,R=1101000011010000"+CHR(13)+CHR(10),0,0,50) 'BIT 3 IS INTERNAL TEMP USED IN PRESSURE CALCULATIONS
SerialFlush(Com2)
SerialFlush(Com3)
SerialOut(Com3,wxtAddr + "TU,R=1101000011010000"+CHR(13)+CHR(10),0,0,50) 'BIT 3 IS INTERNAL TEMP USED IN PRESSURE CALCULATIONS
SerialFlush(Com3)
SerialFlush(Com4)
SerialOut(Com4,wxtAddr + "TU,R=1101000011010000"+CHR(13)+CHR(10),0,0,50) 'BIT 3 IS INTERNAL TEMP USED IN PRESSURE CALCULATIONS
SerialFlush(Com4)
'I = 5 MEANS UPDATE EVERY 5 SECONDS
'P = H MEANS hPa (mbars)
'T = C MEANS DEGREES CELSIUS
SerialOut(Com1,wxtAddr + "TU,I=5,P=H,T=C"+CHR(13)+CHR(10),0,0,50)
SerialOut(Com2,wxtAddr + "TU,I=5,P=H,T=C"+CHR(13)+CHR(10),0,0,50)
SerialOut(Com3,wxtAddr + "TU,I=5,P=H,T=C"+CHR(13)+CHR(10),0,0,50)
SerialOut(Com4,wxtAddr + "TU,I=5,P=H,T=C"+CHR(13)+CHR(10),0,0,50)
'RAIN
SerialFlush(Com1)
SerialOut(Com1,wxtAddr + "RU,R=1111111111111111"+CHR(13)+CHR(10),0,0,50)
SerialFlush(Com1)
SerialFlush(Com2)
SerialOut(Com2,wxtAddr + "RU,R=1111111111111111"+CHR(13)+CHR(10),0,0,50)
SerialFlush(Com2)
SerialFlush(Com3)
SerialOut(Com3,wxtAddr + "RU,R=1111111111111111"+CHR(13)+CHR(10),0,0,50)
SerialFlush(Com3)
SerialFlush(Com4)
SerialOut(Com4,wxtAddr + "RU,R=1111111111111111"+CHR(13)+CHR(10),0,0,50)
SerialFlush(Com4)
'I = 5 MEANS UPDATE EVERY 5 SECONDS
'U = M MEANS METRIC PRECIPITATION UNITS (accumulation mm, duration s, intensity mm/hr)
'S = M MEANS METRIC HAIL UNITS (accumulation mm, duration s, intensity mm/hr)
'M = T MEANS TIME BASED - INTERVALS DEFINED IN I FIELD
SerialOut(Com1,wxtAddr + "RU,I=5,U=M,S=M,M=T"+CHR(13)+CHR(10),0,0,50)
SerialOut(Com2,wxtAddr + "RU,I=5,U=M,S=M,M=T"+CHR(13)+CHR(10),0,0,50)
SerialOut(Com3,wxtAddr + "RU,I=5,U=M,S=M,M=T"+CHR(13)+CHR(10),0,0,50)
SerialOut(Com4,wxtAddr + "RU,I=5,U=M,S=M,M=T"+CHR(13)+CHR(10),0,0,50)
EndSub
Sub DewPt_QC(DewPt, AirTemp)
If DewPt > AirTemp OR DewPt = NAN Then DewPt = AirTemp
DewPt = 1.8 * DewPt + 32 'convert to deg F
EndSub
Sub AirTemp_QC(AirTemp)
If AirTemp < -53 OR AirTemp > 141 Then
AirTemp = NAN
EndIf
EndSub
Sub Pressure_QC(Pressure)
If Pressure < 600 OR Pressure > 1100 Then
Pressure = NAN
EndIf
EndSub
Sub RH_QC(RH)
If RH < 0 OR RH > 105 Then 'outside 5% accuracy
RH = NAN
ElseIf RH > 100 Then 'RH also < 105 here
RH = 100
EndIf
EndSub
Function CalcHeatIndex(AirTemp, RH)
AirTempF = 1.8 * AirTemp + 32
HeatIndex = -42.379 + 2.049*AirTempF+10.143*RH - 0.22476*AirTempF*RH
HeatIndex = HeatIndex - 6.8378*10^-3*AirTempF^2 - 5.4817*10^-2*RH^2
HeatIndex = HeatIndex + 1.2287*10^-3*AirTempF^2*RH + 8.5282*10^-4*AirTempF*RH^2
HeatIndex = HeatIndex - 1.99*10^-6*AirTempF^2*RH^2
'HEAT INDEX = AIR TEMP IF AIR TEMP < 80F OR RH < 40% OR HEAT INDEX < AIR TEMP
If AirTempF < 80 OR RH < 40 OR HeatIndex < AirTempF Then HeatIndex = AirTempF
Return(HeatIndex)
EndFunction
Function CalcWindChill(AirTemp, WindSpdMax)
AirTempF = 1.8 * AirTemp + 32
WindSpdMaxMPH = WindSpdMax/MPH ' convert from m/s to mph
Windchill = 35.74 + 0.6215*AirTempF - 35.75*WindSpdMaxMPH^0.16
Windchill = Windchill + 0.4275*AirTempF*WindSpdMaxMPH^0.16
'WINDCHILL = AIR TEMP IF WINDCHILL > AIR TEMP
If Windchill > AirTempF Then Windchill = AirTempF
'IF AIR TEMP > 50F OR WINDSPEED < 3 MPH THEN WINDCHILL = AIR TEMP
If AirTempF > 50 OR WindSpdMaxMPH < 3 Then Windchill = AirTempF
Return(Windchill)
EndFunction
Function CalcFeelTemp(AirTemp, HeatIndex, Windchill)
AirTempF = 1.8 * AirTemp + 32
If HeatIndex = AirTempF Then
FeelTemp = Windchill
Else
FeelTemp = HeatIndex
EndIf
Return(FeelTemp)
EndFunction
BeginProg
PortSet(9,1)
'THIS OPENS UP THE SERIAL PORT FOR THE WXT520 TO COMMUNICATE THROUGH.
Call(wxtSetup)
'WIND
Message_Wind = "R1"+CHR(13)+CHR(10)
Message_Pressure = "R2"+CHR(13)+CHR(10)
Message_Rain = "R3"+CHR(13)+CHR(10)
'WE GO AHEAD AND SCAN THROUGH THE SENSORS.
Scan(5,Sec,1,0)
' copied from CSI Forum post
' UTC and Local Data tables simultaneously
' https://www.campbellsci.com/forum?l=thread&forum=1&tid=15941
' Calculate UTC offset so I get also use local time. EST is UTC-5
UTCOffset = 5*3600-DaylightSavingUS(-1)
TmStamp_UTC = Public.TimeStamp(1,1) + UTCOffset
'************************************************************************
' WXT520 SECTION
'GET THE WIND DATA
SerialFlush (Com1) 'FLUSH OUT ANY OLD DATA IN THE COM PORT
SerialOut (Com1,wxtAddr + Message_Wind,0,0,10) 'REQUEST THE DATA FROM THE METER
SerialIn (WindStr,Com1,50,-1,100) 'RECEIVE THE DATA FROM THE METER
SplitStr (WindResult(1,1),WindStr,"=",6,6)
SerialFlush (Com2) 'FLUSH OUT ANY OLD DATA IN THE COM PORT
SerialOut (Com2,wxtAddr + Message_Wind,0,0,10) 'REQUEST THE DATA FROM THE METER
SerialIn (WindStr,Com2,50,-1,100) 'RECEIVE THE DATA FROM THE METER
SplitStr (WindResult(2,1),WindStr,"=",6,6)
SerialFlush (Com3) 'FLUSH OUT ANY OLD DATA IN THE COM PORT
SerialOut (Com3,wxtAddr + Message_Wind,0,0,10) 'REQUEST THE DATA FROM THE METER
SerialIn (WindStr,Com3,50,-1,100) 'RECEIVE THE DATA FROM THE METER
SplitStr (WindResult(3,1),WindStr,"=",6,6)
SerialFlush (Com4) 'FLUSH OUT ANY OLD DATA IN THE COM PORT
SerialOut (Com4,wxtAddr + Message_Wind,0,0,10) 'REQUEST THE DATA FROM THE METER
SerialIn (WindStr,Com4,50,-1,100) 'RECEIVE THE DATA FROM THE METER
SplitStr (WindResult(4,1),WindStr,"=",6,6)
'GET THE PRESSURE DATA
SerialFlush(Com1)
SerialOut(Com1,wxtAddr + Message_Pressure,0,0,10)
SerialIn(PressureStr,Com1,50,-1,100)
SplitStr(PressureResult(1,1),PressureStr,"=",3,6)
SerialFlush(Com2)
SerialOut(Com2,wxtAddr + Message_Pressure,0,0,10)
SerialIn(PressureStr,Com2,50,-1,100)
SplitStr(PressureResult(2,1),PressureStr,"=",3,6)
SerialFlush(Com3)
SerialOut(Com3,wxtAddr + Message_Pressure,0,0,10)
SerialIn(PressureStr,Com3,50,-1,100)
SplitStr(PressureResult(3,1),PressureStr,"=",3,6)
SerialFlush(Com4)
SerialOut(Com4,wxtAddr + Message_Pressure,0,0,10)
SerialIn(PressureStr,Com4,50,-1,100)
SplitStr(PressureResult(4,1),PressureStr,"=",3,6)
'GET THE RAIN DATA
SerialFlush(Com1)
SerialOut(Com1,wxtAddr + Message_Rain,0,0,10)
SerialIn(RainStr,Com1,50,-1,120)
SplitStr(RainResult(1,1),RainStr,"=",8,6)
SerialFlush(Com2)
SerialOut(Com2,wxtAddr + Message_Rain,0,0,10)
SerialIn(RainStr,Com2,50,-1,120)
SplitStr(RainResult(2,1),RainStr,"=",8,6)
SerialFlush(Com3)
SerialOut(Com3,wxtAddr + Message_Rain,0,0,10)
SerialIn(RainStr,Com3,50,-1,120)
SplitStr(RainResult(3,1),RainStr,"=",8,6)
SerialFlush(Com4)
SerialOut(Com4,wxtAddr + Message_Rain,0,0,10)
SerialIn(RainStr,Com4,50,-1,120)
SplitStr(RainResult(4,1),RainStr,"=",8,6)
'************************************************************************
'CALCULATED VALUES SECTION
'QUALITY CONTROL AIRTEMP,PRESSURE,RH
Call AirTemp_QC(AirTemp1)
Call AirTemp_QC(AirTemp2)
Call AirTemp_QC(AirTemp3)
Call AirTemp_QC(AirTemp4)
Call Pressure_QC(Pressure1)
Call RH_QC(RH1)
' 'CALCULATES THE DEWPOINT
DewPoint(Dewpt1,AirTemp1,RH1)
DewPoint(Dewpt2,AirTemp2,RH2)
DewPoint(Dewpt3,AirTemp3,RH3)
DewPoint(Dewpt4,AirTemp4,RH4)
'
' 'QUALITY CONTROL THE DEWPOINT
Call DewPt_QC(Dewpt1, AirTemp1)
Call DewPt_QC(Dewpt2, AirTemp2)
Call DewPt_QC(Dewpt3, AirTemp3)
Call DewPt_QC(Dewpt4, AirTemp4)
'CALCULATES THE HEAT INDEX
HeatIndex1 = CalcHeatIndex(AirTemp1, RH1)
HeatIndex2 = CalcHeatIndex(AirTemp2, RH2)
HeatIndex3 = CalcHeatIndex(AirTemp3, RH3)
HeatIndex4 = CalcHeatIndex(AirTemp4, RH4)
'CALCULATES THE WINDCHILL
Windchill1 = CalcWindChill(AirTemp1, WindSpdMax1)
Windchill2 = CalcWindChill(AirTemp2, WindSpdMax2)
Windchill3 = CalcWindChill(AirTemp3, WindSpdMax3)
Windchill4 = CalcWindChill(AirTemp4, WindSpdMax4)
'CHOOSE WHAT THE FEEL TEMP SHOULD BE
FeelTemp1 = CalcFeelTemp(AirTemp1, HeatIndex1, Windchill1)
FeelTemp2 = CalcFeelTemp(AirTemp2, HeatIndex2, Windchill2)
FeelTemp3 = CalcFeelTemp(AirTemp3, HeatIndex3, Windchill3)
FeelTemp4 = CalcFeelTemp(AirTemp4, HeatIndex4, Windchill4)
'Call Data Tables and Store Data
CallTable WxData1
CallTable WxData2
CallTable WxData3
CallTable WxData4
NextScan
EndProg
I should put this in a new question, but I just tried to update my LoggerNet and the install seems to have worked, but now I get "Access denied" everytime I try to run something.
(This was on a different computer.)
Nevermind. I disabled my AV, and it worked. I recently changed anti-virus.