Step 7 Windrichtung Messwert beruhigen

PN/DP

User des Jahres 2011-2013;2015-2017;2020-2022;2024
Beiträge
24.658
Reaktionspunkte
7.898
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe einen Ultraschall-Windsensor mit Windrichtungs-Signal (4-20mA = 0..359°) an einer S7-300 mit Step7 V5.x
In WinCC Prof. V7.2 habe ich dazu einen grafischen Windrichtungsanzeiger/Pfeil und ein Archiv.
Die Windrichtungsanzeige schwankt extrem, teilweise um > 90..180° in einer Sekunde (der Sensor gibt alle ca. 0,5s einen neuen Wert aus, WinCC aktualisiert jede Sekunde). Im Archiv soll alle 5 Minuten die vorherrschende Windrichtung abgelegt werden.

Wie beruhigt/glättet man einen Windrichtung-Messwert? Oder berechnet einen "Trend"?

Harald
 
Hallo Harald,

ich würde z.B. jede sec einmal messen, den Wert in ein Array ablegen (10-xx Messwerte) und den Mittelwert berechnen (evtl. nur alle 10 sec )
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie kommt denn diese schwankung zustande? Ich hatte bisher nie eine Notwendigkeit solch extremen ausreisser zu glätten. Ich mach meist einen gleitenden Mittelwert über die Windmessung und plausiblisiere diese dann (das wird bei dir ja nicht nötig sein).

Hast du von irgendwoher Luftverwirbelungen?
 
Bei solch starken Schwankungen würde ich den Wert über ein PTn-Glied (Tiefpass) dämpfen. Hierzu mehrere PT1-Glieder hinter einander schalten. Beispiele zu PT1 findest du im Forum.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich weiß nicht ob diese Schwankungen ein Fehler des Sensors sind oder tatsächlich Luftwirbel erfasst werden.
Der Windsensor ist nagelneu und ermittelt Windgeschwindigkeit und Windrichtung per Ultraschall-Laufzeitmessung ohne mechanisch bewegliche Teile. Daher ist so eine schnelle große Schwankung des Meßwertes wohl tatsächlich möglich.
Der Sensor wurde auf einem Rohrmast 2m über einer waagerechten Dachfläche montiert.
Es soll zur Beobachtung von möglichen Immissionen durch die Luft verwendet werden.

Mittelwertbildung/Glättung mit herkömmlichen Methoden können nur eingeschränkt verwendet werden, weil die Windrichtung keine kontinuierlich steigende Größe ist, sondern ein Winkel in einem Kreis, wo nach 359 wieder 0 kommt. Der Mittelwert eines um Nord (0°) pendelnden Windes aus 359° und 1° muß 0° (Nord) ergeben und nicht 180° (Süd). (PS: daher ist z.B. die Elko-Methode ungeeignet)

Daher meine Frage, ob es für Windrichtung geeignete Berechnungsmethoden gibt.

Ich habe mir überlegt, ob ich die Windrichtungsmesswerte irgendwie in 16 Richtungen/Stufen je 22,5° Breite quantisiere und über 15 oder 60 Sekunden in einem Array/Ringpuffer ablege, und dann zähle wie oft jede Richtung vorkam, um irgendwie die am häufigsten vorkommende Richtung zu ermitteln. Doch vielleicht hat jemand schon Erfahrung mit einer geeigneten Methode?

Harald
 
.. die Windrichtung keine kontinuierlich steigende Größe ..
Eigentlich trifft das nur auf dein Eingangssignal zu aber nicht auf die Windrichtung. Wenn du dieses Eingangssignal auf 2Pi normierst und dann irgend wie mit der Sinus-Funktion arbeitest, dann läuft das wieder rund ;-) . Diesen Wert kannst du dann dämpfen, mitteln oder wie auch immer. Eine Dämpfung finde ich wesentlich einfacher und geschmeidiger.

