Werte in Array schreiben- Mittelwert bilden und ausgeben - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Werte in Array schreiben- Mittelwert bilden und ausgeben (/Thread-Werte-in-Array-schreiben-Mittelwert-bilden-und-ausgeben) Seiten: 1 2 |
Werte in Array schreiben- Mittelwert bilden und ausgeben - um0k - 25.08.2020 12:07 Hallo zusammen ich bin ziemlich unerfahren was Labview angeht. Ich arbeite gerade an meiner Bachelorarbeit und versuche eine Regelung für eine Solarthermieanlage zu erstellen. Ein Teil dieser Regelung besteht darin, den IST-Volumenstrom zu erfassen und diesen ggf. an den SOLL-Volumenstrom anzupassen. Dafür werden die Ausgabesignale eines Durchflussmessers benötigt. Dieser Sensor gibt ein Rechtecksignal aus. Die Datenerfassung ist über eine Messkarte USB-1608GX-2AO und den dazugehörigen ULX-Bausteinen in Labview realisiert. Für die Berechnung des Volumenstroms ist es notwendig, die Frequenz des Rechtecksignals zu ermitteln. Dafür wurde ein Counterbaustein eingepflegt, welcher die Steigungen der Kurve in einem bestimmten Messbereich zählt. Bild im Anhang. Prinzipiell kann man meine Überlegung auch ohne Array aufbauen. Das Problem dabei liegt aber in der Messzeit. Je größer die Messzeit ist, desto langsamer wird die Regelung. Sie wird um diese Zeitdauer gelähmt. Dabei ist eine große Messzeit aber Vorteilhaft, da somit die Periodendauer genauer bestimmt werden kann. (Das Rechtecksignal is nicht immer periodisch) Jetzt zu dem Array. Die Messwerte sollen in die Zeilen 0-6 geschrieben und aus diesen dann der Mittelwert gebildet werden. Realisieren wollte ich das ganze mit einer For-Schleife nur fehlt mir hier irgendeine Idee wie man das Ganze in Labview begrenzen kann. In Vba könnte das ganze so aussehen: Sub test() Dim Wert As Double, start As Double, ende As Double, mittelwert As Double, zeilennr As Double start = 1 ende = 6 zeilennr = 1 'Do While "Stopp" = false For i = start To ende Cells(zeilennr, 1) = Int((5 * Rnd) + 1) zeilennr = zeilennr + 1 Next i mittelwert = Application.Average(Range(Cells(1, 1), Cells(6, 1))) Cells(1, 3) = mittelwert 'Loop End Sub Ich kann es nur nicht auf Labview übertragen. Dafür fehlt mir etwas. Wenn der Index mit I verbunden ist werden unendlich viele Arrayzeilen geschrieben. Es sollen aber nur Die Zeilen 0-6 beschrieben werden. Im Anhang ist die Regelung nochmal abgebildet. Vielen Dank schonmal Mit freundlichen Grüßen RE: Werte in Array schreiben- Mittelwert bilden und ausgeben - GerdW - 25.08.2020 13:26 Hallo um0k, herzlich willkommen im Forum! Zitat:Die Messwerte sollen in die Zeilen 0-6 geschrieben und aus diesen dann der Mittelwert gebildet werden.Momentan ist die FOR-Loop sinnlos… Zitat:Ich kann es nur nicht auf Labview übertragen. Dafür fehlt mir etwas. Wenn der Index mit I verbunden ist werden unendlich viele Arrayzeilen geschrieben. Es sollen aber nur Die Zeilen 0-6 beschrieben werden.Erstmal ein genereller Hinweis: Bilder kann man mit LabVIEW weder debuggen noch editieren. Wenn du dagegen ein VI anhängen würdest, bestünde die Chance, dass hier jemand für dich ein paar Änderungen im VI vornimmt… Beim Vergleich mit VBA immer an die unterschiedliche Index-Zählweise bei Arrays denken. VBA ist in dieser Hinsicht "keine ordentliche Programmiersprache"! Dann zum Inhalt der FOR-Loop: Wenn du in einem Array aus genau 7 Elementen (Index 0-6) immer ein Element ersetzen willst, solltest du nicht InsertIntoArray verwenden! Tipp: Verwende doch eine PtByPt-DataQueue! Weiterhin: Für eine Mittelwertberechnung solltest du wirklich nicht auf ExpressVIs zurückgreifen. Hast du mal unter Mathematik->Statistik nachgeschaut? Es ist auch in VBA nicht üblich, zwei unterschiedliche FP-Elemente (aka Variablen) identisch zu benennen ("Anzeige")! "Besondere" Anzeigeelemente wie deine Charts bieten die Option, eine numerische Anzeige sichtbar zu machen. Dann benötigst du diese 2 "Anzeigen" erst gar nicht! Versuche ExpressVIs zu meiden. Auch deine Verzögerungszeit kann man durch eine simple Wait(ms)-Funktion ersetzen. Vorteil: es ist selbst bei einem Bild des Blockdiagramms erkennbar, wie schnell die Schleife iterieren soll. Außerdem versteckt ein DDT-Draht den zugrundeliegenden Datentyp und führt zu sehr merkwürdigen Verdrahtungen… (Code-Dokumentation!) Generell auf den StyleGuide (s. LabVIEW-Hilfe) achten: gerade Drähte erhöhen deutlich die Lesbarkeit eines Blockdiagramms! (Code-Dokumentation!) RE: Werte in Array schreiben- Mittelwert bilden und ausgeben - Freddy - 25.08.2020 13:30 Hallo umOK, Ich würde die Eingrenzung des Arrays über Schieberegister machen. Für den Mittelwert gibt es ein VI. Gruß Freddy RE: Werte in Array schreiben- Mittelwert bilden und ausgeben - GerdW - 25.08.2020 13:32 Hallo Freddy, statt Vergleich und Select-Node könnte man auch einfach die QR-Funktion verwenden… RE: Werte in Array schreiben- Mittelwert bilden und ausgeben - um0k - 25.08.2020 13:39 Hallo GerdW, erst einmal Danke für die schnelle Antwort. Die For-Schleife war nur eine Idee... Ich dachte ich könnte damit das Array begrenzen. Dass es leider nicht so einfach geht, gerade auch wegen der Index-Zählweise in Labview, ist mir dann auch aufgefallen. Vba habe ich nur benutzt um mich da an etwas zu versuchen . Wie schon gesagt bin ich echt unerfahren was Labview angeht. Deshalb weiß ich gerade auch nicht genau wie du das mit der PTbyPT-Dataqueue meinst. (PointbyPoint?? ). Für die Mittelwert berechnung hatte ich auch vorher noch einen anderen Baustein. Ich denke jedoch, dass das keinen Unterschied gemacht hat. Ich hänge hier mal das VI an damit evtl. jemand etwas ändern kann. Vielen Dank RE: Werte in Array schreiben- Mittelwert bilden und ausgeben - jg - 25.08.2020 13:39 Falls einen das gesammelte Array nicht interessiert, dann geht es noch einfacher mit der "Mean PtByPt" Funktion: [attachment=61168] Gruß, Jens RE: Werte in Array schreiben- Mittelwert bilden und ausgeben - um0k - 25.08.2020 14:04 Hallo an alle, Alles gute und zielführende Ideen. Prinzipiell interessiert mich das Array nicht. Es ist aber für eine Überprüfung hilfreich. Einfach nur aus Interesse. Wie genau arbeitet die PointbyPoint funktion? Wird nach dem 6. Wert der 1. überschrieben? Vielen Dank an alle. RE: Werte in Array schreiben- Mittelwert bilden und ausgeben - GerdW - 25.08.2020 14:08 Hallo um0k, so könnte dein VI aussehen: [attachment=61169] Zitat:Wie genau arbeitet die PointbyPoint funktion? Wird nach dem 6. Wert der 1. überschrieben?Steht das nicht in der LabVIEW-Hilfe? Kontexthilfe-Fenster öffnen & Maus auf die Funktion liefert die Kurzbeschreibung. Und einen Link zur längeren Beschreibung! (Du kannst dir das auch selbst anschauen: einfach in die PtByPt-Funktion hineinschauen! Ist auch nur ein VI…) RE: Werte in Array schreiben- Mittelwert bilden und ausgeben - jg - 25.08.2020 14:08 (25.08.2020 14:04 )um0k schrieb: Wie genau arbeitet die PointbyPoint funktion? Wird nach dem 6. Wert der 1. überschrieben?Ja, das kannst du dir auch anschauen - das VI ist in LabVIEW geschrieben und der Sourcecode ist einsehbar. Gruß, Jens RE: Werte in Array schreiben- Mittelwert bilden und ausgeben - um0k - 25.08.2020 14:15 Ihr habt natürlich Recht! Daran hätte ich auch denken können . Vielen Dank an euch! |