LabVIEWForum.de
Problem mit Mittelwertbildung - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Problem mit Mittelwertbildung (/Thread-Problem-mit-Mittelwertbildung)



Problem mit Mittelwertbildung - JohnnyBlack - 16.05.2013 12:17

Hallo, habe ein sicher sehr einfaches Problem mit meinem Programm, gab hier im Forum mal ein ähnliches Problem, aber da endete das Thema ohne Lösung.

Und zwar werden in der Endversion meines Programms über eine Messkarte jede Minute mehrere Werte eingelesen.
Einer dieser Werte stammt von einem Durchflusssensor. Enhält dieser ein Messignal ab einer bestimmten Größe (Motor an) soll das Programm die anliegenden Werte direkt in eine Datei speichern (so weit läuft das Programm).
Falls der Durchflusssensor jedoch kein Signal bekommt (Motor aus) sollen die eingelesenen Werte über 15 min eingelesen, dann ein Mittelwert gebildet und erst dann gespeichert werden um die Protokolldateien übersichtlich zu halten.
Wenn jedoch innerhalb dieser 15 min der Motor eingeschaltet wird, soll dieser Mittelwert sofort erzeugt und gespeichert werden.

Nach ewigen rumprobieren hat mich diese sicher simple Aufgabe zur Weißglut gebracht.
Ich hab eine vereinfachte Version meines Programms erzeugt um zu zeigen was ich meine. Auch meinen Lösungsansatz poste ich mit (Mittelwert 15).
Simuliere ich darin in der for-Schleife die Werte funktioniert das, lese ich sie nun aber ein aber nicht. Das liegt sicher daran, dass die Schleife nicht weiß, wann ein Wert kommt aber ich finde dort keine Lösung.

Hoffe ihr könnt mir helfen Wink


RE: Problem mit Mittelwertbildung - GerdW - 16.05.2013 13:28

Hallo Johnny,

im Mittelwert.vi machst du das hier:
[attachment=44662](Ich habe nur die lokalen Variablen durch Drähte ersetzt.)
Was soll die FOR-Loop erreichen? Wozu die Stopp-Bedingung in der Loop: da die Loop nur im TRUE-Case aufgerufen wird, läuft sie dann auch immer durch ohne abzubrechen!
Wozu den Mittelwert von 15 exakt gleichen Werten berechnen?
THINK DATAFLOW!

- Wozu die lokale Variable "Intervall" im anderen subVI? Nimm einen Draht!
- Wozu kopierst du den Wert von "Intervall" in eine lokale Variable von "Intervall"? Willst du sichergehen, dass auch wirklich dieser Wert drin steht???

Zitat:Falls der Durchflusssensor jedoch kein Signal bekommt (Motor aus) sollen die eingelesenen Werte über 15 min eingelesen, dann ein Mittelwert gebildet und erst dann gespeichert werden um die Protokolldateien übersichtlich zu halten.
Wenn jedoch innerhalb dieser 15 min der Motor eingeschaltet wird, soll dieser Mittelwert sofort erzeugt und gespeichert werden.
Code:
IF Motor=an THEN
   Mittelwert = Momentanwert
ELSE
   Mittelwert = RunningAverage(Momentanwert)
ENDIF
Für den RunningAverage gibt es eine Pt-by-Pt-Funktion!


RE: Problem mit Mittelwertbildung - JohnnyBlack - 16.05.2013 13:52

Erst einmal schonmal vielen Dank für die Anregungen. Mit den lokalen Variablen liegt daran, dass ich viel am Probieren bin momentan und noch nicht viel optimiert ist. Aber werde da mal mehr drauf achten.

(16.05.2013 13:28 )GerdW schrieb:  Wozu den Mittelwert von 15 exakt gleichen Werten berechnen?
THINK DATAFLOW!

Genau da liegt mein Problem, ich will nicht 15 gleiche Werte berechnen. In das vi Mittelwert wird jede Minute ein neuer Wert übergeben. Es sollen dann 15 Werte nacheinander (im fertigen Programm also über ein Intervall von 15 Minuten) gespeichert werden. Dann soll nur daraus ein Mittelwert gebildet und ausgegeben werden. Dann soll von der 16. bis zur 30. Minute der nächste Mittelwert gebildet werden etc. So werden dann über Tag statt 1440 nur 96 Werte geloggt.

(16.05.2013 13:28 )GerdW schrieb:  Was soll die FOR-Loop erreichen? Wozu die Stopp-Bedingung in der Loop: da die Loop nur im TRUE-Case aufgerufen wird, läuft sie dann auch immer durch ohne abzubrechen!

Die Stopp-Bedingung habe ich eingebaut, damit bei einer Änderung des Zustandes (Durchfluss vorhanden) die For-Schleife unterbrochen wird und dann von den bisher eingelesenen Werten der Mittelwert gebildet wird.
Ansonsten würde die Schleife im schlimmsten Fall 15 Minuten laufen, obwohl die ankommenden Daten schon wieder im Minutentakt gespeichert werden müssten.


RE: Problem mit Mittelwertbildung - JohnnyBlack - 16.05.2013 15:03

Leider darf ich meinen Eintrag nicht editieren aber ich hab glaub ich mein Problem (oder zumindest eines davon) erkannt. Wenn ich in dem Sub-Vi eine Schleife verwende wird der Eingangsmesswert nur einmal aufgerufen und immer wieder als Eingangsmesswert aufgerufen. Gibt es da eine Möglichkeit, den reell anliegenden Wert einzulesen oder muss ich irgendwie versuchen, dass VI jedes mal erneut aufzurufen damit ich zu meiner Lösung komme und mir irgendwie die letzten Messwerte darin merken?
Allerdings müsste ich das Sub-VI doch immer wieder aufrufen (wieder in einer Schleife), da gibts dann doch das selbe Problem oder?


RE: Problem mit Mittelwertbildung - GerdW - 16.05.2013 15:14

Hallo Johnny,

Zitat:Wenn ich in dem Sub-Vi eine Schleife verwende wird der Eingangsmesswert nur einmal aufgerufen und immer wieder als Eingangsmesswert aufgerufen.
Richtig. THINK DATAFLOW!

Zitat:Gibt es da eine Möglichkeit, den reell anliegenden Wert einzulesen oder muss ich irgendwie versuchen, dass VI jedes mal erneut aufzurufen damit ich zu meiner Lösung komme
Jedes mal erneut aufrufen - ohne Schleife im subVI!

Zitat:und mir irgendwie die letzten Messwerte darin merken?
"Irgendwie" heißt fast immer Schieberegister/FeedbackNode!

Zitat:Allerdings müsste ich das Sub-VI doch immer wieder aufrufen (wieder in einer Schleife), da gibts dann doch das selbe Problem oder?
Dein HauptVI sollte doch eine Schleife haben! Die reicht doch aus, um dein subVI immer wieder aufzurufen...