09.01.2020
Ich habe das mit Sinus, Cosinus und ArcusCosinus zwischenzeitlich mal getestet, leider nur mit mäßigem Erfolg. Da es bei Sinus und Cosinus zu jedem Wert zwei Winkelwerte gibt, muss man eine Fallunterscheidung machen. Durch die Dämpfung gibt es an den Umschaltpunkten zwischen den Quadranten Sprünge.
 
Zuletzt bearbeitet:
Hast du von irgendwoher Luftverwirbelungen?
Das würde ich auch vermuten, aber wenn das ein UltraschallSensor ist ... vielleicht empfängt der StörSignale im UltraschallBereich? Ein US-"Pfeiffen" des Windes? Reflektierende Flächen im "EinzugsBereich" des Sensors? US-Signale von ganz anderer Quelle?

Eine Dämpfung des analogen Signals würde ich mir bei einer StromQuelle verkneifen. Der Elko könnte schnell "volllaufen" und sich - wenn Du Pech hast - viel zu langsam entladen. StromQuelle contra ohmschen Widerstand ist irgendwie "unfair".
Dann lieber den SpannungsAbfall an einem 500+x Ohm Shunt abgreifen und über einen Tiefpass glätten.

PS:
Harald, Du willst nicht zufällig einen SiloFüllStand ermitteln - dann könnte ich Dir einen anderen aktuellen Thread nahelegen. :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würd hier erstmal der Ursache auf den Grund gehen.
Wir haben schon mit "normalen" US-Sensoren Probleme mit Verwirblungen gehabt.
Eine eingebaute Dämpfung hat der Sensor nicht irgendwo in den Tiefen seiner Konfiguration?

Gruß
Blockmove
 
.

Ich habe mir überlegt, ob ich die Windrichtungsmesswerte irgendwie in 16 Richtungen/Stufen je 22,5° Breite quantisiere und über 15 oder 60 Sekunden in einem Array/Ringpuffer ablege, und dann zähle wie oft jede Richtung vorkam, um irgendwie die am häufigsten vorkommende Richtung zu ermitteln. Doch vielleicht hat jemand schon Erfahrung mit einer geeigneten Methode?

Harald

Ich mach das ein bisschen anders. Ich teile die Rose in zwei Hälften auf. 0 grad und 0 grad bei Nord und Süd. West ist dann -50 und ost +50 grad. Dazu brauchst du einen Beiwert der dir die nord/südrichtung gibt. Dann normal filtern.


Gesendet von eyePhone
 
... und dann zähle wie oft jede Richtung vorkam, um irgendwie die am häufigsten vorkommende Richtung zu ermitteln.
...
Es soll zur Beobachtung von möglichen Immissionen durch die Luft verwendet werden.
Wenn Du die möglichen Immisionen beobachten willst, ist die Betrachtung, wie oft die einzelnen Richtungen vorkommen eher unerheblich, wenn die jeweils auftretenden Geschwindigkeiten nicht mit bewertet werden. Selteneres Auftreten bei hoher Geschwindigkeit könnte mehr Luftbewegung bedeuten, als häufiges Auftreten bei niedriger.
Wie sieht es bei den vom Sensor gemeldeten Geschwindigkeiten aus? Die müssten doch auch heftig schwanken (können) bei dem "unmechanischen" MessVerfahren.

Die Windrichtungsanzeige schwankt extrem, teilweise um > 90..180° in einer Sekunde (der Sensor gibt alle ca. 0,5s einen neuen Wert aus, WinCC aktualisiert jede Sekunde)
Nur alle halbe Sekunde neue Messwerte bei sich sooo flatterhaft ändernden Werten? Jetzt nähern wir uns den Themen AbtastTheorem und StroboskopEffekt!
Wie aktuell passt denn ein GeschwindigkeitsWert zum mitgelieferten WinkelWert?

