Thursday 16 November 2017

Labview Moving Average Vi


Berechnen von Moving Average. This VI berechnet und zeigt den gleitenden Durchschnitt mit einer vorgewählten Zahl an. Zuerst initialisiert das VI zwei Schieberegister Das obere Schieberegister wird mit einem Element initialisiert und fügt dann den vorherigen Wert kontinuierlich mit dem neuen Wert hinzu. Dieses Schieberegister hält Die Summe der letzten x-Messungen Nach dem Teilen der Ergebnisse der Add-Funktion mit dem vorgewählten Wert berechnet das VI den gleitenden Mittelwert. Das untere Schieberegister enthält ein Array mit der Dimension Durchschnitt Dieses Schieberegister hält alle Messwerte der Ersatzfunktion Ersetzt den neuen Wert nach jeder Schleife. Dieses VI ist sehr effizient und schnell, weil es die Funktion ersetzen Element innerhalb der while-Schleife verwendet, und es initialisiert das Array, bevor es in die Schleife. This VI wurde in LabVIEW 6 erstellt 1.Bookmark Share. Mittlerweile verläuft nicht ein Fenster der Daten zu einem Zeitpunkt. Problem Ich versuche, durchschnittliche Teilmengen von 100 Punkten zu einem Zeitpunkt von einem kontinuierlichen eingehenden Signal Problem ist, dass die Mittelwertmittel die ersten 100 Punkte 0 99 und dann die folgenden 100 Punkte 1 100 Wiederverwendung 99 der gleichen Werte anstatt ein bewegter Fenster Durchschnitt, ich möchte die Blockmittelung der Daten zu implementieren, das heißt, ich würde Wie die Daten in Klumpen aufzubrechen und den Durchschnitt eines jeden Teils von Daten aufzuzeichnen. Lösung Die Standardfunktionalität des Mittels gibt nicht den Durchschnitt eines jeden Teils von Daten. Vielmehr, wie in der Problemanweisung beschrieben, für eine gegebene Fenstergröße n , Mittelwert im Mittelpunkt 0 bis n-1, dann Punkte 1 bis n, dann Punkte 2 bis n 1, also und so weiter Um die Blockmittelung durchzuführen, musst du einen Workaround-Code schreiben. Du solltest eine Modulrechnung auf der Iteration durchführen Zählung der Schleife, um zu bestimmen, wann zu durchschnittlich und wann, um Daten ohne Mittelwert weiterzugeben Durch die Berechnung der Iterationszahl i mod n, Wenn i 0, das Ende des Fensters erreicht ist und der mittlere Durchschnitt korrekt ist, dann speichern wir diesen Wert in Ein Array oder Indikator Auf der nächsten ite Ration der mod-Wert wird gleich 1 sein, der das Mittelwert zurücksetzt und es für die nächste Teilmenge von n Punkten vorbereitet. Der Trick ist zu erkennen, dass die durch die Block-Mittelung erhaltenen Mittelwerte eine Teilmenge des bewegten Fenster-Durchschnitts sind, die von Mean durchgeführt wird Fälle, in denen Sie alle Daten auf dem Frontpanel aktualisieren möchten, während Sie nur die Mittelwerte protokollieren, wie in der obigen Problemanweisung beschrieben. Sie können diese Funktion in ähnlicher Weise durchführen, indem Sie einen Modulbetrieb auf der Iterationszählung ausführen und einen Fall auswählen In einer Fallstruktur, die auf diesem basiert, verweisen wir auf das Gemeinschaftsbeispiel unter Verwandte Links für weitere Informationen darüber, wie dies zu tun ist und Beispielcode, der dynamische Daten analysiert und konvertiert und die oben genannten Funktionen ausführt. Ihr Code macht immer noch keinen Sinn SINS Sie rufen die SubVI ein Skalar zu einer Zeit, Sie sind nicht immer, was Sie wollen, weil das Schieberegister nur erinnert sich die letzten N Skalars, egal, welcher Kanal ist es aus Ihrem Code ist immer noch sehr ineffi Cient und gewellt zB warum bist du immer noch mit Insert in Array zu appendieren sowohl in der Mani nad in der sub Sie können ein reenetrant subVI und eine parallele innerste FOR-Schleife verwenden, aber das scheint auch übermäßig kompliziert. Wenn Sie wollen, um einen laufenden Durchschnitt zu tun Auf jedem Kanal muss das SubVI ein 2D-Array im SubVI behalten. Das alles ist schon vorher gemacht. Ich kann deine Frustration verstehen - mehr wenn der Kontext der LV-Codierung in unserem Leben anders ist Für mich als Maschinenbauer ist es ein Fügen Sie hinzu und das, was als Zeit vergangen ist So ist der Code möglicherweise nicht der effizienteste oder einer, der den letzten Tropfen Saft aus der CPU extrahiert. In der Tat in Maschinensteuerungsanwendungen die ganze CPU tut nichts mehr, als das zu laufen Control-Code Und mit Prozessoren wie i5 oder i7, macht es noch einfacher Ich bin nicht sagen, effizienter Code ist eine Verschwendung von Zeit - ich sage nur, dass der Kontext ist anders. Just, bevor ich hier abwickeln ist eine andere schnell und schmutzig Was funktioniert die fi Es werden nur wenige Werte ignoriert - nicht eine große Sache in einer Datenprotokollierungsanwendung, die stundenlang läuft. Raghunathan LV2012 zur Automatisierung von Hydraulikprüfständen. Es tut mir leid, dass Sie so eine geringe Rücksicht auf Eleganz und Korrektheit haben und dass Sie das gut fühlen Genug ist gut genug Vielleicht werden Sie in Zukunft auch jemanden, der LabVIEW kennt und versteht und ihm einfach sagen, was Sie tun wollen, und lassen Sie sie es für Sie tun. Jedoch, wenn Ihr Ziel ist, Daten von N zu sammeln Kanäle bei Häufigkeit F in Hz, aber um den Durchschnitt von M Punkten anzuzeigen, so für jeden M Punkte, den du dir schreibst 1 Punkt, der Durchschnitt der M Punkte, hier eine gute Möglichkeit, es zu tun. Erstellen Sie eine Producer Loop, die die Daten erzeugt Indem Sie Ihr Sampling-Gerät so einstellen, dass Sie M Punkte aus N Kanälen erhalten haben, die bei der Frequenz F abgetastet werden. Dies sollte ein 2D-Array sein M Zeilen von N Spalten Setzen Sie dies in eine Warteschlange und wiederholen Sie immer und immer wieder, bis die Stop-Taste gedrückt wird Die Producer Loop, senden Sie eine weitere leere 2D-Array Sie sehen, warum in Ein Moment. Geben Sie eine parallele Consumer Loop und füttern Sie es die Warteschlange, die von der Producer Loop verwendet wird Dequeue the Data Array - wenn es leer ist, sind wir fertig, so lassen Sie die Warteschlange und stoppen Sie die Consumer Loop. Otherwise, müssen wir durchschnittlich verbrauchen Und Plot die Daten Wir müssen die M Punkte durch N Kanäle Array auf einen N-Kanal durch M Punkte-Array transponieren Dieses Array zu einem For Loop, die Schleife über die Kanäle, berechnen die Durchschnitt der M Punkte, und geben Sie diese durchschnittliche Wir Ich möchte diesen einzigen Punkt von allen N Kanälen aufzeichnen, also gebe es durch Build Array, um eine 1 von N Array zu machen, und plot this. Here ist ein Snippet in LabVIEW 2012, mit dem du alles simulieren kannst, erzeugt es Punkte an der Häufigkeit, die Sie angeben, max 1KHz Ich skaliere auch die Plot so, dass die Zeit in Sekunden ist Das didn t übersetzen gut für das Snippet - ich habe eigentlich einen Averaged Data Property Node dort verwendet. Dies, denke ich, tut, was ich verstehe Sie wirklich wollte, Nämlich eine Anzeige zu haben, die den Durchschnitt mit einer langsameren Kurve als t zeigt Er Daten Sie werden feststellen, dass jeder Kanal einen anderen Offset hat, also wenn man sich die Handlung ansieht, sollten Sie 16 Zeilen sehen, die immer mehr glatt aussehen, wenn Sie die Sample Size erhöhen. Sie müssen die Parameter angeben, bevor Sie den Code ausführen, Da die Prinzipien des Datenflusses, auf denen LabVIEW basiert, Änderungen ignorieren, die Sie an den Steuerelementen vornehmen, sobald das Programm läuft. Erstens lassen Sie mich für die ausführliche Antwort und das Code-Snippet danken, dass ich Ihre Absicht bekomme, zu helfen. Meine frühere Antwort ertönte möglicherweise Ein bisschen grob, aber ich werde die letzte Person sein, um etwas abzuräumen, das halb gebacken oder instabil ist Lassen Sie mich erklären. Meine Linie der Tätigkeit Ölhydraulik und ich habe meine eigene Firma, die 1995 gegründet wurde und als Wertzusatzvorschlag ich versorgen integrierte Systeme mit Instrumenation und software Wir betreiben in zwei großen vertices - WInd Turbinen und Testsysteme und bis jetzt haben wir viele komplette Systeme geliefert, die in der Automobilindustrie hier in Indien sowie in E eingesetzt werden Urope. But ist meine Firma nicht eine riesige Organisation und ist eine mittelgroße und hier ist ein Fang - es ist neben unmöglich, erfahrene LabVIEW Programmierer zu finden Indien hat einen riesigen Pool von Software-Ingenieuren, aber alle sind in Desktop-Computing und die Der Ingenieure in Physical Computing ist fast null oder vernachlässigbar SO, wenn Kunden zu mir kommen mit frischen Anforderungen vertrauen mir - alle sind anders Ich nehme die Herausforderung persönlich aber zu liefern Ich bin ganz auf die Unterstützung von Online-Community abhängen Todate Ich habe erfolgreich LV entwickelt Code, um Daten über CanOpen, Modbus RTU, Profinet und EtherCAT zu erhalten WIth so vielfältige und kurze Zeit, um Marktanforderungen Ich habe einfach nicht die Ressourcen, um ein riesiges Team zu liefern, so dass es läuft auf die Entwicklung von grundlegenden oder offensichtlichen Code, der tut, was es ist Angeblich und wenn der Client ist OK mit ihm - lassen Sie es dort Sein ein Unterschied zwischen Funktionscode und Smart-Code und ich war auf die früheren und nicht die Entwicklung von crappy Codeing zu Ihrem Beispielcode - t Seine Produzent Verbrauchermodell ist eine regelmäßige, die ich für alle meine Projekte, wo ich habe Main als Produzent und die Sub-VIs als Verbraucher Mit Datenfluss über Queue wird es mehr im Detail. Raghunathan LV2012 zu automatisieren Hydraulische Prüfstände.

No comments:

Post a Comment