Im Ereignisspeicher finde ich folgende Meldungen:
% Event: __WS2225_WindDir_455__wertesum..:ERR_DIVISION_BY_Z ERO@2015-07-06 21:12:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_PROC_OBJECT@2 015-07-06 21:12:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_DIVISION_BY_Z ERO@2015-07-06 21:18:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_PROC_OBJECT@2 015-07-06 21:18:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_DIVISION_BY_Z ERO@2015-07-06 21:20:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_PROC_OBJECT@2 015-07-06 21:20:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_DIVISION_BY_Z ERO@2015-07-06 21:24:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_PROC_OBJECT@2 015-07-06 21:24:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_DIVISION_BY_Z ERO@2015-07-06 21:29:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_PROC_OBJECT@2 015-07-06 21:29:50
.....
Also wird angeblich eine Division durch Null versucht...
Im Code wird das jedoch abgefangen:
D.h., in jeder 50. Sekunde wird die Summe der Windrichtungswerte der vorangegangenen Minute berechnet und daraus der Durchschnitt gebildet.
Da ein Windrichtungswert von Null jedoch "Windstille" bedeutet (nur 360° ist daher Nordwind), wird der Wert nicht berücksichtigt und dadurch der Divisor reduziert. Der Divisor "Divisorsumme@" kann also durchaus bei Winstille über einer Minute mal den Wert Null annehmen. Allerdings sollte das wohl mit obigem Konstrukt abgefangen sein...
Und ja - das ist die einzige Zeile im Makro, das diese Rechnung durchführt, ganz sicher!
% Event: __WS2225_WindDir_455__wertesum..:ERR_DIVISION_BY_Z ERO@2015-07-06 21:12:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_PROC_OBJECT@2 015-07-06 21:12:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_DIVISION_BY_Z ERO@2015-07-06 21:18:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_PROC_OBJECT@2 015-07-06 21:18:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_DIVISION_BY_Z ERO@2015-07-06 21:20:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_PROC_OBJECT@2 015-07-06 21:20:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_DIVISION_BY_Z ERO@2015-07-06 21:24:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_PROC_OBJECT@2 015-07-06 21:24:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_DIVISION_BY_Z ERO@2015-07-06 21:29:50
% Event: __WS2225_WindDir_455__wertesum..:ERR_PROC_OBJECT@2 015-07-06 21:29:50
.....
Also wird angeblich eine Division durch Null versucht...
Im Code wird das jedoch abgefangen:
Code:
if second()==50 then { wert50@ = windDirGrad@; if (wert50@ > 0u16) then { divisor50@ = 1u16; } else { divisor50@ = 0u16; } endif; divisorsumme@ = divisor00@ + divisor10@ + divisor20@ + divisor30@ + divisor40@ + divisor50@; wertesumme@ = wert00@ + wert10@ + wert20@ + wert30@ + wert40@ + wert50@; [COLOR=#FF0000] if ([B]divisorsumme@ > 0u16[/B]) then[/COLOR] { [COLOR=#008000]Name_WindDir = [B]wertesumme@ / divisorsumme@[/B];[/COLOR] } else { Name_WindDir = 0u16; } endif; } endif
Da ein Windrichtungswert von Null jedoch "Windstille" bedeutet (nur 360° ist daher Nordwind), wird der Wert nicht berücksichtigt und dadurch der Divisor reduziert. Der Divisor "Divisorsumme@" kann also durchaus bei Winstille über einer Minute mal den Wert Null annehmen. Allerdings sollte das wohl mit obigem Konstrukt abgefangen sein...
Und ja - das ist die einzige Zeile im Makro, das diese Rechnung durchführt, ganz sicher!
Kommentar