Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Hallo,
ich habe folgendes Problem, ich messe die anliegende Spannung und setze diese in eine Bewegung um. Die Spannung wird durch ein Potentiometer geregelt, welches durch einen Wippschalter betrieben wird. Je mehr ich drücke, desto höher ist die Spannung. Wenn ich allerdings auf Maximalausschlag gehe, misst das Spannungsmessgerät meistens nicht gleich den maxialen Wert sondern einen dazwischen. Beispiel: Maximum wäre 10 ich drücke vollen Ausschlag und er nimmt den Wert von 6. Nun dachte ich, durch eine Mittelung könnte ich mein Problem beheben, doch irgendwie läuft das nicht wie gedacht. Gibt es eine Möglichkeiten, einen Filter oder ähnliches, der beispielsweise die ersten zwei Messwerte übergeht und erst den dritten weitergibt?
Oder denke ich zu kompliziert?
Hat jemand eine Idee?
Besten Dank für die Hilfe
Anstelle der Mittelwertbildung brauchst Du nur das Messwertarray nach der For-Schleife zu indizieren. ("Index-Array" aus der Array-Palette).
Ich vermute aber, dass das Verhalten an Deiner externen Schaltung liegt und nicht am Messgerät. Dann könntest Du statt zwei Werte zu erfassen um sie zu verwerfen, auch einfach etwas länger warten bevor Du einen Wert erfasst.
bis denne,
* mario *
21.01.2015, 11:02 (Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2015 11:03 von GerdW.)
Zitat:Nun dachte ich, durch eine Mittelung könnte ich mein Problem beheben, doch irgendwie läuft das nicht wie gedacht.
Weil dein Messgerät nicht sofort den gewünschten Wert anzeigt, willst du das mit einer Mittelwert-Berechnung korrigieren?
Wie soll das (rein mathematisch) funktionieren?
Zitat:Gibt es eine Möglichkeiten, einen Filter oder ähnliches, der beispielsweise die ersten zwei Messwerte übergeht und erst den dritten weitergibt?
Momentan nimmst du immer 5 Messwerte und berechnest davon den Mittelwert. Wie wäre es, wenn du einfach die Funktion "ArraySubset" anwendest, um von den 5 Messwerten nur die letzten 3 zu betrachten?
Wirklich sinnvoll hört sich deine ganze "Filterung" aber nicht an. Ich würde erst einmal versuchen herauszufinden, WARUM nicht sofort der erwartete Messwert anliegt…
Zu deinem VI: ich hatte dir eigentlich etwas anderes gezeigt! Wieso ist das Messintervall nicht innerhalb der (inneren) Messschleife? Wie wird deine Messung jetzt getaktet?
Also:
Das das mit dem Mittelwert nicht so ganz funktioniert war mir irgendwie klar, ich wollte es trotzdem ausprobieren um zu zeigen, dass es so nicht geht...
Ich weiß, dass das Problem nicht am Messgerät liegt, sondern am Schalter, welcher nicht immer gleich den Maximalwert ausgibt. Jedoch ist es technisch so bedingt, dass ich nur diesen benutzen kann. Weshalb ich mir programmtechnisch eine Lösung einfallen lassen muss.
Das mit dem Messintervall habe ich übersehen, als ich mein Programm wieder abgespeckt habe. Ich habe es vorher genau so wie du es hattest ausprobiert. Besten Dank nochmal dafür.
Ich versuche es erstmal mit dem Index Array.
Um länger zu warten bevor ich den Messwert erfasse muss ich nur das vorhandene Messintervall verändern oder?
Zitat:das Problem nicht am Messgerät liegt, sondern am Schalter, welcher nicht immer gleich den Maximalwert ausgibt. Jedoch ist es technisch so bedingt, dass ich nur diesen benutzen kann.
Solche Problem löst man durch Vorgeben einer Wartezeit (was ja nichts anderes ist als dein "2 Messwerte wegschmeißen") nur bedingt mit einer gewissen Wahrscheinlichkeit.
Besser ist eine Lösung, bei der man auf einen passenden Wert innerhalb gewisser Fehlertoleranzen wartet!
Zitat:Ich versuche es erstmal mit dem Index Array.
Welches "Index Array"?
Zitat:Um länger zu warten bevor ich den Messwert erfasse muss ich nur das vorhandene Messintervall verändern oder?
Das wäre auch eine Option…
Wie schon gesagt: besser öfter Messwerte aufnehmen und die Messauswertung erst mit den erwarteten Werten beginnen!
Ich habe es jetzt so probiert wie auf dem Bild zu sehen, leider immer noch nicht der gewünschte Erfolg. Ich steuere die Spannung anhand eines Kippschalters und diese Spannung wird in eine Geschwindigkeit für eine Bewegung einer Achse umgerechnet.
Tippe ich den Schalter nun an und gehe auf den maximalen Ausschlag, so bekomme ich erst 4V dann 6V dann 10V angezeigt. Ich möchte aber nur die 10 V haben. Allerdings soll es bei kleinen Spannungen auch funktionieren wenn ich zum beispiel den Schalter nur halb durchdrücke.
Mit dem Index Array scheint es nicht zu klappen, da die Werte immer neu gebildet werden und der letzte nicht der größte ist. Dann dachte ich mir lasse ich mir das array füllen und den Maximalen Wert auslesen. Leider immer noch zu langsam oder zu schwach.
Zwischendurch hopsen mir immer wieder niedrigere Geschwindigkeiten dazwischen bei vollem Anschlag des Schalters.
Jemand eine Idee?
Zitat:Mit dem Index Array scheint es nicht zu klappen
Ich weiß auch nicht, warum du das verwendest. Ich habe es nicht empfohlen…
Zitat:Tippe ich den Schalter nun an und gehe auf den maximalen Ausschlag, so bekomme ich erst 4V dann 6V dann 10V angezeigt. Ich möchte aber nur die 10 V haben.
Wie oben schon beschrieben, kann man sein Signal auswerten und nur dann weiterverwenden, wenn es über einen gewissen Zeitraum stabil bleibt. Das muss man dann aber programmieren!
Wobei mir immer noch nicht klar ist, wieso sich dein Messwert so verhält…
Zitat:Mit dem Index Array scheint es nicht zu klappen
Naja, solange Du den Index-Anschluß nicht verdrahtest, wird automatisch der erste Wert des Arrays ausgegeben....
(21.01.2015 14:35 )GerdW schrieb: Ich weiß auch nicht, warum du das verwendest. Ich habe es nicht empfohlen…
Meine Empfehlung bezog sich auch mehr auf die konkrete Frage nach dem "3ten Wert" als auf das Gesamtproblem.
Im übrigen schliesse ich meinem Vorredner an: Wenn das Signal nicht wenigstens annähernd stabil ist, lässt es sich schlecht auswerten.
Zumindest muss man wissen, nach welchen Kriterien man das "gute" Signal vom "schlechten" unterscheiden kann. Dann könnte man je nachdem Wartezeit einfügen, Tiefpass-filtern, differenzieren, ein Histogramm bilden undundund. Das bedeutet aber erstmal das Problem "ungünstiges Schaltungsverhalten" zu analysieren. Dann eine abstrakte Lösung überlegen erst danach(!) die (eventuelle) Lösung in Labview programmieren.
Solche Überlegungen dauern je nach Erfahrung nur wenige Minuten (manchmal aber auch Jahre...) und sind zielführender als "blindes" rumprobieren.
bis denne,
* mario *
21.01.2015, 19:41 (Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2015 20:11 von Lucki.)
Das Problem gibt es doch millionenfach, und es wurde eben so oft gelöst: Bei jeder elektronischen Waage dürfen die Messwerte erst denn als gültig ausgegeben werden, wenn sich die Waage beruhigt hat. Dazu wird das Einschwingen der Waage überwacht, und erst dann, wenn innerhalb einer vorgegebenen Toleranz mehrere Abtastwerte gleich sind, wird der Wert als gültig ausgegeben.
..und so etwa würde man das machen:
(21.01.2015 19:41 )Lucki schrieb: Dazu wird das Einschwingen [...] überwacht, und erst dann, wenn innerhalb einer vorgegebenen Toleranz mehrere Abtastwerte gleich sind, wird der Wert als gültig ausgegeben.
Problem dabei:
Zitat:Zwischendurch hopsen mir immer wieder niedrigere Geschwindigkeiten dazwischen bei vollem Anschlag des Schalters.
=> Erstmal die Systematik der Signals verstehen!
Ich würde z.B. den (vermutlich) vorhandenen Labjack benutzen und entweder mit hoher zeitlicher Auflösung 10 Schaltversuche mitloggen und als Diagramm anzeigen lassen, oder das Eingangssignal in Echtzeit mit einem Zeigerinstrument überwachen und dabei am Schalter "spielen". Dann kann man leichter eine Systematik beim einschwingen oder zittern erkennen.
Gerade für solche mal-eben-schnell-messen-und-anzeigen-Versuche ist Labview doch optimal geeignet.