Hi all,
I am looking for an crbasic instruction to have backed and veered wind direction.
I need a 12 second average direction and most backed most veered from those 12 second samples.
Anyone able to show me an example?
With kind regards.
Hi,
I found this piece of code in the RTMC Pro help files.
But i dont know how i can adjust it to have the most backed and veered values for five 12 seconds average direction and fifty 12 seconds average direction.
Public WD_val, AvgRunWindD, mostbacked, mostveered Public deltawind, deltaD, WindD, MaxD(2), MinD(2), AvgWindD, lastwind Dim WindDHist(60) Public change DataTable (testalgorithm,True,-1) DataInterval (0,1,min,10) WindVector (1,1,WD_val,IEEE4,False,0,0,0) Sample (1,AvgRunWindD,IEEE4) Sample (1,mostbacked,IEEE4) Sample (1,mostveered,IEEE4) EndTable AngleDegrees 'Main Program BeginProg change=0.5 Scan (1,Sec,0,0) VoltDiff(WD_val,1,mV2500,2,True,0,250,0.1795,-0) 'The wind direction in the range of 0-360 needs to be written to a variable called 'WD_val for this example. 'The following code was written for test purposes and simulates a slowly altering 'wind direction. The change variable allows the user to vary the drift of 'direction. If RND > 0.5 Then WD_val = WD_val + RND*20 Else WD_val=WD_val - RND*20 EndIf If WD_val < 0 Then WD_val = 360 + WD_val WD_val = WD_val + change WD_val = WD_val MOD 360 '-------------------Wind veering and backing--------------------------------- 'Convert to a running wind direction using a modified version of the Mitsuta (EPA) 'method. 'That wind direction avoids the problems with the North transition so 'standard statistics can be applied to it (Max and Min in this case) 'see http://www.epa.gov/scram001/guidance/met/mmgrma.pdf 'First work out the change since the last reading - use the current and previous 'wind on a 0-360 scale. This is the main difference from most similar EPA style 'algorithms. 'This was needed to allow for rolling averaging. deltawind = WD_val - lastwind lastwind = WD_val 'Work out the change in the continuous direction by adding or subtracting 360 to 'avoid the discontinuity issue. deltaD = deltawind 'Default for Normal variation not crossing North If deltawind < -180 Then deltaD=deltawind+360 'Gone through North from West to East. If deltawind > 180 Then deltaD=deltawind-360 'Gone through North from East to West. 'Work out Wind_D, the continuous representation of wind direction (with no 0-360 'transition). Use a double precision addition as we will be adding to WindD forever 'and need to avoid rounding errors. AddPrecise (WindD,deltaD) 'Shift and update the buffer of wind directions (60 values in this case). Move (WindDHist(2),59,WindDHist(1),59) WindDHist(1)= WindD 'Find the min and max values in the buffer which will be the most backed and veered 'values. Note the buffer needs to have filled fully before sensible values are 'returned. MaxSpa (MaxD,60,WindDHist()) MinSpa (MinD,60,WindDHist()) 'Optional running average of direction using the same buffered data (saves on 'memory. AvgSpa (AvgWindD,60,WindDHist()) 'Work out the directions by adding on a big multiple of 360 (to correct for 'directions < 0). Then MOD by 360 to give degrees. mostbacked = (MinD(1)+36000) MOD 360 mostveered = (MaxD(1)+36000) MOD 360 AvgRunWindD = (AvgWindD+36000) MOD 360 'Check if the value of WindD is getting too big or too small. In the very unlikely 'event that the wind direction has gone around 95 times in one direction reset 'the virtual direction to the current reading to keep within +/-100 turns of zero. 'This will cause a glitch on the backed and veered but is unavoidable and should not 'happen often, if at all in practice. If ABS(WindD)>34200 Then WindD = WD_val CallTable testalgorithm 'Stores data for test in this case NextScan EndProg
Hi,
I came up with this piece of code.
I dont know if this is the way to accomplish what i want.
Maybe someone can shine a light on it? :)
Public WS_KPH, WD_val, AvgRunWindD, AvgRunWindD50, twaalf_sec_avg_WindDir, mostbacked, mostveered, mostbacked50, mostveered50 Public deltawind, deltaD, MaxD(2), MinD(2),MaxD50(2), MinD50(2), AvgWindD, AvgWindD50, lastwind Public WindDHist(5) Public WindDHist50(50) DataTable (table_12_sec,True,-1) DataInterval (0,12,Sec,10) WindVector (1,WS_KPH,WD_val,IEEE4,False,0,0,0) FieldNames("WS_KPH_S_WVT,WindDir_D1_WVT,WindDir_SD1_WVT") Sample (1,AvgRunWindD,IEEE4) Sample (1,mostbacked,IEEE4) Sample (1,mostveered,IEEE4) EndTable DataTable (table_one_min,True,-1) DataInterval (0,1,Min,10) WindVector (1,WS_KPH,WD_val,IEEE4,False,0,0,0) FieldNames("WS_KPH_S_WVT,WindDir_D1_WVT,WindDir_SD1_WVT") Sample (1,AvgRunWindD,IEEE4) Sample (1,mostbacked,IEEE4) Sample (1,mostveered,IEEE4) EndTable DataTable (table_ten_min,True,-1) DataInterval (0,10,Min,10) WindVector (1,WS_KPH,WD_val,IEEE4,False,0,0,0) FieldNames("WS_KPH_S_WVT,WindDir_D1_WVT,WindDir_SD1_WVT") Sample (1,AvgRunWindD50,IEEE4) Sample (1,mostbacked50,IEEE4) Sample (1,mostveered50,IEEE4) EndTable AngleDegrees 'Main Program BeginProg Scan (1,Sec,0,0) VoltDiff(WD_val,1,mV2500,2,True,0,250,0.1795,-0) WD_val = WD_val + 140 If WD_val > 360 Then WD_val = WD_val - 360 If WD_val>=360 Then WD_val=0 If WD_val < 0 Then WD_val = 360 + WD_val WD_val = WD_val MOD 360 VoltDiff(WS_KPH,1,mV2500,1,True,0,250,0.09,-45) If table_12_sec.output Then twaalf_sec_avg_WindDir = table_12_sec.WindDir_D1_WVT(1) deltawind = twaalf_sec_avg_WindDir - lastwind lastwind = twaalf_sec_avg_WindDir deltaD = deltawind 'Default for Normal variation not crossing North If deltawind < -180 Then deltaD=deltawind+360 'Gone through North from West to East. If deltawind > 180 Then deltaD=deltawind-360 'Gone through North from East to West. AddPrecise (twaalf_sec_avg_WindDir,deltaD) Move (WindDHist(2),4,WindDHist(1),4) Move (WindDHist50(2),49,WindDHist50(1),49) WindDHist(1)= twaalf_sec_avg_WindDir WindDHist50(1)= twaalf_sec_avg_WindDir AvgSpa (AvgWindD,5,WindDHist()) AvgSpa (AvgWindD50,50,WindDHist50()) MaxSpa (MaxD,5,WindDHist()) MaxSpa (MaxD50,50,WindDHist50()) MinSpa (MinD,5,WindDHist()) MinSpa (MinD50,50,WindDHist50()) mostbacked = (MinD(1)+36000) MOD 360 mostbacked50 = (MinD50(1)+36000) MOD 360 mostveered = (MaxD(1)+36000) MOD 360 mostveered50 = (MaxD50(1)+36000) MOD 360 AvgRunWindD = (AvgWindD+36000) MOD 360 AvgRunWindD50 = (AvgWindD50+36000) MOD 360 If ABS(twaalf_sec_avg_WindDir)>34200 Then twaalf_sec_avg_WindDir = twaalf_sec_avg_WindDir endif CallTable table_12_sec CallTable table_one_min CallTable table_ten_min NextScan EndProg
I see its not properly working, specific when winddirection is in the north area.
The "averagerunwindd" doesnt match the windvector direction when it is north oriëntated.
I see in order to have it right: left of north data should be - , right of north should be +.
Hi,
I tried the above code but i cant get it to work.
I cant find a way to get it working.