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 erfasse alle 500 ms einen Temperatur-Messwert aus diesen Messwerten möchte ich für einen Zeitraum von 10 Minuten einen gleitenden Mittelwert bilden und diesen zur Protokollierung abspeichern. Der Mittelwert soll gleitend sein da ich außer der "alle 10 Min. speichern-Funktion" den aktuellen Mittelwert auch in einer Anzeige im FP darstelle. Nachdem ich den Mittelwert gespeichert habe wird das Array wieder gelöscht und die Mittelwertbildung beginnt wieder für 10 Minuten von neuen. Das alles läuft 24 Stunden und das ganze Jahr durch und betrifft 24 Temperatur-Sensoren. Das bedeutet das wenn ich alle 500 ms einen Wert erfasse, ich bei 10 Minuten 1200 Werte pro Sensor im Array habe, sind so viele Werte eigendlich ein Problem?
Leider habe ich nur die LV Base-Version und somit nicht die gewünschten Vis zurverfügung daher habe ich ein eigenes Vi erstellt und möchte Euch bitten einen Blick darauf zu werfen ob das so wie ich es mir dachte auch möglich ist.
das dürfte kein Problem sein.
Ich weiss nicht wie groß der Arbeitsspeicher Deines Rechners ist, aber 1200 Werte sind eigentlich auf jedem halbwegs modernen Rechner ein Klacks. Damit belegst Du mit dem Datentyp DBL (64-Bit Floating Point) noch nicht einmal 10KB des Speichers.
das dürfte kein Problem sein.
Ich weiss nicht wie groß der Arbeitsspeicher Deines Rechners ist, aber 1200 Werte sind eigentlich auf jedem halbwegs modernen Rechner ein Klacks. Damit belegst Du mit dem Datentyp DBL (64-Bit Floating Point) noch nicht einmal 10KB des Speichers.
Gruß,
Marko
Hi Marko,
leider funktioniert mein Vi doch nicht so wie erwartet, jedesmal wenn ich das Array lösche wird nicht der letzte Mittelwert übergeben sondern der Messwert.
Ich glaube das ich es jetzt richtig abgeändert habe.
Das Problem ist das alle 10 Minuten der Mittelwert von jedem der 24 Sensoren in eine .txt-Datei und in einem Graphen geschrieben wird.
Beginnt nach 10 Minuten die neue Mittelwertbildung mit dem letztem Mittelwert bekomme ich im Graphen keine "Ausreißer".
Oder habe ich da ein Denkfehler?
ich mach sowas immer indem ich mir ein FIFO-Register (Array) programmiere.
Die länge des Registers vorgeben und dann solange füllen bis es komplett voll ist.
Der aktuellste Wert ist immer das Array-Element 0 (also immer vorne anfügen, geht auch anders so finde ich es aber einfacher), der älteste Wert immer das letzte Element. Wenn das FIFO-Register voll ist immer das letzte Element löschen und vorne den aktuellsten Wert anfügen.
Gruß,
Marko
"Make it simple, make it strong!"
01.03.2007, 20:09 (Dieser Beitrag wurde zuletzt bearbeitet: 12.11.2015 16:17 von Lucki.)
' schrieb:ich mach sowas immer indem ich mir ein FIFO-Register (Array) programmiere.
Die länge des Registers vorgeben und dann solange füllen bis es komplett voll ist.
Der aktuellste Wert ist immer das Array-Element 0 (also immer vorne anfügen, geht auch anders so finde ich es aber einfacher), der älteste Wert immer das letzte Element. Wenn das FIFO-Register voll ist immer das letzte Element löschen und vorne den aktuellsten Wert anfügen.
Die Aufgabe hast Du zwar perfekt gelöst, eine andere Frage - jenseits der reinen Programmiertechnik -, ist aber, ob das wirklich praxisgerecht ist. Die Anzeige wird einerseits mit jedem Messwerte, also alle 500ms, aufdatiert, aber andererseits ist das jedesmal der Mittelwert über die letzten 1000 Werte.
Ich denke aber, daß der Mittelwert aus so vielen Werten nur für die Aufzeichnung, nicht aber für die laufende Anzeige sinnvoll ist. Andererseits ist aber auch für die Anzeige eine Mittelwertbildung, wenn auch über eine geringere Anzahl von Werten, sinnvoll.
Deshalb würde ich es vielleicht so machen:
Die Anzeige wird nur nur bei jedem 10. Messwert, also alle 5s, aufdatiert, und es ist der Mittelwert der letzten 10 Werte. Von diese Werten bilde ich dann Mittelwerte für die Datenspeicherung.
Das ist auch resourcenschonender, denn ich brauche kein FIFI mit 1000 (=10*100) Elementen, sondern nur zwei Arrays mit 10 + 100 Elementen.
@ Marko
deine Möglichkeit ist natürlich auch klasse, allerdings habe ich hier das Problem das nur ein kleines Fenster der Temperatur-Verläufe sichtbar wird.
Der Kunde möchte jedoch alle 10 Minuten den Mittelwert von allen Temperaturwerten haben und auch nur alle 10 Minuten diesen Wert protokollieren.
@ Ludwig
Du hast natürlich recht das es für die Anzeige im FP nicht so gut ist so viele Werte zu sammeln.
Also wenn ich dich richtig verstanden habe würdest du Beispielweise: für eine Minute aus den Messwerten einen Mittelwert bilden diesen in der Anzeige im FP darstellen und auch diesen in einem weiteren Array für die Datenprotokollierung schreiben. Wenn dann 10 Mittelwerte im Array für die Protokolierung vorliegen wird aus disen 10 Mittelwerten wieder ein Mittelwert gebildet und dieser auch protokolliert.
Oder habe ich deinen Vorschlag falsch verstanden?
Dánke und liebe Grüße
Gregor
Anzeige
04.03.2007, 10:56 (Dieser Beitrag wurde zuletzt bearbeitet: 04.03.2007 11:02 von Lucki.)
' schrieb:Du hast natürlich recht das es für die Anzeige im FP nicht so gut ist so viele Werte zu sammeln.
Also wenn ich dich richtig verstanden habe würdest du Beispielweise: für eine Minute aus den Messwerten einen Mittelwert bilden diesen in der Anzeige im FP darstellen und auch diesen in einem weiteren Array für die Datenprotokollierung schreiben. Wenn dann 10 Mittelwerte im Array für die Protokolierung vorliegen wird aus disen 10 Mittelwerten wieder ein Mittelwert gebildet und dieser auch protokolliert.
Oder habe ich deinen Vorschlag falsch verstanden?
Nein, nicht, es kam mir aber nur darauf an zu sagen, daß es sinnvoll sein könnte für die laufende Anzeige einerseits und für die langzeitliche Aufzeichnung andererseits unterschiedliche Mittelungszeiten zu verwenden. Und außerdem, daß man dann nicht mehr 1200 Werte zwischenzuspeichern braucht, sondern nur noch, verteilt auf 2 Arrays, z.B. 20 + 60 (das Produkt muß 1200 ergeben).
Was aber die Darstellung als Diagramm betrifft, das war kein Vorschlag, sondern das habe ich nur gemacht, um das Beispielprogramm etwas aufzupeppen. So wie ich Dich verstanden hatte, sprachst Du nur von einer laufenden Anzeige und von einer laufenden Datenaufzeichnung als Mittelwert über 10min. Dein FP kannst Du natürlich auch aufpeppen, aber ob um in welchem Umfang das mußt Du selbst entscheiden. Das mögliche Maximum wäre: Anzeige + graphischer Verlauf für 10s- und 10min- Mittelwert. (die 10sec sind von mir jetzt auch frei aus der Luft gegriffen)
Es ist auch zu überlegen, ob für die kurzzeitige ("10s") Anzeige ein echte gleitende Mittelwertbidung, so wie von Marco vorgeschlagen, besser ist.
Der Unterschied: Es wird dann ständig alle 0.5sec aufdatiert, die Anzeige des Mittelwertes ist immer 5 sec (die Hälfte der Mittelungszeit) hinterher. Bei nicht gleitender Mittelwertbildung ist die Anzeige im Moment der Aufdatierung 5sec hinterher, aber kurz vor der Aufdatierung nach 10sec ist der Rückstand natürlich 15sec.
Marcos Vi würde ich nur verwenden, wenn man nur das Basispaket hat. Ansonsten gibt es das VI "Glättungsfilter-Koeffizienten", welche man an das VI "FIR-Filter" anschließt. (Punkt zu Punkt - Signalverarbeitung) (Sehr gute Tarnung im im Funktionsmenü, ich brauche immer wieder 5 min, um das zu finden)
-Es Sollen 5 Messwerte in ein Array gespeichert und daraus der MW gebildet und grafisch dargestellt werden.
-dann soll der erste Wert, der gespeichert wurde wieder gelöscht und ein neuer hinzugefügt und daraus wieder der MW gebildet werden
Hab schon etliche Möglichkeiten mit Arrays und Schleifen versucht, komme aber nie zum gewünschen Ergebnis
Das Problem bei mir liegt darin, das immer nur ein Wert gespeichert wird und nicht gewartet wird bis 5 Werte im Array sind.
Ich hänge mal 2 Möglichkeiten die ich versucht habe und mein Programm unten an.
Hoffe ihr habt Vorschläge wie ich das Problem gelöst bekomme und bedanke mich schon mal
Gruß
Valon
PS: ich habe die Beiträge zu diesem Thema gelesen und auch die VIs die hier geladen wurden ausprobiert und damit rumexperimentiert...