Wenn du dieses Eingangssignal auf 2Pi normierst und dann irgend wie mit der Sinus-Funktion arbeitest, ... kannst du dann dämpfen, mitteln oder wie auch immer.
Na klar, ein SinusSignal ist leichter zu glätten.
Wir hatten doch mal einen Thread zum Thema WinkelErmittlung aus zwei PotiSignalen. Letztlich den ArcTan aus einem Sinus- und Cosinus-Signal bilden.
Ein CosinusSignal lässt sich natürlich genauso glätten/mitteln, wie ein SinusSignal. Aber ich hätte groesste Bedenken, ob geglättete Sinus- und CosinusSignale über den ArcTan mehr als nur irgendeinen (gar nicht relevanten) Winkel ergeben würden!
Allein aus entweder einem Sinus- oder einem CosinusWert erhält man aber immer zwei mögliche Lösungen pro Phase statt einer eindeutigen.

Ich teile die Rose in zwei Hälften auf. 0 grad und 0 grad bei Nord und Süd. ... Dazu brauchst du einen Beiwert der dir die nord/südrichtung gibt.
Das sind also zwei um 180° gegeneinander verdrehte KoordinatenSysteme - bei der SinusCosinusVariante sind es zwei um 90° verdrehte.
Dieser Ansatz ist gar nicht sooo weit entfernt von der Sinus-Cosinus-Variante, die ich aber besser finde, weil sie per ArcTan (insbesondere wenn diejenige, praxisnahe Variante zur Verfügung steht, die mit 2 Argumenten "gefüttert" wird, nämlich mit Sinus und Cosinus statt mit dem vorab zusammengefassten 1 Argument Sinus/Cosinus) leicht mit "StandardMitteln" zu einem guten Ergebnis führt. Aber leider nur mit zueinander passenden WertePaaren von Sinus und Cosinus. Geringe Abweichungen schon eines der beiden können allerdings zu unangenehmen Fehlern in der WinkelErmittlung führen.

Tja, Harald, wie kommen wir mit Deinem Problem weiter? Die schnellen Reaktionen Deines Sensors erfordern - glaube ich - eine häufige (lieber öfter als alle 500 ms) Auswertung von Richtung und Geschwindigkeit. Für AnzeigeZwecke der aktuellen WindRichtung könntest Du - wie geplant - die ArrayElemente entsprechend der Häufigkeit inkrementieren und für die bewegten LuftMassen - statt zu inkrementieren - die Geschwindigkeiten aufsummieren.
Die ModuloFunktion kennst Du bestens und könntest damit ein gegenüber Deinem "ArrayKoordinatenSystem" verdrehtes, imaginäres auswerten. Damit sind wir bei vollmis Vorschlag.

Ich will nur hoffen, dass die Hibbeligkeit der SensorWerte realistisch die Hibbeligkeit des Windes widerspiegelt und nicht Verwirbelungen am Sensor durch den Sensor oder seine Halterung.

PS:
Evtl. WinkelWerte, die bei zu geringer Geschwindigkeit gemeldet werden, ignorieren.

PPS:
Die Modulo-Idee bereitet mir gerade KopfGrimmen und ich glaube, ich werde eine Einteilung der Richtung in ViertelGraden (0..1439) weiter verfolgen.
Mit der Einteilung in 16 Sektoren kommt man auf 22,5° und, wenn man die Sektoren dann noch um die Hälfte davon, nämlich 11,25° verdreht, sieht das ganze freundlicher aus. Z.B. der Sektor Nord mit dem ArrayIndex 0 reicht dann von -11,25° (=348,75°=1395 ViertelGrad) bis +11,25° (= 45 ViertelGrad ) u.s.w..
Damit kann man gut mit INT-Zahlen den Kreis mit (vermutlich) genügender Auflösung und schön symmetrisch einteilen.
in diesem Sinne "VBA-mässig":
Code:
Tmp.Dir = Range("A5").Value ' Winkel in ? einlesen (REAL, 0?=N, 90?=O, 180?=S, 270?=W)
xTmp& = Tmp.Dir * 4# + 45#
Do While xTmp& < 0: xTmp& = xTmp& + 1440: Loop ' "MOD zu Fuss" für neg. Werte
xTmp& = xTmp& Mod 1440
xErg& = Int(xTmp& / 90)
Range("C5").Value = xErg& ' ArrayIdx (=SektorNr, INT, 0..15) ausgeben
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe vor ein paar Jahren auf einer Anlage auch die Windrichtung mit einem Windmesser erfasst, da hatte ich das gleiche Problem mit diesen springenden Werten. Wenn man sich den Windrichtungsmesser ansieht, dann "flattert" er aber auch wirklich so weit herum, liegt in der Natur des Windes. Ich habe auf einer WinCC-Seite auch eine Windrose platziert, mit einem Viertel "roten Bereich" (mögliche Geruchsbelästigung einer Wohngegend). Wenn man den Zeiger ein paar Sekunden beobachtet dann sieht man schon ungefähr woher der Wind weht. Geglättet habe ich diesen auch nicht, eben wegen dem Sprung von 0/360°.
 
