Hallo LabVIEW Forum,
ich habe zwei allgemeine Fragen zu LabVIEW.
Ich möchte einen Mittelwert von z.B. 100 Werten bilden. Nachdem dieser Mittelwert gebildet wurde, soll über ein Boolean ausgegeben werden ob der Prozess beendet wurde oder nicht.
Gibt es ein VI das eine solche Boolean Funktion für die Mittelwert-Bestimmung integriert hat. Bisher habe ich mit der Mean Pt by Pt - Funktion gearbeitet aber um zb. 100 Werte zu haben muss ich zusätzlich ein Array anlegen.
Die zweite Frage bezieht sich auf etwas anderes.
Ich habe in einem Case einen Wert ausgerechnet und möchte diesen im Folgenden Case wiederverwenden. Gibt es hierbei eine Alternative zu dem Anlegen einer neuen Queue zum Übergeben des Wertes an den Folgenden Case?
Grüße
BlackEagle
Hallo Eagle,
Zitat:Ich habe in einem Case einen Wert ausgerechnet und möchte diesen im Folgenden Case wiederverwenden.
Das musst du genauer erläutern: eine Case-Struktur führt genau einen Case aus. Wie kommst du dann zum "folgenden Case"?
Wenn eine Schleife um die Case-Struktur herum ist: nimm ein Schieberegister!
Zitat:Ich möchte einen Mittelwert von z.B. 100 Werten bilden. Nachdem dieser Mittelwert gebildet wurde, soll über ein Boolean ausgegeben werden ob der Prozess beendet wurde oder nicht. Gibt es ein VI das eine solche Boolean Funktion für die Mittelwert-Bestimmung integriert hat. Bisher habe ich mit der Mean Pt by Pt - Funktion gearbeitet aber um zb. 100 Werte zu haben muss ich zusätzlich ein Array anlegen.
Nimm die PtByPt-DataQueue, dort bekommst du auch die aktuelle Länge der Queue angezeigt und kannst diese auswerten…
Hallo Gerd,
dankeschön die PtbyPt - Queue hilft mir schon weiter denke ich und erspart mir einiges.
Zu dem ersten Punkt nochmal:
Ich habe über eine Typedef und der Case-Struktur eine kleine Zustandsmaschine gebaut. Zwischen Zustand Messen und Zustand speichern möchte ich den aktuellen Messwert übergeben. Mein erster Einfall wäre eine Queue gewesen, jedoch ist es nur ein Wert der lokal innerhalb dieser beiden Case-Fälle übergeben werden soll. Ich hab es jetzt in ein Cluster gelegt, in welches ich den Messwert reinlege und hole diesen bei dem Case "Speichern" wieder heraus. Dafür muss das Cluster natürlich ein typedef sein.
Ich weiß aber nicht ob es eleganter geht. Eine globale Variable ist keine schöne Lösung habe ich mir sagen lassen und eine Datenqueue für diesen Wert anzulegen soll ich zumindestens vermeiden.
Nochmal vielen Dank, durch deine Hilfen habe ich bisher eine Menge gelernt, ich muss dir mal einen ausgeben
Grüße
BlackEagle
Hallo BlackEagle,
Zitat:Ich weiß aber nicht ob es eleganter geht.
Ich wiederhole mich nur sehr ungern: Schieberegister!
Hallo Gerd,
sorry ich hab es überlesen
.
Nochmal eine Frage zu der Punkt für Punkt Queue.
Da ich momentan noch meine orginalen Signale nicht habe frage ich mich wie es sich verhält wenn ich unterschiedliche Werte hätte.
Beispielsweise ich lese eine Spannung aus, welche unterschiedlich sind. Wird dann die Queue für die unterschiedlichen Werte angelegt, oder wird 100 mal ( bei Sample Length = 100) der selbe Wert angelegt.
Also:
Wert 1
Wert 2
Wert 3
...
...
oder etwa so:
Wert 1
Wert 1
Gruß BlackEagle
Hallo BlackEagle,
Zitat:Da ich momentan noch meine orginalen Signale nicht habe frage ich mich wie es sich verhält wenn ich unterschiedliche Werte hätte.
Warum baust du dir nicht einfach ein kleines Test-VI, bestehend aus Zufallszahl und PtByPt-Queue, und schaust dir selbst an, wie der Queue-Inhalt aussieht???
(17.01.2020 14:45 )BlackEagle schrieb: [ -> ]Beispielsweise ich lese eine Spannung aus, welche unterschiedlich sind. Wird dann die Queue für die unterschiedlichen Werte angelegt, oder wird 100 mal ( bei Sample Length = 100) der selbe Wert angelegt.
Sie wird selbstverständlich mit unterschiedichen Werten gefüllt, aber die Länge ist nicht unterschiedlich, da die Queue bei der Initialisierung mit Nullen (bzw. dem Initialisierungswert) gefüllt wird. Der Ausgang "Sample Länge" eignet sich also nicht dazu, festzustellen, ob das Array schon 100 echte Messwerte enthält. Aber so würde es gehen:
[
attachment=60673]