Hallo,
ich würde gerne meine empfangenen Messsignale (z.B. 10 Stück) in einem Array speichern, diese dann beliebig auswerten (z.B. den maximalen Wert des Arrays bestimmen) und mir ausgeben lassen und dann das Array vollständig "löschen" um meine nächsten 10 Signale zu empfangen. Also eine Art Zwischenspeicher für Daten.
Als Beispiel habe ich etwas zusammengestellt, wo statt der Signale zufällige Werte ausgegeben werden.
[
attachment=57994]
Nur hab ich das Problem, dass ich diese zufälligen Zahlen innerhalb der For-Schleife generiere... außerhalb würde es nicht funktionieren.
Meine Signale kommen natürlich von außerhalb in die Schleife rein.
Habe wirklich eine "Gedankenblockade" und meine soft-skills in Labview reichen nicht aus, um mir selbst weiterzuhelfen.
Hallo Hasiman,
Zitat:Als Beispiel habe ich etwas zusammengestellt, wo statt der Signale zufällige Werte ausgegeben werden.
Wozu die Multiplikation mit der Arraykonstanten mit einem Null-Element?
Wozu die Feedbacknode außerhalb der Schleife? Du hast doch schon ein Schieberegister in der Schleife!
Warum eine FOR-Loop, wenn das VI quasi unendlich laufen soll?
Warum InsertIntoArray statt BuildArray? Warum nicht gleich ein Array korrekt initialisieren und dann ReplaceArraySubset nutzen?
Fragen über Fragen…
Zitat:Nur hab ich das Problem, dass ich diese zufälligen Zahlen innerhalb der For-Schleife generiere... außerhalb würde es nicht funktionieren. Meine Signale kommen natürlich von außerhalb in die Schleife rein.
Ersetze die Zufallszahl durch ein Dequeue (oder WaitOnNotification) und schon kommen Werte von "außen" in die Schleife rein…
Stichwort: "Producer-Consumer"!
Hallo Gerd,
danke erstmal für die Antwort.
(11.07.2017 15:22 )GerdW schrieb: [ -> ]Zitat:Als Beispiel habe ich etwas zusammengestellt, wo statt der Signale zufällige Werte ausgegeben werden.
Wozu die Multiplikation mit der Arraykonstanten mit einem Null-Element?
Ich will meine 10 Elemente löschen und danach weitere 10 Elemente empfangen.
Wozu die Feedbacknode außerhalb der Schleife? Du hast doch schon ein Schieberegister in der Schleife!
Ich will dass er wieder von 0 anfängt zu zählen.
Warum eine FOR-Loop, wenn das VI quasi unendlich laufen soll?
Das alles kommt dann später in eine While-Schleife, eine FOR-Schleife habe ich gemacht, weil ich erstmal nur beispielsweise nur 10 Elemente haben will.
Warum InsertIntoArray statt BuildArray? Warum nicht gleich ein Array korrekt initialisieren und dann ReplaceArraySubset nutzen?
Danke BuildArray funktioniert auch.
Fragen über Fragen…
Zitat:Nur hab ich das Problem, dass ich diese zufälligen Zahlen innerhalb der For-Schleife generiere... außerhalb würde es nicht funktionieren. Meine Signale kommen natürlich von außerhalb in die Schleife rein.
Ersetze die Zufallszahl durch ein Dequeue (oder WaitOnNotification) und schon kommen Werte von "außen" in die Schleife rein…
Stichwort: "Producer-Consumer"!
Das habe ich leider nicht verstanden. da, wo ich das VI haben will wird mein Input ein 1D Array sein.
Siehe:
Gemischtes Signal filtern und aufteilen
Mein Hauptziel ist, dass ich bsp. 10 Elemente sammel, die vollständig in einem Graphen sehe, diese gelöscht werden (Graph leer) und ich wieder eine bestimmte Zeit auf 10 Elemente warte. Erst nachdem meine 10 Elemente angekommen sind, will ich diese auslesen.
(11.07.2017 16:08 )Hasiman123 schrieb: [ -> ]Das habe ich leider nicht verstanden. da, wo ich das VI haben will wird mein Input ein 1D Array sein.
...
Mein Hauptziel ist, dass ich bsp. 10 Elemente sammel, die vollständig in einem Graphen sehe, diese gelöscht werden (Graph leer) und ich wieder eine bestimmte Zeit auf 10 Elemente warte. Erst nachdem meine 10 Elemente angekommen sind, will ich diese auslesen.
Hallo,
Daten zwischen 2 unabhängig voneinander laufenden Schleifen kommunizieren im Normalfall über Queues oder Melder (Palette Synchronisation).
Wenn du dein Programm also nach dem "Producer-Consumer"-Prinzip aufbaust, dann kann die eine Schleife (Data-Aquisition) die Daten in die Queue schreiben - wenn du diese als Lossy-Queue definierst, kannst du sie auch auf 10 begrenzen - und die 2. Schleife liest aus dieser Queue die Daten wieder aus.
Über die Fubnktion Queue-Status könntest du prüfen ob schon 10 Elemente enthalten sind.
Oder du organisierst deine Queue nicht so, dass jeder Messwert einem Queueelement entspricht sondern immer 10 Stück, zb. in einem 1D-Array als EIN Queueelement. Dann brauchst du deine Queue nur mit sinnvollem TO auszulesen und hast immer 10 Werte, wenn ein neues Queueelement da ist.
Gruß, Marko