Was mir so einfällt:
Man zählt die Umdrehungen der Windrichtung bei einem Durchgang von 0/359 Grad. Die Anzahl * 360 + Aktueller Winkel kann ich dann über einen Tiefpassfilter schicken da es ein stetiger Wert ist, und anschließend Modulo 360 rechnen um daraus die aktuelle gefilterte Windrichtung zu erhalten. Man muss nur eine sinnvolle Bedingung finden um den Umdrehungszähler wieder "abzuwickeln" also auf Null zu setzen um vom Wertebereich her nicht zu ungenau zu werden (bei Float Zahlen z.B. bei ca. 10^4). Also entweder rücksetzen wenn der Wert aktuell einigermaßen stabil ist, oder das Rücksetzen forcieren wenn der Wert den sinnvollen Wertebereich verlässt.
 
Ich glaube nicht daß der Ultraschall-Sensor elektrisch oder US-mäßig gestört wird. Die mit den selben Sensorelementen ermittelte Windgeschwindigkeit springt nicht so wie die Windrichtung.
Ich glaube auch nicht, daß der Aufstellort sehr ungünstig ist.
Wenn man den Zeiger der Windrose im WinCC beobachtet, dann ändert sich der Wert im Sekundenrhytmus meistens nur um wenige bis 15 Grad, aber ein- bis zweimal je Minute sind auch Sprünge um > 90° bis extrem > 180° dabei. Die Windrichtung "dreht" nicht, sondern springt gelegentlich unschön um sehr große Winkel, kommt danach aber (meistens) innerhalb von wenigen Sekunden wieder ungefähr zurück zur vorherigen Hauptrichtung.

Ich habe auf einer WinCC-Seite auch eine Windrose platziert, mit einem Viertel "roten Bereich" (mögliche Geruchsbelästigung einer Wohngegend). Wenn man den Zeiger ein paar Sekunden beobachtet dann sieht man schon ungefähr woher der Wind weht. Geglättet habe ich diesen auch nicht, eben wegen dem Sprung von 0/360°.
Genau das ist auch meine Aufgabe. Ja, ein Mensch sieht nach ein paar Sekunden die ungefähre Hauptrichtung. Das sollte dann doch auch irgendwie mathematisch möglich sein. Eine Auflösung von 16 Sektoren je 22,5° reicht uns, wenn der Wert dann ruhiger bleibt. Für das Archiv brauche ich dann auch noch eine "statistische"(?) Konzentrierung auf die vorherrschende Richtung der letzten 5 Minuten, weil augenscheinlich eine ungeglättete Stichprobe alle 5 Minuten nicht die tatsächlich vorherrschende Windrichtung repräsentiert.

Es geht um diesen Sensor. Der Sensor ist werksmässig eingestellt, eine kundenseitige Parametrierung/Konfiguration ist vermutlich nicht vorgesehen.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau das ist auch meine Aufgabe.
Also eher Emission als Immission?

PS: habe gerade in #11 einen VBA-Schnipsel für Grad -> SektorNr (=IndexNr) reingestrickt.

