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!
Ich arbeite an einem Problem an dem ich nicht weiterkomme: Ich möchte gern nacheinander eintreffende Werte in ein Array schreiben, um damit eine Art fortlaufende Zwischenauswertung zu ermöglichen, die insbesondere das Kriterium für ein Messende dann erkennt.
Die Daten werden vom DAQ-Assistenten bereitgestellt (ich weiss, nicht professionell...). Ich scheitere nun am Versuch z.B. die letzten 10 Werte dynamisch, quasi wie ein Schieberegister, in einem Array zur Auswertung vorzuhalten. Hat hier jemand ne Idee.
Vielen Dank im Voraus!!
Anzeige
22.12.2009, 13:21 (Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2010 13:06 von dimitri84.)
Das was du suchst nennt sich Ringpuffer. Dazu gibt es einige threads. Hier was zum nachmalen und reindenken:
Erzähl' mal wie dein Kriterium für ein Messabbruch aussieht.
!!Edit: Das Schieberegister der For-Schleife muss durch normale Tunnel ersetzt werden !!
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
Ich werte Temperaturen an einem Messstand aus. Wenn sich der Temperaturverlauf nur noch unwesentlich ändert, also zum Beispiel 10 aufeinanderfolgende Werte sich um weniger als 0,5 Grad unterscheiden, soll die Messung beendet werden.
...also ich hab mich bisher auf die Konvertierung dynamischer Daten nach DBL konzentriert, um in dem dann erscheinenden Menü "1D-Array mit Skalaren - automaisch" nützen zu können. Aber leider bisher ohne Erfolg...
22.12.2009, 13:36 (Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2009 13:45 von dimitri84.)
' schrieb:Ich werte Temperaturen an einem Messstand aus. Wenn sich der Temperaturverlauf nur noch unwesentlich ändert, also zum Beispiel 10 aufeinanderfolgende Werte sich um weniger als 0,5 Grad unterscheiden, soll die Messung beendet werden.
Vielleicht kommst du dann auch mit 2 gewöhnlichen Schieberegistern zurecht:
Schick einfach jede Schleifeniteration den aktuellen Messwert in ein SR und überprüfe jedes Mal das deltaT (aktueller Wert zum letzten Wert). Wenn das deltaT kleiner 0.5 ist dann inkrementierst du ein zweites Schieberegister (Counter). Ist der Counter bei 10 angekommen, so ist deine Abbruchbedingung erfüllt. Wenn delta mal größer 0.5 musst du den Counter wieder auf Null setzten. Es macht allerdings einen Unterschied, ob alle 10 Werte in einem gewissen Bereich liegen müssen (Ringpuffer nötig) oder ob 10 Mal hintereinander das detltaT kleiner Grenzwert ist. Musst du abwegen.
Aber da du ja noch mehr auswerten willst, kommst du wohl an so einem Puffer nicht vorbei.
Gruß dimitri
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
Super, genau das war meine Idee der Umsetzung. Deiner Beschreibung zufolge wär für mein Problem die SR-Lösung ausreichend. Nun habe ich in der Suche bereits nach möglichen fertigen Modulen zu Schieberegistern / shifting register erfolglos gesucht, auch meine intensiven Bemühungen selbst eines zu generieren blieben erfolglos. LabVIEW akzeptiert wohl nicht ohne Weiteres Rückkopplungen wie mir scheint... Hast du mir hierzu einen Tipp?
22.12.2009, 13:56 (Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2009 13:57 von dimitri84.)
' schrieb:Nun habe ich in der Suche bereits nach möglichen fertigen Modulen zu Schieberegistern / shifting register erfolglos gesucht, auch meine intensiven Bemühungen selbst eines zu generieren blieben erfolglos.
rechte Maustaste auf einen Schleifenrand (for oder while, egal) -> Shiftregister hinzufügen.
Es gibt auch einen Rückkopplungsknoten der genau dasselbe macht, den finde ich aber nicht so anschaulich.
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
ah ok, Danke. Aber was ist der "schiebende" Impuls dieses Registers. Die Zählvariable in Kombi mit einer Verzögerung, oder bereits automatischerweise ein neuankommender Wert? Und wie kann ich bei einem zweiten Register den Inkrementschritt der Zählvariable auslösen??
Wie ein Schieberegister funktioniert kannste in der Hilfe nachschauen.
Inkrementieren kannst du mit dem Inkrementieren.VI (Numerisch Palette).
Das Überprüfen und das Rücksetzten auf Null machst du mit normalen Case-Strukturen.
Ein bisschen was selber überlegen musst man auch; so lernt man am schnellsten.
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
Aber eines ist mir nach wie vor unbegreiflich. Ich kann jetzt einen Messwert seinem Vorgänger gegenüberstellen (Leitung durch eine bis 1 zählende For-Schleife als Schieberegister, die gerade um Dauer der Messwertabstände verzögert ist) ABER, ich kann diese Werte nicht voneinander subtrahieren.
Die Multiplikation geht, Addition auch (wenn ich einen Summand mit -1 multipliziere, dann wieder nicht...) sehr komisch.
offensichtlich muss das was mit dem Datenformat zu haben, weis hier jemand wichtige Restriktionen???