Einen guten Morgen an alle LVF-Mitglieder.
Ich habe mal wieder eine Frage.
Und zwar geht es um eine Mittelwertbildung.
Ich habe eine Messwerterfassung die mir nach einer Mittelwertbildung alle 100ms einen Wert liefert.
Das läuft quasi kontinuierlich ab. Während der laufenden Erfassung sollen jetzt jeweils 10 Mittelwerte gespeichert werden und danach hieraus erneut ein Mittelwert berechnet werden. Sprich 10 Mittelwerte zwischenspeichern und auswerten. Dann wieder 10 Mittelwerte zwischenspeichern und auswerten. Usw.
Habe das jetzt mit Wertänderung (Punt-für-Punkt) realisiert.
Nun zu meiner Frage: Ist es hier besser, wenn man mit Meldern arbeiten würde? Bei der momentanen Lösung kann es ja sein, dass ein MW ausgelassen wird, wenn er den gleichen Wert hat wie sein Vorgänger?
Habe das VI mal angehängt.
Vielen Dank!
Gruß
Das hatten wir schon öfter...LUCKI hat da einen schönen Vorschlag...such mal danach, oder warte bis er sich meldet...oder schreib ihm ne PN!
EDIT:
Habs gefunden...so:
[
attachment=23958]
Hi Achim.
Danke für die schnelle Antwort.
Ich hab es mit dem FIR-Filter ausprobiert. Aber es funktioniert nicht so wie ich mir das gewünscht habe.
Die zweite while-Schleife läuft viel schneller, als die Daten aus der ersten Mittelwertbestimmung.
Das heißt ich bekomme meinetwegen 10- oder 20-mal hintereinander denselben Wert. Da macht es dann keinen Sinn eine Mittelwertbildung drüber zu machen. Das Aufsummieren soll immer dann erfolgen, wenn an "Anzeige neuer Mittelwert" ein neuer Wert anliegt, sprich ca. alle 100ms. Lässt sich das mit dem von dir geposteten Beispiel lösen?
Grüße
' schrieb:Die zweite while-Schleife läuft viel schneller, als die Daten aus der ersten Mittelwertbestimmung...Aufsummieren soll immer dann erfolgen, wenn an "Anzeige neuer Mittelwert" ein neuer Wert anliegt
Häh?
Wo ist denn "Anzeige neuer Mittelwert"?
Ganz allgemein:
-Bau mal in jede Schleife eine Wartezeit ein, um deine CPU mal verschnaufen zu lassen
-Platziere "Start Task" und "Stop Task" vor bzw. hinter der Schleife
-Warum brauchst du überhaupt eine zweite Schleife?
A.
Guten Morgen!
Die Anzeige neuer Mittelwert ist einfach nur eine numerische Anzeige.
Ich meinte eigentlich wenn ein neuer Wert aus der Mittelwertbildung anliegt.
Wie kann ich denn überprüfen ob ein neuer Wert ausgegeben wird?
Die zweite Schleife war nur zu Testzwecken, die brauche ich natürlich nicht.
Nun noch einmal zu Start und Stop Task.
So wie es im Moment aufgebaut ist funktioniert das ganze.
Edit: Durch die Verwendung in der Klammer realisiere ich doch das "immer wieder Ausführen" der Messung, da diese ja quasi kontinuierlich durchgeführt werden soll. Hast du einen besseren Vorschlag?
Wenn ich die Start und Stop Task außerhalb der Schleife platziere, bekomme ich immer Fehler angezeigt. Kannst du mir einen Tip geben wie ich hier die Start und Stop Task.vi außerhalb anordnen kann ohne Fehler?
Vielen Dank!
' schrieb:Wenn ich die Start und Stop Task außerhalb der Schleife platziere, bekomme ich immer Fehler angezeigt. Kannst du mir einen Tip geben wie ich hier die Start und Stop Task.vi außerhalb anordnen kann ohne Fehler?
Guck dir im ExampleFinder z.B. mal das Beispiel "Cont AcqChart Samples-Int Clk.vi" an
' schrieb:Die Anzeige neuer Mittelwert ist einfach nur eine numerische Anzeige.
Ich meinte eigentlich wenn ein neuer Wert aus der Mittelwertbildung anliegt.
Wie kann ich denn überprüfen ob ein neuer Wert ausgegeben wird?
Ich kann die entsprechende Stelle bei dir im ursprünglichen VI leider nicht identifizieren...
Hmm... Ja. Du meinst das Beispiel "ContAcq&Graph Voltage-Int Clk.vi" oder?
Das hab ich mir auch schon angeschaut. Das Problem ist, dass hier das ganze über die kontinuierliche Erfassung gemacht wird. Ich habe das über "Endliche Anzahl" damit bei jeder steigenden Flanke eine Messung beginnt.
Steigende Flanke --> erfasse x Samples (nicht gebrauchter Teil) --> erfasse x Samples (benötigter Teil).
Ich brauche hier nur immer bestimmte Teile des Signals und diese müssen in Abhängigkeit von der steigenden Flanke erfasst werden.
Im Beispiel wird doch nur einmal auf die steigende Flanke getriggert und dann kontinuierlich erfasst. Ich muss auf jede steigende Flanke triggern. Fällt dir dazu was ein?
Ich habe mal zwei Bilder und das überarbeitete VI angehängt.
Im Bild "Beispiel" sieht man das VI im Betrieb. Das Bild bleibt so stehen und ist keine laufende Welle.
Im oberen Graph sieht man den "nicht benötigten Teil" der Messwerte und im unteren Graph den "benötigten Teil".
Im Bild "Systemdruck 4,5bar Taktung 50%" sieht man das tatsächliche zu erfassende Signal. Die Mittelwertbildung muss über den rot markierten Bereich erfolgen. Diesen bestimme ich über die steigende Flanke.
Ich hab im VI auch mal die Stelle markiert die ich meinte.
Gruß
' schrieb:Ich hab es mit dem FIR-Filter ausprobiert. Aber es funktioniert nicht so wie ich mir das gewünscht habe.
Die zweite while-Schleife läuft viel schneller, als die Daten aus der ersten Mittelwertbestimmung.
Bei der Mittelwertbildung muß man unterscheiden, ob es dabei um Datenreduktion oder um Glättung geht, und Du muß da erst mal Farbe bekennen. Bei der Mittelwertbidung mit FIR-Filter erfolgt keine Datenreduktion, die Anzahl der Punkte bleibt erhalten.
Einer größte Vorteile von Meldern/Queues ist, daß sich die Verbraucherscleife mit der Erzeugerscleife synchronisiert. Der Meldeempfänger wartet bei jedem Dchleifendurchlauf, bis neue Daten im Puffer sind.
Deine untere Schleife ist hingegen völlig undiskutabel, sie läuft rasend schnell und beansprucht 100% CPU-Last. Aber selbst wenn Du ein Wait hineinmachst, hast Du so keine Synchronisation mit der Hauptschleife.
Anm: Absendung hat sich verzögert, bitte um Entschuldigung, falls jetzt neue Beiträge gekommen sind, in denen das Gleiche steht.
Hi!
Es geht bei meiner Anwendung um eine Datenreduktion für die Mittelwertbildung. Ich brauche z.B. von den erfassten 1000 Messwerten die ersten 650 Werte nicht und die folgenden 350 für die Mittelwertbildung.
Aus diesen 350 Werten wird der Mittelwert gebildet. Von diesem gebildeten Mittelwert will ich nun noch einmal 10 Werte nach einander zwischenspeichern und noch einmal einen Mittelwert bilden. Diese zweite MW-Bildung dient nur einer Anzeige, damit der Wert nicht so stark schwankt. "Arbeiten" will ich mit dem Mittelwert aus den 350 Messwerten.
Ich habe noch ein Beispiel gepostet ohne die untere Schleife.
Hast du eine Idee wie ich feststellen kann, ob neue Daten aus der 1.Mittelwertbildung vorhanden sind?
Bin dankbar für jeden Tip!