PPS: Harald, könntest Du denn mal eine Aufzeichnung von Daten, wie sie vom Sensor kommen, hier einstellen, z.B. als csv-Datei?
eine Spalte mit Richtung, eine mit Geschwindigkeit und (optional!) eine mit Zeitstempel - sofern die zeitlichen Abstände zwischen den Messwerten doch nicht so regelmässig sein sollten?

Treten die Ausreisser besonders bei niedrigen Geschwindigkeiten auf (Genauigkeit Windrichtung: < 2° (> 1 m/s) RMSE)?

Wenn es eine Richtung gibt, aus der der Wind "bevorzugt" kommt, würde ich den Sensor so ausrichten, dass der Übergang 0° <-> 359,9° NICHT in dieser Richtung liegt.
 
Zuletzt bearbeitet:
Ich glaube nicht daß der Ultraschall-Sensor elektrisch oder US-mäßig gestört wird. Die mit den selben Sensorelementen ermittelte Windgeschwindigkeit springt nicht so wie die Windrichtung.
Ich glaube auch nicht, daß der Aufstellort sehr ungünstig ist.
Wenn man den Zeiger der Windrose im WinCC beobachtet, dann ändert sich der Wert im Sekundenrhytmus meistens nur um wenige bis 15 Grad, aber ein- bis zweimal je Minute sind auch Sprünge um > 90° bis extrem > 180° dabei. Die Windrichtung "dreht" nicht, sondern springt gelegentlich unschön um sehr große Winkel, kommt danach aber (meistens) innerhalb von wenigen Sekunden wieder ungefähr zurück zur vorherigen Hauptrichtung.

Harald

wie wärs dann mit einem entsprechenden median vor der mittelwertbildung die Ausreisser rauszufiltern?
Ich bin da vielleicht manchmal sehr pragmatisch.
 
Wie wär folgende Idee:
Ich verlängere meine Skala 0..360° jeweils um 90°, also auf -90..+450°. Mache dann eine normale Mittelwertberechnung über 100 Meßwerte. Wenn mein Mittelwert nun z.B. bei 10° steht und der Sensor mir jetzt 350° als neuen Meßwert liefert schreibe ich eine -10 in meine Tabelle, und andersherum wenn mein Mittelwert bei 350° steht und der neue Meßwert ist 17° schreibe ich 377° in die Tabelle. Und jedesmal wenn der Mittelwert über 360° geht subtrahiere ich von dem Mittelwert und allen Tabellenwerten den Wert 360. Andersherum dito, also wenn der Mittelwert unter 0 geht addiere ich auf den Mittelwert und alle Tabellenwerte den Wert 360.
 
Anstatt mit Vinkel zu arbeiten, den Vinkel in ein X/Y-Vektor Paar wandeln ?
Wenn man die X ynd Y Werte getrennt filtern, und schliesslich in eine gefilterte Vinkel umwandelt, dann verschwindet das Problem mit den Übergang bei 0/360°.
Das hört sich aber ganz nach der Sinus-Cosinus-WertePärchen-per-ArcTan-in-Winkel-umwandel-Methode an! Ich hätte Bedenken, dass die Ergebnisse eher zufällig sind, wenn Sinus- und Cosinus-Wert - jeder für sich - manipuliert werden.
 
Das hört sich aber ganz nach der Sinus-Cosinus-WertePärchen-per-ArcTan-in-Winkel-umwandel-Methode an! Ich hätte Bedenken, dass die Ergebnisse eher zufällig sind, wenn Sinus- und Cosinus-Wert - jeder für sich - manipuliert werden.
Denke ich nicht.
Einfach eine Kreispuffer von z.B. 10 X und Y Werte einrichten. Die X-Werte summieren und mit 10 dividieren und Die Y-Werte summieren und mit 10 dividieren. Von die resultierende X/Y Werte den Vinkel bilden. Dies ziegt wie Vektor-Berechnungen mit kompleksen X/Y Zahlen-Werte einfacher als Vinkel+Abstand sind.
 
Zurück
Oben